{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-coldstorage-web",
      "artifactVersion": "2025.0.14",
      "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-2025)](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/job/lts-2025/)\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_/_lts-2025_ 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": "fe0f62a3aeb45090b09ce673d05dc2d5",
            "encoding": "UTF-8",
            "length": 8578,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2025.7"
      },
      "bundleId": "nuxeo-coldstorage-web",
      "components": [],
      "fileName": "nuxeo-coldstorage-web-2025.0.14.jar",
      "groupId": "org.nuxeo.coldstorage",
      "hierarchyPath": "/grp:org.nuxeo.coldstorage/nuxeo-coldstorage-web",
      "id": "nuxeo-coldstorage-web",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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-2025)](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/job/lts-2025/)\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_/_lts-2025_ 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": "fe0f62a3aeb45090b09ce673d05dc2d5",
        "encoding": "UTF-8",
        "length": 8578,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2025.0.14"
    },
    {
      "@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": "2025.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": 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": "2025.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-arender-core",
      "artifactVersion": "2025.0.4",
      "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": "2025.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": "2025.0.4"
            }
          ],
          "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": "2025.0.4",
              "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": "2025.0.4",
              "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": 41,
          "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": "2025.0.4"
            }
          ],
          "startOrder": 546,
          "version": "2025.0.4",
          "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": "2025.0.4",
              "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": "2025.0.4",
              "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": 42,
          "services": [],
          "startOrder": 17,
          "version": "2025.0.4",
          "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": "2025.0.4",
              "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": 43,
          "services": [],
          "startOrder": 18,
          "version": "2025.0.4",
          "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": "2025.0.4",
              "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": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.0.4",
              "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": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.0.4",
              "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": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.0.4",
              "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.audit.service.AuditComponent--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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.0.4",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.audit.service.AuditComponent\">\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": 243,
          "services": [],
          "startOrder": 16,
          "version": "2025.0.4",
          "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.audit.service.AuditComponent\" 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-2025.0.4.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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": 243,
      "minResolutionOrder": 41,
      "packages": [
        "nuxeo-arender"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.0.4"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-convert",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.core.convert.extension.GlobalConfigDescriptor",
                "org.nuxeo.ecm.core.convert.extension.ConvertCacheDescriptor"
              ],
              "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": "2025.7.12"
            }
          ],
          "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": 118,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "startOrder": 573,
          "version": "2025.7.12",
          "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    <object class=\"org.nuxeo.ecm.core.convert.extension.ConvertCacheDescriptor\"/>\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": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 119,
          "services": [],
          "startOrder": 112,
          "version": "2025.7.12",
          "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
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.cache/Contributions/org.nuxeo.ecm.core.convert.cache--configuration",
              "id": "org.nuxeo.ecm.core.convert.cache--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n    <cache enabled=\"true\">\n      <gcRate>10m</gcRate>\n      <maxSizeKB>10240</maxSizeKB> <!-- 10Mb -->\n    </cache>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.cache",
          "name": "org.nuxeo.ecm.core.convert.cache",
          "requirements": [],
          "resolutionOrder": 120,
          "services": [],
          "startOrder": 111,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.convert.cache\">\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\" point=\"configuration\">\n    <cache enabled=\"${nuxeo.conversion.cache.enabled:=true}\">\n      <gcRate>${nuxeo.conversion.cache.gcRate:=10m}</gcRate>\n      <maxSizeKB>${nuxeo.conversion.cache.maxSizeKB:=10240}</maxSizeKB> <!-- 10Mb -->\n    </cache>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/convert-cache-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-convert-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 5.4.2.qualifier\r\nEclipse-BuddyPolicy: dependent\r\nNuxeo-Component: OSGI-INF/convert-service-framework.xml,OSGI-INF/propert\r\n ies-contrib.xml,OSGI-INF/convert-cache-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": 120,
      "minResolutionOrder": 118,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-web-common",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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\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\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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": "2025.7.12",
              "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": 494,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 644,
          "version": "2025.7.12",
          "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\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": "2025.7.12",
              "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": "2025.7.12",
              "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": 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": "2025.7.12",
              "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": 495,
          "services": [],
          "startOrder": 405,
          "version": "2025.7.12",
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 498,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 654,
          "version": "2025.7.12",
          "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": 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": "2025.7.12",
              "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": "2025.7.12",
              "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 configured 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": 499,
          "services": [],
          "startOrder": 436,
          "version": "2025.7.12",
          "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 configured for more security -->\n    <header name=\"Content-Security-Policy\">${nuxeo.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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 501,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 652,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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>jakarta.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": "2025.7.12",
              "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": 502,
          "services": [],
          "startOrder": 434,
          "version": "2025.7.12",
          "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>jakarta.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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 505,
          "services": [],
          "startOrder": 433,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 506,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 653,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 507,
          "services": [],
          "startOrder": 435,
          "version": "2025.7.12",
          "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": 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": "2025.7.12",
              "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": 508,
          "services": [],
          "startOrder": 409,
          "version": "2025.7.12",
          "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": 36,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 510,
          "services": [],
          "startOrder": 406,
          "version": "2025.7.12",
          "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": 37,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 511,
          "services": [],
          "startOrder": 437,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\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,org.apache.commons.httpclient,or\r\n g.apache.commons.httpclient.methods,org.apache.commons.httpclient.param\r\n s,org.apache.commons.logging,org.nuxeo.common.utils,org.nuxeo.common.ut\r\n ils.i18n,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core;api=split,\r\n org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.blobholder,org.\r\n nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core.event,org.nuxeo.ecm.co\r\n re.event.impl,org.nuxeo.ecm.core.management.api,org.nuxeo.ecm.core.util\r\n s,org.nuxeo.ecm.platform.api.login,org.nuxeo.ecm.platform.login,org.nux\r\n eo.ecm.platform.usermanager,org.nuxeo.runtime,org.nuxeo.runtime.api,org\r\n .nuxeo.runtime.model,org.nuxeo.runtime.services.event,org.nuxeo.runtime\r\n .transaction\r\n\r\n",
      "maxResolutionOrder": 511,
      "minResolutionOrder": 494,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-routing-rest-api",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.restapi.server.routing",
      "components": [],
      "fileName": "nuxeo-routing-rest-api-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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\nBundle-Version: 1.0.0\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-management",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 134,
          "services": [],
          "startOrder": 125,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    <probe class=\"org.nuxeo.runtime.stream.StreamProbe\" name=\"streamStatus\">\n      <label>Stream 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.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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"healthCheck\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n     <probe enabled=\"true\" name=\"runtimeStatus\"/>\n     <probe enabled=\"true\" name=\"repositoryStatus\"/>\n     <probe enabled=\"true\" name=\"streamStatus\"/>\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": 135,
          "services": [],
          "startOrder": 123,
          "version": "2025.7.12",
          "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    <probe name=\"streamStatus\" class=\"org.nuxeo.runtime.stream.StreamProbe\">\n      <label>Stream probe</label>\n    </probe>\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     <probe name=\"streamStatus\" enabled=\"${nuxeo.stream.health.check.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": "2025.7.12",
              "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": 136,
          "services": [],
          "startOrder": 124,
          "version": "2025.7.12",
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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.RepositoryServiceComponent"
          ],
          "resolutionOrder": 580,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "startOrder": 579,
          "version": "2025.7.12",
          "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.RepositoryServiceComponent</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.ServerLocator",
            "org.nuxeo.runtime.management.ResourcePublisher",
            "org.nuxeo.runtime.metrics.MetricsService",
            "org.nuxeo.runtime.EventService"
          ],
          "resolutionOrder": 601,
          "services": [],
          "startOrder": 580,
          "version": "2025.7.12",
          "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.management.ServerLocator</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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 5.4.2.qualifier\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: org.apache.commons.lang,org.apache.commons.logging,org.n\r\n uxeo.common.xmap.annotation,org.nuxeo.ecm.core,org.nuxeo.ecm.core.api;a\r\n pi=split,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core.api.secur\r\n ity,org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.event.impl,org.nuxeo.ec\r\n m.core.model,org.nuxeo.ecm.core.repository,org.nuxeo.runtime,org.nuxeo.\r\n runtime.api,org.nuxeo.runtime.management,org.nuxeo.runtime.model,org.nu\r\n xeo.runtime.services.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": 601,
      "minResolutionOrder": 134,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-core",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.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": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 298,
          "services": [],
          "startOrder": 178,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 299,
          "services": [],
          "startOrder": 180,
          "version": "2025.7.12",
          "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": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 300,
          "services": [],
          "startOrder": 179,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.EventService",
                "name": "org.nuxeo.runtime.EventService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 584,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 537,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 588,
          "services": [],
          "startOrder": 597,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 589,
          "services": [],
          "startOrder": 596,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\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": 589,
      "minResolutionOrder": 298,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.directory.api",
        "org.nuxeo.ecm.core.schema"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "chemistry-opencmis-client-api",
      "artifactVersion": "2.0.0",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-bindings",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-impl",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-impl"
        ],
        "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis",
        "id": "grp:org.nuxeo.chemistry.opencmis",
        "name": "org.nuxeo.chemistry.opencmis",
        "parentIds": [],
        "readmes": [],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-api",
      "components": [],
      "fileName": "chemistry-opencmis-client-api-2.0.0.jar",
      "groupId": "org.nuxeo.chemistry.opencmis",
      "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis/org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-api",
      "id": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Apache Maven Bundle Plugin\r\nBuilt-By: Kevin.Leturc\r\nBuild-Jdk: 11.0.23\r\nSpecification-Title: OpenCMIS Client API\r\nSpecification-Version: 2.0.0\r\nSpecification-Vendor: Nuxeo\r\nImplementation-URL: http://www.nuxeo.com/en/products/chemistry-opencmis-\r\n client/chemistry-opencmis-client-api\r\nImplementation-Title: OpenCMIS Client API\r\nImplementation-Vendor: Nuxeo\r\nImplementation-Vendor-Id: org.nuxeo.chemistry.opencmis\r\nImplementation-Version: 2.0.0\r\nX-Apache-SVN-Revision: ${buildNumber}\r\nX-Compile-Source-JDK: 11\r\nX-Compile-Target-JDK: 11\r\nBnd-LastModified: 1717165747730\r\nBundle-Description: Apache Chemistry OpenCMIS is an open source implemen\r\n tation of the OASIS CMIS specification.\r\nBundle-DocURL: http://www.nuxeo.com/en/products/chemistry-opencmis-clien\r\n t/chemistry-opencmis-client-api\r\nBundle-License: https://www.apache.org/licenses/LICENSE-2.0.txt\r\nBundle-ManifestVersion: 2\r\nBundle-Name: OpenCMIS Client API\r\nBundle-SymbolicName: org.nuxeo.chemistry.opencmis.chemistry-opencmis-cli\r\n ent-api\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 2.0.0\r\nExport-Package: org.apache.chemistry.opencmis.client;version=\"2.0.0\";use\r\n s:=\"org.apache.chemistry.opencmis.client.api,org.apache.chemistry.openc\r\n mis.commons.server,org.apache.chemistry.opencmis.commons.spi\",org.apach\r\n e.chemistry.opencmis.client.api;version=\"2.0.0\";uses:=\"org.apache.chemi\r\n stry.opencmis.commons.data,org.apache.chemistry.opencmis.commons.defini\r\n tions,org.apache.chemistry.opencmis.commons.endpoints,org.apache.chemis\r\n try.opencmis.commons.enums,org.apache.chemistry.opencmis.commons.spi\"\r\nImport-Package: org.apache.chemistry.opencmis.client.api;version=\"[2.0,3\r\n )\",org.apache.chemistry.opencmis.commons.data;version=\"[2.0,3)\",org.apa\r\n che.chemistry.opencmis.commons.definitions;version=\"[2.0,3)\",org.apache\r\n .chemistry.opencmis.commons.endpoints;version=\"[2.0,3)\",org.apache.chem\r\n istry.opencmis.commons.enums;version=\"[2.0,3)\",org.apache.chemistry.ope\r\n ncmis.commons.server;version=\"[2.0,3)\",org.apache.chemistry.opencmis.co\r\n mmons.spi;version=\"[2.0,3)\"\r\nRequire-Capability: osgi.ee;filter:=\"(osgi.ee=UNKNOWN)\"\r\nTool: Bnd-3.3.0.201609221906\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2.0.0"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-rendition-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.rendition.api",
          "org.nuxeo.ecm.platform.rendition.core",
          "org.nuxeo.ecm.platform.rendition.publisher"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.rendition.api",
      "components": [],
      "fileName": "nuxeo-platform-rendition-api-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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\nBundle-Version: 1.0.0\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-multi-tenant-core",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": "2025.7.12",
              "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\n    <property indexOrder=\"ascending\" name=\"tenantId\" schema=\"user\"/>\n    <property indexOrder=\"ascending\" name=\"tenantId\" schema=\"group\"/>\n    <property indexOrder=\"ascending\" name=\"tenantId\" schema=\"multitenantvocabulary\"/>\n    <property indexOrder=\"ascending\" name=\"tenantId\" schema=\"multitenantxvocabulary\"/>\n    <property indexOrder=\"ascending\" name=\"tenantId\" schema=\"multitenantl10nvocabulary\"/>\n    <property indexOrder=\"ascending\" name=\"tenantId\" schema=\"multitenantl10nxvocabulary\"/>\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": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 208,
          "services": [],
          "startOrder": 210,
          "version": "2025.7.12",
          "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\n    <property schema=\"user\" name=\"tenantId\" indexOrder=\"ascending\" />\n    <property schema=\"group\" name=\"tenantId\" indexOrder=\"ascending\" />\n    <property schema=\"multitenantvocabulary\" name=\"tenantId\" indexOrder=\"ascending\" />\n    <property schema=\"multitenantxvocabulary\" name=\"tenantId\" indexOrder=\"ascending\" />\n    <property schema=\"multitenantl10nvocabulary\" name=\"tenantId\" indexOrder=\"ascending\" />\n    <property schema=\"multitenantl10nxvocabulary\" name=\"tenantId\" indexOrder=\"ascending\" />\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": "2025.7.12",
              "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": "2025.7.12",
              "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": 209,
          "services": [],
          "startOrder": 208,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 210,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 602,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 211,
          "services": [],
          "startOrder": 209,
          "version": "2025.7.12",
          "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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 212,
          "services": [],
          "startOrder": 212,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 213,
          "services": [],
          "startOrder": 207,
          "version": "2025.7.12",
          "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": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": "2025.7.12",
              "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": 291,
          "services": [],
          "startOrder": 211,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 461,
          "services": [],
          "startOrder": 213,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 470,
          "services": [],
          "startOrder": 214,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Multi Tenant Core\r\nBundle-SymbolicName: org.nuxeo.ecm.multi.tenant;singleton:=true\r\nBundle-Version: 0.0.1\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": 470,
      "minResolutionOrder": 208,
      "packages": [
        "nuxeo-multi-tenant"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-liveconnect",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": "2025.7.12",
              "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": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 196,
          "services": [],
          "startOrder": 193,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 197,
          "services": [],
          "startOrder": 199,
          "version": "2025.7.12",
          "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": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 198,
          "services": [],
          "startOrder": 200,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 199,
          "services": [],
          "startOrder": 191,
          "version": "2025.7.12",
          "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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 200,
          "services": [],
          "startOrder": 192,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 201,
          "services": [],
          "startOrder": 195,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 202,
          "services": [],
          "startOrder": 196,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 203,
          "services": [],
          "startOrder": 198,
          "version": "2025.7.12",
          "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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 204,
          "services": [],
          "startOrder": 197,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 367,
          "services": [],
          "startOrder": 194,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 368,
          "services": [],
          "startOrder": 190,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Live Connect\r\nBundle-SymbolicName: org.nuxeo.ecm.liveconnect;singleton:=true\r\nBundle-Version: 1.0.0\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": 368,
      "minResolutionOrder": 196,
      "packages": [
        "nuxeo-liveconnect"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-automation-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.automation.core",
          "org.nuxeo.ecm.automation.features",
          "org.nuxeo.ecm.automation.io",
          "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": "2025.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": "2025.7.12",
              "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": 44,
          "services": [],
          "startOrder": 74,
          "version": "2025.7.12",
          "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": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    <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    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveItemFromListProperty\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.CopySchema\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.ResetSchema\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentProperty\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveProperty\"/>\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    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.GetDocumentBlobs\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.GetAllDocumentBlobs\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentBlob\"/>\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    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.SetBlobFileName\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveDocumentBlob\"/>\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    <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\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": 45,
          "services": [],
          "startOrder": 101,
          "version": "2025.7.12",
          "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    <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    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveItemFromListProperty\"/>\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    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.SetDocumentProperty\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveProperty\"/>\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    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.GetDocumentBlobs\"/>\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    <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    <operation class=\"org.nuxeo.ecm.automation.core.operations.blob.SetBlobFileName\"/>\n    <operation\n        class=\"org.nuxeo.ecm.automation.core.operations.document.RemoveDocumentBlob\"/>\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    <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\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": "2025.7.12",
              "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": 46,
          "services": [],
          "startOrder": 100,
          "version": "2025.7.12",
          "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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 47,
          "services": [],
          "startOrder": 105,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 48,
          "services": [],
          "startOrder": 75,
          "version": "2025.7.12",
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": "2025.7.12",
              "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": 44,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 594,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "startOrder": 583,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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,org.apache.commons.lang,org.apache.commons.logging,org.cod\r\n ehaus.groovy.control;resolution:=optional,org.codehaus.groovy.runtime;r\r\n esolution:=optional,org.mvel2,org.mvel2.templates,org.nuxeo.common,org.\r\n nuxeo.common.utils,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core.\r\n api,org.nuxeo.ecm.core.api.blobholder,org.nuxeo.ecm.core.api.impl,org.n\r\n uxeo.ecm.core.api.impl.blob,org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.\r\n core.api.model.impl,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.cor\r\n e.api.security,org.nuxeo.ecm.core.api.security.impl,org.nuxeo.ecm.core.\r\n convert.api,org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.event.impl,org.\r\n nuxeo.ecm.core.schema,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.cor\r\n e.schema.types.primitives,org.nuxeo.ecm.core.schema.utils,org.nuxeo.ecm\r\n .core.versioning,org.nuxeo.ecm.platform.rendering.api,org.nuxeo.ecm.pla\r\n tform.rendering.fm,org.nuxeo.runtime.api,org.nuxeo.runtime.model,org.nu\r\n xeo.runtime.services.resource,org.nuxeo.runtime.transaction,org.osgi.fr\r\n amework;version=\"1.5.0\"\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\n\r\n",
      "maxResolutionOrder": 594,
      "minResolutionOrder": 44,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.login",
      "components": [],
      "fileName": "nuxeo-platform-login-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\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.xmap.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.\r\n ecm.core.api;api=split,org.nuxeo.ecm.core.api.security,org.nuxeo.ecm.di\r\n rectory;api=split,org.nuxeo.ecm.platform.api.login,org.nuxeo.ecm.platfo\r\n rm.usermanager,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtim\r\n e.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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-rest-api-io",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.restapi.io.capabilities.CapabilitiesJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.BinaryManagerStatusJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ConfigurationPropertiesJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ConnectStatusJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.MigrationJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.MigrationListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ProbeInfoJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ProbeInfoListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ProbeStatusJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ScheduleJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ScheduleListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.SequencerJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.io.management.SequencerListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.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": 529,
          "services": [],
          "startOrder": 345,
          "version": "2025.7.12",
          "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.io.capabilities.CapabilitiesJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.BinaryManagerStatusJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ConfigurationPropertiesJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ConnectStatusJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.MigrationJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.MigrationListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ProbeInfoJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ProbeInfoListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ProbeStatusJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ScheduleJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.ScheduleListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.SequencerJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.SequencerListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.io.management.SimplifiedServerInfoJsonWriter\" enable=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-rest-api-io-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: nuxeo-restapi-io\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.restapi.io;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/marshallers-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 529,
      "minResolutionOrder": 529,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-signature-api",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.signature.api",
      "components": [],
      "fileName": "nuxeo-platform-signature-api-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Digital Signature Api\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.signature.api;singleton:=tru\r\n e\r\nBundle-Version: 1.0.0\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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-common",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.common"
        ],
        "hierarchyPath": "/grp:org.nuxeo.common",
        "id": "grp:org.nuxeo.common",
        "name": "org.nuxeo.common",
        "parentIds": [],
        "readmes": [],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.common",
      "components": [],
      "fileName": "nuxeo-common-2025.7.12.jar",
      "groupId": "org.nuxeo.common",
      "hierarchyPath": "/grp:org.nuxeo.common/org.nuxeo.common",
      "id": "org.nuxeo.common",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 5.4.2.qualifier\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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-admin-center-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/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": "2025.7.12",
              "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.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/org.nuxeo.admin.center/org.nuxeo.admin.pageproviders",
          "name": "org.nuxeo.admin.pageproviders",
          "requirements": [],
          "resolutionOrder": 32,
          "services": [],
          "startOrder": 28,
          "version": "2025.7.12",
          "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.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/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": "2025.7.12",
              "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/org.nuxeo.admin.center/org.nuxeo.ecm.platform.admin.properties",
          "name": "org.nuxeo.ecm.platform.admin.properties",
          "requirements": [],
          "resolutionOrder": 33,
          "services": [],
          "startOrder": 223,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/org.nuxeo.admin.center/org.nuxeo.admin.workmanager",
          "name": "org.nuxeo.admin.workmanager",
          "requirements": [],
          "resolutionOrder": 34,
          "services": [],
          "startOrder": 29,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/org.nuxeo.admin.center/org.nuxeo.platform.admin.operation",
          "name": "org.nuxeo.platform.admin.operation",
          "requirements": [],
          "resolutionOrder": 35,
          "services": [],
          "startOrder": 491,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/org.nuxeo.admin.center/org.nuxeo.admin.core.types/Contributions/org.nuxeo.admin.core.types--doctype",
              "id": "org.nuxeo.admin.core.types--doctype",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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.schema.common"
          ],
          "resolutionOrder": 145,
          "services": [],
          "startOrder": 27,
          "version": "2025.7.12",
          "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.schema.common</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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.admin.center",
      "id": "org.nuxeo.admin.center",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Admin Center\r\nBundle-SymbolicName: org.nuxeo.admin.center;singleton:=true\r\nBundle-Version: 0.0.1\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;name=connec\r\n tClientRoot;extends=base;package=org/nuxeo/connect/client;headless=true\r\n\r\n",
      "maxResolutionOrder": 145,
      "minResolutionOrder": 32,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-retention-web",
      "artifactVersion": "2025.0.8",
      "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=retention/nuxeo-retention/lts-2025)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2025/)\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_/_lts-2025_ 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": "b033334a77a1d8b3a7022acd92316a74",
            "encoding": "UTF-8",
            "length": 6319,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2025.7"
      },
      "bundleId": "nuxeo-retention-web",
      "components": [],
      "fileName": "nuxeo-retention-web-2025.0.8.jar",
      "groupId": "org.nuxeo.retention",
      "hierarchyPath": "/grp:org.nuxeo.retention/nuxeo-retention-web",
      "id": "nuxeo-retention-web",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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=retention/nuxeo-retention/lts-2025)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2025/)\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_/_lts-2025_ 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": "b033334a77a1d8b3a7022acd92316a74",
        "encoding": "UTF-8",
        "length": 6319,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2025.0.8"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-io-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.io.api",
          "org.nuxeo.ecm.platform.io.core"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.io.api",
      "components": [],
      "fileName": "nuxeo-platform-io-api-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-ui",
      "artifactVersion": "2025.6.0",
      "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": "2025.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": 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": "2025.6.0",
              "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": 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": "2025.6.0",
              "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": 668,
          "services": [],
          "startOrder": 526,
          "version": "2025.6.0",
          "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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2025.6.0",
              "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": 669,
          "services": [],
          "startOrder": 525,
          "version": "2025.6.0",
          "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": 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": "2025.6.0",
              "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": 670,
          "services": [],
          "startOrder": 472,
          "version": "2025.6.0",
          "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "2025.6.0",
              "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": 671,
          "services": [],
          "startOrder": 524,
          "version": "2025.6.0",
          "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": 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": "2025.6.0",
              "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": 672,
          "services": [],
          "startOrder": 528,
          "version": "2025.6.0",
          "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": 49,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.6.0",
              "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\n    <!-- Max results for nuxeo select options. default is 1000.-->\n    <property name=\"org.nuxeo.web.ui.pagination.nuxeoSelectOptions.listingMaxItems\">1000</property>\n    <!-- allowed url to redirect -->\n   <property name=\"org.nuxeo.web.ui.trustedDomains\"/>\n\n   <!-- Search result numberFormatting -->\n  <property name=\"org.nuxeo.web.ui.numberFormatting.enabled\"/>\n  \n  <!-- Control eval allowed in CSP, default is true  -->\n  <property name=\"org.nuxeo.web.ui.expressions.eval\">true</property>\n\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": 673,
          "services": [],
          "startOrder": 527,
          "version": "2025.6.0",
          "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\n    <!-- Max results for nuxeo select options. default is 1000.-->\n    <property name=\"org.nuxeo.web.ui.pagination.nuxeoSelectOptions.listingMaxItems\">${org.nuxeo.pagination.nuxeoSelectOptions.maxAllowedItems:=1000}</property>\n    <!-- allowed url to redirect -->\n   <property name=\"org.nuxeo.web.ui.trustedDomains\">${org.nuxeo.web.ui.trustedDomains:=}</property>\n\n   <!-- Search result numberFormatting -->\n  <property name=\"org.nuxeo.web.ui.numberFormatting.enabled\">${org.nuxeo.web.ui.numberFormatting.enabled:=}</property>\n  \n  <!-- Control eval allowed in CSP, default is true  -->\n  <property name=\"org.nuxeo.web.ui.expressions.eval\">${org.nuxeo.web.ui.expressions.eval:=true}</property>\n\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/web-ui-properties.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-web-ui-2025.6.0-rc.4.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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.xml,\r\n  OSGI-INF/login-startup-page-web-contrib.xml, OSGI-INF/url-codecs-web-c\r\n ontrib.xml, OSGI-INF/browser-cache-contrib.xml, OSGI-INF/web-ui-propert\r\n ies.xml\r\n\r\n",
      "maxResolutionOrder": 673,
      "minResolutionOrder": 668,
      "packages": [
        "nuxeo-web-ui"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.6.0"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-localconf-simple",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.localconf"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.localconf",
        "id": "grp:org.nuxeo.ecm.localconf",
        "name": "org.nuxeo.ecm.localconf",
        "parentIds": [],
        "readmes": [],
        "version": "2025.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": "2025.7.12",
              "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": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 205,
          "services": [],
          "startOrder": 202,
          "version": "2025.7.12",
          "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": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 206,
          "services": [],
          "startOrder": 201,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Platform Local Configuration Simple\r\nBundle-SymbolicName: org.nuxeo.ecm.localconf;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/simple-local-configuration.xml,OSGI-INF/operat\r\n ions-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 206,
      "minResolutionOrder": 205,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-versioning-core",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 475,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 649,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/versioningmanager-service.xml\r\nImport-Package: javax.ejb,javax.naming,org.apache.commons.logging,org.nu\r\n xeo.common.collections,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.c\r\n ore.api.event,org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.event.impl,or\r\n g.nuxeo.ecm.core.schema,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.c\r\n ore.utils,org.nuxeo.ecm.directory;api=split,org.nuxeo.ecm.platform.vers\r\n ioning.api,org.nuxeo.osgi,org.nuxeo.runtime,org.nuxeo.runtime.api,org.n\r\n uxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.versioning\r\nRequire-Bundle: org.nuxeo.ecm.core\r\n\r\n",
      "maxResolutionOrder": 475,
      "minResolutionOrder": 475,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-importer-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.importer.core",
          "org.nuxeo.ecm.platform.importer.rest"
        ],
        "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": "2025.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": "2025.7.12",
              "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": 187,
          "services": [],
          "startOrder": 271,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 188,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 616,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM Importer\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.importer.core;singleton:=tru\r\n e\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/convert-service-contrib.xml,OSGI-INF/default-i\r\n mporter-service.xml\r\n\r\n",
      "maxResolutionOrder": 188,
      "minResolutionOrder": 187,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-imaging-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.picture.core",
          "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": "2025.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": "2025.7.12",
              "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": "2025.7.12",
              "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": 313,
          "services": [],
          "startOrder": 300,
          "version": "2025.7.12",
          "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": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"1\" bucketSize=\"10\" defaultScroller=\"repository\" httpEnabled=\"false\" inputStream=\"bulk/recomputeViews\" name=\"recomputeViews\" validationClass=\"org.nuxeo.ecm.platform.picture.recompute.RecomputeViewsActionValidation\"/>\n    <action batchSize=\"1\" bucketSize=\"10\" defaultScroller=\"repository\" enabled=\"false\" httpEnabled=\"false\" inputStream=\"bulk/recomputeViewsBackground\" name=\"recomputeViewsBackground\" 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": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    <streamProcessor class=\"org.nuxeo.ecm.platform.picture.recompute.RecomputeViewsAction\" defaultConcurrency=\"2\" defaultPartitions=\"12\" enabled=\"false\" name=\"recomputeViewsBackground\">\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": 314,
          "services": [],
          "startOrder": 268,
          "version": "2025.7.12",
          "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\" defaultScroller=\"repository\" inputStream=\"bulk/recomputeViews\" bucketSize=\"10\"\n      batchSize=\"1\" httpEnabled=\"false\"\n      validationClass=\"org.nuxeo.ecm.platform.picture.recompute.RecomputeViewsActionValidation\" />\n    <action name=\"recomputeViewsBackground\" defaultScroller=\"repository\" inputStream=\"bulk/recomputeViewsBackground\"\n      bucketSize=\"10\" batchSize=\"1\" httpEnabled=\"false\" enabled=\"${nuxeo.bulk.action.recomputeViewsBackground.enabled:=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    <streamProcessor name=\"recomputeViewsBackground\"\n      class=\"org.nuxeo.ecm.platform.picture.recompute.RecomputeViewsAction\"\n      enabled=\"${nuxeo.bulk.action.recomputeViewsBackground.enabled:=false}\"\n      defaultConcurrency=\"${nuxeo.bulk.action.recomputeViewsBackground.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.recomputeViewsBackground.defaultPartitions:=12}\">\n      <policy name=\"default\" maxRetries=\"${nuxeo.bulk.action.recomputeViewsBackground.maxRetries:=1}\" delay=\"5s\"\n        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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 315,
          "services": [],
          "startOrder": 312,
          "version": "2025.7.12",
          "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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      <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    </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": 316,
          "services": [],
          "startOrder": 309,
          "version": "2025.7.12",
          "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      <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    </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": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 317,
          "services": [],
          "startOrder": 301,
          "version": "2025.7.12",
          "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": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 318,
          "services": [],
          "startOrder": 310,
          "version": "2025.7.12",
          "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": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 319,
          "services": [],
          "startOrder": 315,
          "version": "2025.7.12",
          "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": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 320,
          "services": [],
          "startOrder": 318,
          "version": "2025.7.12",
          "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": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 321,
          "services": [],
          "startOrder": 305,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": "2025.7.12",
              "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": 322,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 627,
          "version": "2025.7.12",
          "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 323,
          "services": [],
          "startOrder": 308,
          "version": "2025.7.12",
          "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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "name": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 324,
          "services": [],
          "startOrder": 314,
          "version": "2025.7.12",
          "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": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 325,
          "services": [],
          "startOrder": 317,
          "version": "2025.7.12",
          "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": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 326,
          "services": [],
          "startOrder": 311,
          "version": "2025.7.12",
          "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": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 327,
          "services": [],
          "startOrder": 267,
          "version": "2025.7.12",
          "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": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 328,
          "services": [],
          "startOrder": 302,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 329,
          "services": [],
          "startOrder": 304,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 330,
          "services": [],
          "startOrder": 303,
          "version": "2025.7.12",
          "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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 331,
          "services": [],
          "startOrder": 306,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 408,
          "services": [],
          "startOrder": 313,
          "version": "2025.7.12",
          "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": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 436,
          "services": [],
          "startOrder": 307,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 517,
          "services": [],
          "startOrder": 316,
          "version": "2025.7.12",
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 595,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 626,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\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.imageio,javax.imageio.metadata,jav\r\n ax.imageio.stream,org.apache.commons.logging,org.nuxeo.common.utils,org\r\n .nuxeo.common.xmap.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.ec\r\n m.core.api;api=split,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api\r\n .impl.blob,org.nuxeo.ecm.directory;api=split,org.nuxeo.ecm.platform.com\r\n mandline.executor.api,org.nuxeo.ecm.platform.filemanager.service.extens\r\n ion,org.nuxeo.ecm.platform.filemanager.utils,org.nuxeo.ecm.platform.pic\r\n ture.api,org.nuxeo.ecm.platform.picture.api.adapters,org.nuxeo.ecm.plat\r\n form.types,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.mo\r\n del,org.nuxeo.runtime.services.streaming,org.nuxeo.ecm.automation,org.n\r\n uxeo.ecm.automation.core,org.nuxeo.ecm.automation.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": 595,
      "minResolutionOrder": 313,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-apidoc-core",
      "artifactVersion": "2025.0.2",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.apidoc.core",
      "components": [],
      "fileName": "nuxeo-apidoc-core-2025.0.2.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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": "2025.0.2"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-connect-update",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 68,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 552,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: nuxeo connect update\r\nBundle-SymbolicName: org.nuxeo.connect.update;singleton:=true\r\nBundle-Version: 0.0.1\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/connect-update-service.xml\r\n\r\n",
      "maxResolutionOrder": 68,
      "minResolutionOrder": 68,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-storage",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": "2025.7.12"
            }
          ],
          "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": 153,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 589,
          "version": "2025.7.12",
          "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": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"10\" bucketSize=\"50\" defaultScroller=\"repository\" httpEnabled=\"false\" inputStream=\"bulk/extractBinaryFulltext\" name=\"extractBinaryFulltext\"/>\n    <action batchSize=\"10\" bucketSize=\"50\" enabled=\"false\" httpEnabled=\"false\" inputStream=\"bulk/fixBinaryFulltextStorage\" name=\"fixBinaryFulltextStorage\"/>\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": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    <streamProcessor class=\"org.nuxeo.ecm.core.storage.action.FixBinaryFulltextStorageAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" enabled=\"false\" name=\"fixBinaryFulltextStorage\" validationClass=\"org.nuxeo.ecm.core.storage.action.FixBinaryFulltextStorageValidation\">\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": 614,
          "services": [],
          "startOrder": 150,
          "version": "2025.7.12",
          "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\" defaultScroller=\"repository\" inputStream=\"bulk/extractBinaryFulltext\"\n      bucketSize=\"50\" batchSize=\"10\" httpEnabled=\"false\" />\n    <action name=\"fixBinaryFulltextStorage\" inputStream=\"bulk/fixBinaryFulltextStorage\" bucketSize=\"50\" batchSize=\"10\"\n      httpEnabled=\"false\" enabled=\"${nuxeo.bulk.action.fixBinaryFulltextStorage.enabled:=false}\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"extractBinaryFulltext\" 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    <streamProcessor name=\"fixBinaryFulltextStorage\"\n      class=\"org.nuxeo.ecm.core.storage.action.FixBinaryFulltextStorageAction\"\n      enabled=\"${nuxeo.bulk.action.fixBinaryFulltextStorage.enabled:=false}\"\n      defaultConcurrency=\"${nuxeo.bulk.action.fixBinaryFulltextStorage.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.fixBinaryFulltextStorage.defaultPartitions:=4}\"\n      validationClass=\"org.nuxeo.ecm.core.storage.action.FixBinaryFulltextStorageValidation\">\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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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": 614,
      "minResolutionOrder": 153,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-drive-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.drive.core",
          "org.nuxeo.drive.elasticsearch",
          "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": "2025.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": "2025.7.12"
            }
          ],
          "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": 167,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 536,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 168,
          "services": [],
          "startOrder": 61,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 169,
          "services": [],
          "startOrder": 63,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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>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>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    <!-- deprecated since 2023.28, virtual events are written in audit using the StreamAuditEventListener -->\n    <listener async=\"true\" class=\"org.nuxeo.drive.listener.NuxeoDriveVirtualEventLogger\" enabled=\"false\" 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.audit.service.AuditComponent--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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.audit.service.AuditComponent\">\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": 170,
          "services": [],
          "startOrder": 64,
          "version": "2025.7.12",
          "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>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>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    <!-- deprecated since 2023.28, virtual events are written in audit using the StreamAuditEventListener -->\n    <listener name=\"nuxeoDriveVirtualEventLoggerListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.drive.listener.NuxeoDriveVirtualEventLogger\"\n      enabled=\"${org.nuxeo.drive.virtual.events.listener.enabled:=false}\" />\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.audit.service.AuditComponent\" 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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 171,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 556,
          "version": "2025.7.12",
          "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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 172,
          "services": [],
          "startOrder": 55,
          "version": "2025.7.12",
          "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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 173,
          "services": [],
          "startOrder": 60,
          "version": "2025.7.12",
          "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": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 174,
          "services": [],
          "startOrder": 66,
          "version": "2025.7.12",
          "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": 175,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 67,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 176,
          "services": [],
          "startOrder": 57,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 177,
          "services": [],
          "startOrder": 56,
          "version": "2025.7.12",
          "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": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 178,
          "services": [],
          "startOrder": 62,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 179,
          "services": [],
          "startOrder": 68,
          "version": "2025.7.12",
          "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": 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": "2025.7.12",
              "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": 180,
          "services": [],
          "startOrder": 58,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Version: 5.7\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": 180,
      "minResolutionOrder": 167,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core/org.nuxeo.ecm.core.CoreService",
          "name": "org.nuxeo.ecm.core.CoreService",
          "requirements": [],
          "resolutionOrder": 69,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 561,
          "version": "2025.7.12",
          "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": "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 70,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 578,
          "version": "2025.7.12",
          "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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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=\"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          </transitions>\n        </state>\n        <state description=\"Content has been validated\" name=\"approved\">\n          <transitions>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state description=\"Content is obsolete\" name=\"obsolete\">\n          <transitions>\n            <transition>backToProject</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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 71,
          "services": [],
          "startOrder": 94,
          "version": "2025.7.12",
          "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=\"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          </transitions>\n        </state>\n        <state name=\"approved\" description=\"Content has been validated\">\n          <transitions>\n            <transition>backToProject</transition>\n          </transitions>\n        </state>\n        <state name=\"obsolete\" description=\"Content is obsolete\">\n          <transitions>\n            <transition>backToProject</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    \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></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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    </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>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": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 72,
          "services": [],
          "startOrder": 117,
          "version": "2025.7.12",
          "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    </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>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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 73,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "startOrder": 587,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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      <include>RemoveChildren</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": "2025.7.12",
              "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": 74,
          "services": [],
          "startOrder": 148,
          "version": "2025.7.12",
          "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      <include>RemoveChildren</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": "2025.7.12",
              "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": 76,
          "services": [],
          "startOrder": 149,
          "version": "2025.7.12",
          "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": "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": [],
          "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": 77,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "startOrder": 595,
          "version": "2025.7.12",
          "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.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</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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 78,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 570,
          "version": "2025.7.12",
          "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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 79,
          "services": [],
          "startOrder": 164,
          "version": "2025.7.12",
          "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": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 80,
          "services": [],
          "startOrder": 165,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 81,
          "services": [],
          "startOrder": 93,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 82,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 574,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 83,
          "services": [],
          "startOrder": 116,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 84,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 572,
          "version": "2025.7.12",
          "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": 60,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 85,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "startOrder": 532,
          "version": "2025.7.12",
          "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": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 86,
          "services": [],
          "startOrder": 163,
          "version": "2025.7.12",
          "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": 87,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 562,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": "2025.7.12",
              "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": 88,
          "services": [],
          "startOrder": 137,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <!-- NOT httpEnabled -->\n    <action batchSize=\"25\" bucketSize=\"100\" defaultScroller=\"repository\" 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": "2025.7.12",
              "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": 89,
          "services": [],
          "startOrder": 136,
          "version": "2025.7.12",
          "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\" 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\" defaultScroller=\"repository\" inputStream=\"retention/retentionExpired\"\n      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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 90,
          "services": [],
          "startOrder": 107,
          "version": "2025.7.12",
          "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": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 91,
          "services": [],
          "startOrder": 134,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" defaultScroller=\"repository\" 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": "2025.7.12",
              "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": 92,
          "services": [],
          "startOrder": 126,
          "version": "2025.7.12",
          "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\" defaultScroller=\"repository\" inputStream=\"bulk/migration\" bucketSize=\"100\"\n      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": "2025.7.12",
              "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": 109,
          "services": [],
          "startOrder": 139,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 112,
          "services": [],
          "startOrder": 161,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"50\" bucketSize=\"100\" defaultScroller=\"repository\" inputStream=\"bulk/deletion\" name=\"deletion\"/>\n    <action batchSize=\"50\" bucketSize=\"500\" defaultScroller=\"repository\" inputStream=\"bulk/garbageCollectOrphanBlobs\" name=\"garbageCollectOrphanBlobs\" 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": "2025.7.12",
              "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": 113,
          "services": [],
          "startOrder": 115,
          "version": "2025.7.12",
          "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\" defaultScroller=\"repository\" inputStream=\"bulk/deletion\" bucketSize=\"100\" batchSize=\"50\" />\n    <action name=\"garbageCollectOrphanBlobs\" defaultScroller=\"repository\"\n      validationClass=\"org.nuxeo.ecm.core.action.validation.GarbageCollectOrphanBlobsValidation\"\n      inputStream=\"bulk/garbageCollectOrphanBlobs\" bucketSize=\"500\" batchSize=\"50\" />\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\" 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": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" defaultScroller=\"repository\" 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": "2025.7.12",
              "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": 114,
          "services": [],
          "startOrder": 133,
          "version": "2025.7.12",
          "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\" defaultScroller=\"repository\"\n      inputStream=\"bulk/garbageCollectOrphanVersions\" bucketSize=\"100\" 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": "2025.7.12",
              "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": "2025.7.12",
              "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": 123,
          "services": [],
          "startOrder": 166,
          "version": "2025.7.12",
          "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": 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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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=\"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": "2025.7.12",
              "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": [
            "org.nuxeo.ecm.core.schema.common"
          ],
          "resolutionOrder": 142,
          "services": [],
          "startOrder": 92,
          "version": "2025.7.12",
          "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  <require>org.nuxeo.ecm.core.schema.common</require>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <documentation>The core schemas</documentation>\n    <!-- XXX AT: prefixes should be set, see NXP-1152 -->\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\" 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\" 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.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": 575,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 539,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 5.4.2.qualifier\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-service.xml, OSGI-INF/ver\r\n sioning-service.xml, OSGI-INF/versioning-document-adapter.xml, OSGI-INF\r\n /versioning-default-policies.xml, OSGI-INF/versioning-acl-contrib.xml, \r\n OSGI-INF/orphanVersionsCleanup-listener-contrib.xml, OSGI-INF/document-\r\n resolver-contrib.xml, OSGI-INF/character-filtering-service.xml, OSGI-IN\r\n F/character-filtering-service-contrib.xml, OSGI-INF/documentblobmanager\r\n -service.xml, OSGI-INF/uidgenerator-service.xml, OSGI-INF/uidgenerator-\r\n keyvalue-config.xml, OSGI-INF/CoreSessionService.xml, OSGI-INF/schedule\r\n r-contrib.xml, OSGI-INF/deletion-action-config.xml, OSGI-INF/retention-\r\n and-hold-contrib.xml, OSGI-INF/asyncdigest-listener-contrib.xml, OSGI-I\r\n NF/proxy-creation-configuration-contrib.xml, OSGI-INF/core-domain-event\r\n -producer-contrib.xml, OSGI-INF/scroll-contrib.xml, OSGI-INF/bulk-migra\r\n tion-action-contrib.xml\r\nImport-Package: javax.naming,javax.transaction.xa;version=\"1.1\",javax.xm\r\n l.parsers,org.apache.commons.lang,org.apache.commons.logging,org.apache\r\n .xml.serialize,org.nuxeo.common.collections,org.nuxeo.common.utils,org.\r\n nuxeo.common.xmap.annotation,org.nuxeo.ecm.core.event,org.nuxeo.ecm.cor\r\n e.event.impl,org.nuxeo.ecm.core.query,org.nuxeo.ecm.core.query.sql.mode\r\n l,org.nuxeo.ecm.core.schema,org.nuxeo.ecm.core.schema.types,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.event,org.nuxeo.runtime.services.s\r\n treaming,org.nuxeo.runtime.transaction,org.osgi.framework;version=\"1.4\"\r\n ,org.w3c.dom\r\nBundle-SymbolicName: org.nuxeo.ecm.core;singleton:=true\r\nEclipse-ExtensibleAPI: true\r\n\r\n",
      "maxResolutionOrder": 575,
      "minResolutionOrder": 69,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.core.event"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-binarymanager-common",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.binarymanager.common",
      "components": [],
      "fileName": "nuxeo-core-binarymanager-common-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-easyshare-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "nuxeo-easyshare-core"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm",
        "id": "grp:org.nuxeo.ecm",
        "name": "org.nuxeo.ecm",
        "parentIds": [],
        "readmes": [],
        "version": "2025.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.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": "2025.7.12",
              "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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": "2025.7.12",
              "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": 183,
          "services": [],
          "startOrder": 69,
          "version": "2025.7.12",
          "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
        },
        {
          "@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/org.nuxeo.easyshare.core.contrib/Contributions/org.nuxeo.easyshare.core.contrib--schema",
              "id": "org.nuxeo.easyshare.core.contrib--schema",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.easyshare.core.contrib/Contributions/org.nuxeo.easyshare.core.contrib--doctype",
              "id": "org.nuxeo.easyshare.core.contrib--doctype",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.easyshare.core.contrib/Contributions/org.nuxeo.easyshare.core.contrib--types",
              "id": "org.nuxeo.easyshare.core.contrib--types",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/org.nuxeo.easyshare.core.contrib/Contributions/org.nuxeo.easyshare.core.contrib--permissionsVisibility",
              "id": "org.nuxeo.easyshare.core.contrib--permissionsVisibility",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.easyshare.core.contrib",
          "name": "org.nuxeo.easyshare.core.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 184,
          "services": [],
          "startOrder": 70,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.easyshare.core.contrib\" version=\"1.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\"\n      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\"\n    point=\"types\">\n    <types>\n      <type name=\"EasyShareFolder\">default</type>\n    </types>\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/easyshare-core-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/nuxeo-easyshare-core/org.nuxeo.easyshare.notification.contrib/Contributions/org.nuxeo.easyshare.notification.contrib--notifications",
              "id": "org.nuxeo.easyshare.notification.contrib--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": "2025.7.12",
              "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/org.nuxeo.easyshare.notification.contrib/Contributions/org.nuxeo.easyshare.notification.contrib--templates",
              "id": "org.nuxeo.easyshare.notification.contrib--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": "2025.7.12",
              "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>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/org.nuxeo.easyshare.notification.contrib",
          "name": "org.nuxeo.easyshare.notification.contrib",
          "requirements": [],
          "resolutionOrder": 185,
          "services": [],
          "startOrder": 71,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.easyshare.notification.contrib\" version=\"1.0\">\n  <extension\n    target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n    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\n    target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n    point=\"templates\">\n    <template name=\"easyShareDownload\" src=\"templates/easyShareDownload.ftl\" />\n    <template name=\"easyShareExpired\" src=\"templates/easyShareExpired.ftl\" />\n    <template name=\"easyShareDownloadSubject\"\n      src=\"templates/easyShareDownloadSubject.ftl\" />\n    <template name=\"easyShareExpiredSubject\"\n      src=\"templates/easyShareExpiredSubject.ftl\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/easyshare-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.types.TypeService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/org.nuxeo.easyshare.type.contrib/Contributions/org.nuxeo.easyshare.type.contrib--types",
              "id": "org.nuxeo.easyshare.type.contrib--types",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core/org.nuxeo.easyshare.type.contrib",
          "name": "org.nuxeo.easyshare.type.contrib",
          "requirements": [],
          "resolutionOrder": 186,
          "services": [],
          "startOrder": 72,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.easyshare.type.contrib\" version=\"1.0\">\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</component>\n",
          "xmlFileName": "/OSGI-INF/easyshare-type-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-easyshare-core-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/nuxeo-easyshare-core",
      "id": "nuxeo-easyshare-core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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-Version: 1.0.0\r\nBundle-Name: nuxeo-easyshare-core\r\nNuxeo-Component: OSGI-INF/easyshare-contrib.xml,OSGI-INF/easyshare-core-\r\n contrib.xml,OSGI-INF/easyshare-notification-contrib.xml,OSGI-INF/easysh\r\n are-type-contrib.xml\r\nBundle-SymbolicName: nuxeo-easyshare-core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.7\r\nNuxeo-AllowOverride: true\r\n\r\n",
      "maxResolutionOrder": 186,
      "minResolutionOrder": 183,
      "packages": [
        "easyshare"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-video",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.video",
          "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": "2025.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": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 476,
          "services": [],
          "startOrder": 492,
          "version": "2025.7.12",
          "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": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 477,
          "services": [],
          "startOrder": 425,
          "version": "2025.7.12",
          "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": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"1\" bucketSize=\"2\" defaultScroller=\"repository\" 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": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 478,
          "services": [],
          "startOrder": 424,
          "version": "2025.7.12",
          "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\" defaultScroller=\"repository\" inputStream=\"bulk/recomputeVideoConversion\"\n      bucketSize=\"2\" batchSize=\"1\" 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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 479,
          "services": [],
          "startOrder": 426,
          "version": "2025.7.12",
          "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": 37,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 480,
          "services": [],
          "startOrder": 477,
          "version": "2025.7.12",
          "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": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 481,
          "services": [],
          "startOrder": 428,
          "version": "2025.7.12",
          "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": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 482,
          "services": [],
          "startOrder": 478,
          "version": "2025.7.12",
          "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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    </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": 483,
          "services": [],
          "startOrder": 429,
          "version": "2025.7.12",
          "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    </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": 40,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 484,
          "services": [],
          "startOrder": 493,
          "version": "2025.7.12",
          "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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 485,
          "services": [],
          "startOrder": 494,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 486,
          "services": [],
          "startOrder": 430,
          "version": "2025.7.12",
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 487,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 650,
          "version": "2025.7.12",
          "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "name": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 488,
          "services": [],
          "startOrder": 427,
          "version": "2025.7.12",
          "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": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 489,
          "services": [],
          "startOrder": 431,
          "version": "2025.7.12",
          "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": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 490,
          "services": [],
          "startOrder": 466,
          "version": "2025.7.12",
          "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": 491,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 651,
          "version": "2025.7.12",
          "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": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 492,
          "services": [],
          "startOrder": 432,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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": 492,
      "minResolutionOrder": 476,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-resources-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.web.resources.api",
          "org.nuxeo.web.resources.core",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.web.resources.api",
      "components": [],
      "fileName": "nuxeo-web-resources-api-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-opencmis-bindings",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": "2025.7.12",
              "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": "2025.7.12",
              "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": 214,
          "services": [],
          "startOrder": 127,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 215,
          "services": [],
          "startOrder": 132,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 216,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 581,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 217,
          "services": [],
          "startOrder": 128,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 5.4.2.qualifier\r\nImport-Package: com.sun.xml.ws.api.handler;resolution:=optional,org.apac\r\n he.chemistry.opencmis.commons.impl.server,org.apache.chemistry.opencmis\r\n .commons.server,org.apache.chemistry.opencmis.server.impl,org.apache.ch\r\n emistry.opencmis.server.impl.atompub,org.apache.chemistry.opencmis.serv\r\n er.shared,org.apache.chemistry.opencmis.server.support,org.apache.commo\r\n ns.logging,org.nuxeo.ecm.core.opencmis.impl.server,org.nuxeo.runtime.ap\r\n i,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": 217,
      "minResolutionOrder": 214,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-lang",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.lang",
      "components": [],
      "fileName": "nuxeo-platform-lang-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-comment",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.comment",
          "org.nuxeo.ecm.platform.comment.api",
          "org.nuxeo.ecm.platform.comment.restapi",
          "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": "2025.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": [],
          "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": 263,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "startOrder": 609,
          "version": "2025.7.12",
          "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</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": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 264,
          "services": [],
          "startOrder": 235,
          "version": "2025.7.12",
          "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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 265,
          "services": [],
          "startOrder": 233,
          "version": "2025.7.12",
          "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": 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": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 266,
          "services": [],
          "startOrder": 237,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 267,
          "services": [],
          "startOrder": 239,
          "version": "2025.7.12",
          "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": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 268,
          "services": [],
          "startOrder": 91,
          "version": "2025.7.12",
          "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": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 269,
          "services": [],
          "startOrder": 238,
          "version": "2025.7.12",
          "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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.migration.MigrationService",
                "name": "org.nuxeo.runtime.migration.MigrationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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=\"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=\"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": 270,
          "services": [],
          "startOrder": 236,
          "version": "2025.7.12",
          "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=\"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=\"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": 271,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 608,
          "version": "2025.7.12",
          "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": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 272,
          "services": [],
          "startOrder": 73,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 281,
          "services": [],
          "startOrder": 234,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\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-listener-contrib.xml, O\r\n SGI-INF/comment-notification-contrib.xml, OSGI-INF/comment-pageprovider\r\n -contrib.xml, OSGI-INF/comment-marshaller-contrib.xml, OSGI-INF/comment\r\n -migration.xml, OSGI-INF/annotation-service.xml, OSGI-INF/annotation-ma\r\n rshaller-contrib.xml\r\nImport-Package: javax.ejb,javax.security.auth.login,org.apache.commons.l\r\n ogging,org.nuxeo.common.utils,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.event,org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.core.api.reposit\r\n ory,org.nuxeo.ecm.core.api.security,org.nuxeo.ecm.core.api.security.imp\r\n l,org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.event.impl,org.nuxeo.ecm.\r\n core.schema,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.directory;api\r\n =split,org.nuxeo.ecm.platform.comment.api,org.nuxeo.ecm.platform.commen\r\n t.workflow.services,org.nuxeo.ecm.platform.usermanager,org.nuxeo.runtim\r\n e,org.nuxeo.runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.comment;singleton=true\r\n\r\n",
      "maxResolutionOrder": 281,
      "minResolutionOrder": 263,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-connect-standalone",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.connect.standalone",
      "components": [],
      "fileName": "nuxeo-connect-standalone-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: nuxeo connect standalone\r\nBundle-SymbolicName: org.nuxeo.connect.standalone;singleton:=true\r\nBundle-Version: 0.0.1\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-dam",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.dam"
        ],
        "hierarchyPath": "/grp:org.nuxeo.dam",
        "id": "grp:org.nuxeo.dam",
        "name": "org.nuxeo.dam",
        "parentIds": [],
        "readmes": [],
        "version": "2025.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": "2025.7.12",
              "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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 165,
          "services": [],
          "startOrder": 53,
          "version": "2025.7.12",
          "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": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <searchServicePageProvider 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    </searchServicePageProvider>\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": 393,
          "services": [],
          "startOrder": 54,
          "version": "2025.7.12",
          "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    <searchServicePageProvider name=\"assets_search\">\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    </searchServicePageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/dam-page-provider-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-dam-2025.7.12.jar",
      "groupId": "org.nuxeo.dam",
      "hierarchyPath": "/grp:org.nuxeo.dam/org.nuxeo.dam",
      "id": "org.nuxeo.dam",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\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": 393,
      "minResolutionOrder": 165,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-webengine-base",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.webengine.base",
          "org.nuxeo.ecm.webengine.core",
          "org.nuxeo.ecm.webengine.invite",
          "org.nuxeo.ecm.webengine.rest"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.webengine",
        "id": "grp:org.nuxeo.ecm.webengine",
        "name": "org.nuxeo.ecm.webengine",
        "parentIds": [],
        "readmes": [],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.webengine.base",
      "components": [],
      "fileName": "nuxeo-webengine-base-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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;name=base;h\r\n eadless=true\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nImport-Package: javax.ejb,org.apache.commons.logging,org.nuxeo.common.co\r\n llections,org.nuxeo.common.utils,org.nuxeo.ecm.core;api=split,org.nuxeo\r\n .ecm.core.api;api=split,org.nuxeo.ecm.core.api.facet,org.nuxeo.ecm.core\r\n .api.model,org.nuxeo.ecm.core.api.security,org.nuxeo.ecm.core.api.secur\r\n ity.impl,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.directory;api=sp\r\n lit,org.nuxeo.ecm.platform.audit.api,org.nuxeo.ecm.platform.comment.api\r\n ,org.nuxeo.ecm.platform.comment.workflow.services,org.nuxeo.ecm.platfor\r\n m.usermanager,org.nuxeo.ecm.platform.versioning.api,org.nuxeo.ecm.weben\r\n gine,org.nuxeo.ecm.webengine.app.impl,org.nuxeo.ecm.webengine.forms,org\r\n .nuxeo.ecm.webengine.forms.validation,org.nuxeo.ecm.webengine.model.exc\r\n eptions,org.nuxeo.ecm.webengine.model.impl,org.nuxeo.ecm.webengine.mode\r\n l.io,org.nuxeo.ecm.webengine.util,org.nuxeo.runtime.api,org.nuxeo.runti\r\n me.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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-relations-core",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 394,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "startOrder": 629,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/nxrelations.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.repository,org.nuxeo.ecm.directory;api=split,org.nuxe\r\n o.ecm.platform.relations.api,org.nuxeo.ecm.platform.relations.api.impl,\r\n org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.model,org.osg\r\n i.framework;version=\"1.4\"\r\nBundle-SymbolicName: org.nuxeo.ecm.relations;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 394,
      "minResolutionOrder": 394,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-routing-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.routing.api",
          "org.nuxeo.ecm.platform.routing.core",
          "org.nuxeo.ecm.platform.routing.default"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.routing.api",
      "components": [],
      "fileName": "nuxeo-routing-api-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo ECM Routing API\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.routing.api;singleton=true\r\nBundle-Version: 1.0.0\r\nBundle-Vendor: Nuxeo\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-template-rendering-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.template.manager",
          "org.nuxeo.template.manager.api",
          "org.nuxeo.template.manager.jxls",
          "org.nuxeo.template.manager.rest",
          "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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
            "encoding": "UTF-8",
            "length": 3342,
            "mimeType": "text/plain",
            "name": "ReadMe.md"
          }
        ],
        "version": "2025.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": 45,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 40,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 628,
          "services": [],
          "startOrder": 480,
          "version": "2025.7.12",
          "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": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    </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": 629,
          "services": [],
          "startOrder": 490,
          "version": "2025.7.12",
          "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    </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": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 630,
          "services": [],
          "startOrder": 482,
          "version": "2025.7.12",
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 631,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 676,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 632,
          "services": [],
          "startOrder": 519,
          "version": "2025.7.12",
          "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": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 633,
          "services": [],
          "startOrder": 479,
          "version": "2025.7.12",
          "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": 46,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 634,
          "services": [],
          "startOrder": 483,
          "version": "2025.7.12",
          "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": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 635,
          "services": [],
          "startOrder": 388,
          "version": "2025.7.12",
          "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "name": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 636,
          "services": [],
          "startOrder": 484,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 637,
          "services": [],
          "startOrder": 487,
          "version": "2025.7.12",
          "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": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "name": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 638,
          "services": [],
          "startOrder": 485,
          "version": "2025.7.12",
          "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": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 639,
          "services": [],
          "startOrder": 486,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 640,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 675,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 641,
          "services": [],
          "startOrder": 518,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM Document template Manager\r\nBundle-SymbolicName: org.nuxeo.template.manager;singleton:=true\r\nBundle-Version: 1.0.0\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": 641,
      "minResolutionOrder": 628,
      "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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
        "encoding": "UTF-8",
        "length": 3342,
        "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-task-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.task.api",
          "org.nuxeo.ecm.platform.task.automation",
          "org.nuxeo.ecm.platform.task.core"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.task.api",
      "components": [],
      "fileName": "nuxeo-platform-task-api-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-csv-core",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": "2025.7.12",
              "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": 161,
          "services": [],
          "startOrder": 172,
          "version": "2025.7.12",
          "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": 162,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 169,
          "version": "2025.7.12",
          "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": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 163,
          "services": [],
          "startOrder": 170,
          "version": "2025.7.12",
          "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": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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\n    <documentation>\n      Property to trim values of the CSV files.\n      Defaults to true.\n\n      @since 2025.0\n    </documentation>\n    <property name=\"nuxeo.csv.import.trim\">true</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": 164,
          "services": [],
          "startOrder": 171,
          "version": "2025.7.12",
          "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\n    <documentation>\n      Property to trim values of the CSV files.\n      Defaults to true.\n\n      @since 2025.0\n    </documentation>\n    <property name=\"nuxeo.csv.import.trim\">true</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/csv-properties-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-csv-core-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\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": 164,
      "minResolutionOrder": 161,
      "packages": [
        "nuxeo-csv"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-user-profile",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.user.center.profile",
          "org.nuxeo.ecm.user.invite"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.user.center.profile",
      "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.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.core.types/Contributions/org.nuxeo.ecm.user.center.profile.core.types--schema",
              "id": "org.nuxeo.ecm.user.center.profile.core.types--schema",
              "registrationOrder": 47,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"userprofile\" prefix=\"userprofile\" src=\"schemas/userprofile.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.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.core.types/Contributions/org.nuxeo.ecm.user.center.profile.core.types--doctype",
              "id": "org.nuxeo.ecm.user.center.profile.core.types--doctype",
              "registrationOrder": 43,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"UserProfile\">\n      <schema name=\"userprofile\"/>\n    </facet>\n\n    <doctype extends=\"Document\" name=\"UserProfile\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"UserProfile\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.core.types",
          "name": "org.nuxeo.ecm.user.center.profile.core.types",
          "requirements": [],
          "resolutionOrder": 657,
          "services": [],
          "startOrder": 457,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.profile.core.types\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"userprofile\" src=\"schemas/userprofile.xsd\"\n      prefix=\"userprofile\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n    <facet name=\"UserProfile\">\n      <schema name=\"userprofile\" />\n    </facet>\n\n    <doctype name=\"UserProfile\" extends=\"Document\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <facet name=\"UserProfile\" />\n      <facet name=\"HiddenInNavigation\" />\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.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.listeners.contrib/Contributions/org.nuxeo.ecm.user.center.profile.listeners.contrib--listener",
              "id": "org.nuxeo.ecm.user.center.profile.listeners.contrib--listener",
              "registrationOrder": 48,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.user.center.profile.listeners.ResizeAvatarPictureListener\" name=\"resizeArticlePictureListener\" postCommit=\"false\" priority=\"200\">\n      <event>beforeDocumentModification</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.listeners.contrib",
          "name": "org.nuxeo.ecm.user.center.profile.listeners.contrib",
          "requirements": [],
          "resolutionOrder": 658,
          "services": [],
          "startOrder": 458,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.profile.listeners.contrib\">\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"resizeArticlePictureListener\" async=\"false\"\n      postCommit=\"false\"\n      class=\"org.nuxeo.ecm.user.center.profile.listeners.ResizeAvatarPictureListener\"\n      priority=\"200\">\n      <event>beforeDocumentModification</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/listeners-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.user.center.profile.UserProfileServiceImpl",
          "declaredStartOrder": 101,
          "documentation": "\n    Component and Service to manage the user profile\n\n    @author Quentin Lamerand (qlamerand@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nComponent and Service to manage the user profile\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.user.center.profile.UserProfileService",
              "descriptors": [
                "org.nuxeo.ecm.user.center.profile.ImporterConfig"
              ],
              "documentation": "\n      The user profile importerConfig contains:\n\n      - dataFile: define the user profile CSV data filename to be imported on startup.\n      - dateFormat: the date format used for CSV file date properties.\n      - listSeparatorRegex: the list separator regular expression used for CSV data file\n        list properties.\n      - updateExisting: if 'true' existing user profiles will be updated by the\n        import.\n      - batchSize: the number of user profile document updates to be committed in\n        one transaction.\n    \n",
              "documentationHtml": "<p>\nThe user profile importerConfig contains:\n</p><p>\n- dataFile: define the user profile CSV data filename to be imported on startup.\n- dateFormat: the date format used for CSV file date properties.\n- listSeparatorRegex: the list separator regular expression used for CSV data file\nlist properties.\n- updateExisting: if &#39;true&#39; existing user profiles will be updated by the\nimport.\n- batchSize: the number of user profile document updates to be committed in\none transaction.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.UserProfileService/ExtensionPoints/org.nuxeo.ecm.user.center.profile.UserProfileService--config",
              "id": "org.nuxeo.ecm.user.center.profile.UserProfileService--config",
              "label": "config (org.nuxeo.ecm.user.center.profile.UserProfileService)",
              "name": "config",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.UserProfileService",
          "name": "org.nuxeo.ecm.user.center.profile.UserProfileService",
          "requirements": [
            "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService"
          ],
          "resolutionOrder": 659,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.user.center.profile.UserProfileService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.UserProfileService/Services/org.nuxeo.ecm.user.center.profile.UserProfileService",
              "id": "org.nuxeo.ecm.user.center.profile.UserProfileService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 540,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.profile.UserProfileService\">\n\n  <require>org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService</require>\n\n  <implementation class=\"org.nuxeo.ecm.user.center.profile.UserProfileServiceImpl\" />\n\n  <documentation>\n    Component and Service to manage the user profile\n\n    @author Quentin Lamerand (qlamerand@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.user.center.profile.UserProfileService\" />\n  </service>\n\n  <extension-point name=\"config\">\n    <documentation>\n      The user profile importerConfig contains:\n\n      - dataFile: define the user profile CSV data filename to be imported on startup.\n      - dateFormat: the date format used for CSV file date properties.\n      - listSeparatorRegex: the list separator regular expression used for CSV data file\n        list properties.\n      - updateExisting: if 'true' existing user profiles will be updated by the\n        import.\n      - batchSize: the number of user profile document updates to be committed in\n        one transaction.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.user.center.profile.ImporterConfig\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/userprofile-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.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.locale.contrib/Contributions/org.nuxeo.ecm.user.center.profile.locale.contrib--providers",
              "id": "org.nuxeo.ecm.user.center.profile.locale.contrib--providers",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.locale",
                "name": "org.nuxeo.ecm.platform.web.common.locale",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.web.common.locale\">\n    <provider class=\"org.nuxeo.ecm.user.center.profile.localeProvider.UserLocaleProvider\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.locale.contrib",
          "name": "org.nuxeo.ecm.user.center.profile.locale.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.web.common.locale.default.contrib"
          ],
          "resolutionOrder": 660,
          "services": [],
          "startOrder": 459,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.profile.locale.contrib\">\n  <require>org.nuxeo.ecm.platform.web.common.locale.default.contrib</require>\n  <extension target=\"org.nuxeo.ecm.platform.web.common.locale\" point=\"providers\">\n    <provider\n      class=\"org.nuxeo.ecm.user.center.profile.localeProvider.UserLocaleProvider\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-locale-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.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.enricher/Contributions/org.nuxeo.ecm.user.center.enricher--marshallers",
              "id": "org.nuxeo.ecm.user.center.enricher--marshallers",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- user profile enricher -->\n    <register class=\"org.nuxeo.ecm.user.center.profile.rest.UserProfileEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.enricher",
          "name": "org.nuxeo.ecm.user.center.enricher",
          "requirements": [],
          "resolutionOrder": 661,
          "services": [],
          "startOrder": 454,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.enricher\" version=\"1.0.0\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <!-- user profile enricher -->\n    <register class=\"org.nuxeo.ecm.user.center.profile.rest.UserProfileEnricher\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/enricher-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.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.commandline/Contributions/org.nuxeo.ecm.user.center.profile.commandline--command",
              "id": "org.nuxeo.ecm.user.center.profile.commandline--command",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"resizeAvatar\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{sourceFilePath}[0] jpg:- | convert - -resize #{targetWidth}x#{targetHeight}&gt; #{targetFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{sourceFilePath}[0] -resize #{targetWidth}x#{targetHeight}&gt; #{targetFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.commandline",
          "name": "org.nuxeo.ecm.user.center.profile.commandline",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 662,
          "services": [],
          "startOrder": 455,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.profile.commandline\">\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=\"resizeAvatar\" enabled=\"true\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{sourceFilePath}[0] jpg:- | convert - -resize #{targetWidth}x#{targetHeight}> #{targetFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{sourceFilePath}[0] -resize #{targetWidth}x#{targetHeight}> #{targetFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</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.convert.service.ConversionServiceImpl--converter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.converters/Contributions/org.nuxeo.ecm.user.center.profile.converters--converter",
              "id": "org.nuxeo.ecm.user.center.profile.converters--converter",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\" name=\"resizeAvatar\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <destinationMimeType>image/jpg</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">resizeAvatar</parameter>\n      </parameters>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.converters",
          "name": "org.nuxeo.ecm.user.center.profile.converters",
          "requirements": [],
          "resolutionOrder": 663,
          "services": [],
          "startOrder": 456,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.profile.converters\">\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n    point=\"converter\">\n\n    <converter name=\"resizeAvatar\" class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <destinationMimeType>image/jpg</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">resizeAvatar</parameter>\n      </parameters>\n    </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/converter-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 user profile properties.\n\n      Here are more details about some of them:\n      <ul>\n    <li>\n        <strong>nuxeo.userprofile.enricher.compatibility</strong>: if true, make the UserProfileEnricher output compatible\n          with the Nuxeo 8.10 'userprofile' enricher output. Only output 'avatar', 'birthdate' and 'phonenumber' fields.\n        </li>\n</ul>\n\n\n      @since 9.3\n    \n",
              "documentationHtml": "<p>\nThis contribution is the default contribution for user profile properties.\n</p><p>\nHere are more details about some of them:\n</p><ul><li>\n<strong>nuxeo.userprofile.enricher.compatibility</strong>: if true, make the UserProfileEnricher output compatible\nwith the Nuxeo 8.10 &#39;userprofile&#39; enricher output. Only output &#39;avatar&#39;, &#39;birthdate&#39; and &#39;phonenumber&#39; fields.\n</li></ul>\n<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.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.properties/Contributions/org.nuxeo.ecm.user.center.profile.properties--configuration",
              "id": "org.nuxeo.ecm.user.center.profile.properties--configuration",
              "registrationOrder": 48,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n\n    <documentation>\n      This contribution is the default contribution for user profile properties.\n\n      Here are more details about some of them:\n      <ul>\n        <li>\n          <strong>nuxeo.userprofile.enricher.compatibility</strong>: if true, make the UserProfileEnricher output compatible\n          with the Nuxeo 8.10 'userprofile' enricher output. Only output 'avatar', 'birthdate' and 'phonenumber' fields.\n        </li>\n      </ul>\n\n      @since 9.3\n    </documentation>\n\n    <property name=\"nuxeo.userprofile.enricher.compatibility\">false</property>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile/org.nuxeo.ecm.user.center.profile.properties",
          "name": "org.nuxeo.ecm.user.center.profile.properties",
          "requirements": [],
          "resolutionOrder": 664,
          "services": [],
          "startOrder": 460,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.center.profile.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 user profile properties.\n\n      Here are more details about some of them:\n      <ul>\n        <li>\n          <strong>nuxeo.userprofile.enricher.compatibility</strong>: if true, make the UserProfileEnricher output compatible\n          with the Nuxeo 8.10 'userprofile' enricher output. Only output 'avatar', 'birthdate' and 'phonenumber' fields.\n        </li>\n      </ul>\n\n      @since 9.3\n    </documentation>\n\n    <property name=\"nuxeo.userprofile.enricher.compatibility\">false</property>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/properties-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-user-profile-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.center.profile",
      "id": "org.nuxeo.ecm.user.center.profile",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo User Center Profile\r\nBundle-SymbolicName: org.nuxeo.ecm.user.center.profile;singleton:=true\r\nBundle-Version: 0.0.1\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/core-types-contrib.xml,OSGI-INF/listeners-cont\r\n rib.xml,OSGI-INF/userprofile-framework.xml,OSGI-INF/user-locale-contrib\r\n .xml,OSGI-INF/enricher-contrib.xml,OSGI-INF/commandline-contrib.xml,OSG\r\n I-INF/converter-contrib.xml,OSGI-INF/properties-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 664,
      "minResolutionOrder": 657,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-apidoc-repo",
      "artifactVersion": "2025.0.2",
      "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": "2025.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": "2025.0.2",
              "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": 36,
          "services": [],
          "startOrder": 31,
          "version": "2025.0.2",
          "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": "2025.0.2",
              "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": "2025.0.2",
              "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": 37,
          "services": [],
          "startOrder": 32,
          "version": "2025.0.2",
          "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": "2025.0.2"
            },
            {
              "@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": "2025.0.2"
            }
          ],
          "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": "2025.0.2",
              "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": "2025.0.2",
              "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": "2025.0.2",
              "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": "2025.0.2",
              "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": "2025.0.2",
              "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": 38,
          "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": "2025.0.2"
            },
            {
              "@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": "2025.0.2"
            },
            {
              "@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": "2025.0.2"
            }
          ],
          "startOrder": 547,
          "version": "2025.0.2",
          "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": "2025.0.2",
              "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": 39,
          "services": [],
          "startOrder": 30,
          "version": "2025.0.2",
          "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": "2025.0.2",
              "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": 40,
          "services": [],
          "startOrder": 33,
          "version": "2025.0.2",
          "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": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.0.2",
              "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": 143,
          "services": [],
          "startOrder": 34,
          "version": "2025.0.2",
          "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-2025.0.2.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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": 143,
      "minResolutionOrder": 36,
      "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": "2025.0.2"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-rest-api-server",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n    <documentViewCodec class=\"org.nuxeo.ecm.restapi.server.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": 530,
          "services": [],
          "startOrder": 344,
          "version": "2025.7.12",
          "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.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--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": "2025.7.12",
              "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": 531,
          "services": [],
          "startOrder": 446,
          "version": "2025.7.12",
          "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\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": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 532,
          "services": [],
          "startOrder": 449,
          "version": "2025.7.12",
          "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": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.restapi.server.enrichers.AuditJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.restapi.server.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": 533,
          "services": [],
          "startOrder": 447,
          "version": "2025.7.12",
          "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.enrichers.AuditJsonEnricher\"\n      enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.restapi.server.enrichers.HasContentJsonEnricher\"\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.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.management.search/Contributions/org.nuxeo.ecm.restapi.server.management.search--providers",
              "id": "org.nuxeo.ecm.restapi.server.management.search--providers",
              "registrationOrder": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n    <searchServicePageProvider name=\"search_check_nxql\">\n      <trackUsage>false</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <pattern escapeParameters=\"false\" quoteParameters=\"false\">?</pattern>\n      <pageSize>10</pageSize>\n      <sort ascending=\"false\" column=\"dc:modified\"/>\n    </searchServicePageProvider>\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.management.search",
          "name": "org.nuxeo.ecm.restapi.server.management.search",
          "requirements": [],
          "resolutionOrder": 534,
          "services": [],
          "startOrder": 448,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.restapi.server.management.search\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n    <searchServicePageProvider name=\"search_check_nxql\">\n      <trackUsage>false</trackUsage>\n      <searchDocumentType>DefaultSearch</searchDocumentType>\n      <pattern quoteParameters=\"false\" escapeParameters=\"false\">?</pattern>\n      <pageSize>10</pageSize>\n      <sort column=\"dc:modified\" ascending=\"false\" />\n    </searchServicePageProvider>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/management-search-pageprovider-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": 535,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 633,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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\nBundle-Version: 1.0.0\r\nNuxeo-WebModule: org.nuxeo.ecm.restapi.server.APIModule;name=api;extends\r\n =automation;package=org/nuxeo/ecm/restapi/server;headless=true\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/management-search-pageprovider-contrib.xml,OSGI-\r\n INF/rest-api-service-contrib.xml\r\nNuxeo-AllowOverride: true\r\n\r\n",
      "maxResolutionOrder": 535,
      "minResolutionOrder": 530,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-arender-rest-api",
      "artifactVersion": "2025.0.4",
      "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": "2025.7"
      },
      "bundleId": "com.nuxeo.ecm.annotation.arender.restapi",
      "components": [],
      "fileName": "nuxeo-arender-rest-api-2025.0.4.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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": "2025.0.4"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-coldstorage",
      "artifactVersion": "2025.0.14",
      "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-2025)](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/job/lts-2025/)\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_/_lts-2025_ 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": "fe0f62a3aeb45090b09ce673d05dc2d5",
            "encoding": "UTF-8",
            "length": 8578,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2025.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.audit.service.AuditComponent--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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.0.14",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.audit.service.AuditComponent\">\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": 61,
          "services": [],
          "startOrder": 45,
          "version": "2025.0.14",
          "xmlFileContent": "<component name=\"org.nuxeo.coldstorage.audit\" version=\"1.0\">\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" 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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.0.14",
              "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": 62,
          "services": [],
          "startOrder": 49,
          "version": "2025.0.14",
          "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": "2025.0.14",
              "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": "2025.0.14",
              "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": "2025.0.14",
              "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": "2025.0.14",
              "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": 63,
          "services": [],
          "startOrder": 47,
          "version": "2025.0.14",
          "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.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.jsonEnrichers/Contributions/org.nuxeo.coldstorage.jsonEnrichers--marshallers",
              "id": "org.nuxeo.coldstorage.jsonEnrichers--marshallers",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.0.14",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.coldstorage.io.IsSharedMainContentJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage/org.nuxeo.coldstorage.jsonEnrichers",
          "name": "org.nuxeo.coldstorage.jsonEnrichers",
          "requirements": [],
          "resolutionOrder": 64,
          "services": [],
          "startOrder": 48,
          "version": "2025.0.14",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.coldstorage.jsonEnrichers\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.coldstorage.io.IsSharedMainContentJsonEnricher\"\n      enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/coldstorage-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.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": "2025.0.14",
              "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": "2025.0.14",
              "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": 65,
          "services": [],
          "startOrder": 46,
          "version": "2025.0.14",
          "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": "2025.0.14",
              "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": 66,
          "services": [],
          "startOrder": 50,
          "version": "2025.0.14",
          "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.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": "2025.0.14",
              "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": "2025.0.14",
              "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": 75,
          "services": [],
          "startOrder": 51,
          "version": "2025.0.14",
          "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": 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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.0.14",
              "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": "2025.0.14",
              "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": 144,
          "services": [],
          "startOrder": 52,
          "version": "2025.0.14",
          "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": "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": "2025.0.14"
            }
          ],
          "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",
            "org.nuxeo.ecm.directories"
          ],
          "resolutionOrder": 402,
          "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": "2025.0.14"
            }
          ],
          "startOrder": 550,
          "version": "2025.0.14",
          "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    <require>org.nuxeo.ecm.directories</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-2025.0.14.jar",
      "groupId": "org.nuxeo.coldstorage",
      "hierarchyPath": "/grp:org.nuxeo.coldstorage/org.nuxeo.coldstorage",
      "id": "org.nuxeo.coldstorage",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 2025.0.14-t20250328-091325\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-enrichers-contrib\r\n .xml,OSGI-INF/coldstorage-security.xml,OSGI-INF/coldstorage-bulk-contri\r\n b.xml,OSGI-INF/coldstorage-service.xml,OSGI-INF/coldstorage-rendition-c\r\n ontrib.xml\r\n\r\n",
      "maxResolutionOrder": 402,
      "minResolutionOrder": 61,
      "packages": [
        "nuxeo-coldstorage"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=coldstorage%2Fnuxeo-coldstorage%2Flts-2025)](https://jenkins.platform.dev.nuxeo.com/job/coldstorage/job/nuxeo-coldstorage/job/lts-2025/)\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_/_lts-2025_ 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": "fe0f62a3aeb45090b09ce673d05dc2d5",
        "encoding": "UTF-8",
        "length": 8578,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2025.0.14"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-resources-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.web.resources.api",
          "org.nuxeo.web.resources.core",
          "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": "2025.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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 666,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 604,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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": 666,
      "minResolutionOrder": 666,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-io-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.io.api",
          "org.nuxeo.ecm.platform.io.core"
        ],
        "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": "2025.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": "2025.7.12"
            }
          ],
          "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": 332,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 617,
          "version": "2025.7.12",
          "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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 333,
          "services": [],
          "startOrder": 270,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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": 333,
      "minResolutionOrder": 332,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-management-jtajca",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 600,
          "services": [],
          "startOrder": 678,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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": 600,
      "minResolutionOrder": 600,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-webengine-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.webengine.base",
          "org.nuxeo.ecm.webengine.core",
          "org.nuxeo.ecm.webengine.invite",
          "org.nuxeo.ecm.webengine.rest"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.webengine",
        "id": "grp:org.nuxeo.ecm.webengine",
        "name": "org.nuxeo.ecm.webengine",
        "parentIds": [],
        "readmes": [],
        "version": "2025.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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": "2025.7.12",
              "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": 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": "2025.7.12",
              "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": 674,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 658,
          "version": "2025.7.12",
          "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=\"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": 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": "2025.7.12",
              "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": 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": "2025.7.12",
              "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": 9,
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 675,
          "services": [],
          "startOrder": 404,
          "version": "2025.7.12",
          "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": 676,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 468,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/webengine-framework.xml,OSGI-INF/authenticatio\r\n n-contrib.xml,OSGI-INF/json-service.xml\r\nImport-Package: freemarker.core,freemarker.ext.jsp,freemarker.ext.servle\r\n t,freemarker.template,groovy.lang,javax.naming,javax.script,javax.secur\r\n ity.auth,javax.security.auth.login,javax.xml.parsers,org.apache.commons\r\n .logging,org.codehaus.groovy.classgen,org.codehaus.groovy.control,org.c\r\n odehaus.groovy.runtime,org.nuxeo.common.collections,org.nuxeo.common.ut\r\n ils,org.nuxeo.common.xmap,org.nuxeo.common.xmap.annotation,org.nuxeo.ec\r\n m.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.ap\r\n i.impl.blob,org.nuxeo.ecm.core.api.local,org.nuxeo.ecm.core.api.model,o\r\n rg.nuxeo.ecm.core.api.model.impl,org.nuxeo.ecm.core.api.model.impl.prim\r\n itives,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core.api.securit\r\n y,org.nuxeo.ecm.core.api.security.impl,org.nuxeo.ecm.core.schema,org.nu\r\n xeo.ecm.core.schema.types,org.nuxeo.ecm.core.url,org.nuxeo.ecm.director\r\n y;api=split,org.nuxeo.ecm.platform.api.login,org.nuxeo.ecm.platform.ren\r\n dering.api,org.nuxeo.ecm.platform.rendering.fm,org.nuxeo.ecm.platform.r\r\n endering.fm.adapters,org.nuxeo.ecm.platform.rendering.wiki,org.nuxeo.ec\r\n m.platform.ui.web.auth,org.nuxeo.ecm.platform.ui.web.auth.interfaces,or\r\n g.nuxeo.ecm.platform.ui.web.auth.plugins,org.nuxeo.ecm.platform.version\r\n ing.api,org.nuxeo.ecm.platform.web.common.vh,org.nuxeo.ecm.webengine.lo\r\n gin,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.model,org\r\n .nuxeo.runtime.services.streaming,org.osgi.framework;version=\"1.4\",org.\r\n w3c.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": 676,
      "minResolutionOrder": 674,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-rendition-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.rendition.api",
          "org.nuxeo.ecm.platform.rendition.core",
          "org.nuxeo.ecm.platform.rendition.publisher"
        ],
        "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": "2025.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": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 400,
          "services": [],
          "startOrder": 342,
          "version": "2025.7.12",
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": "2025.7.12",
              "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": 401,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 632,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 403,
          "services": [],
          "startOrder": 335,
          "version": "2025.7.12",
          "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": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": "2025.7.12",
              "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": 404,
          "services": [],
          "startOrder": 333,
          "version": "2025.7.12",
          "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": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 405,
          "services": [],
          "startOrder": 337,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": "2025.7.12",
              "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": 406,
          "services": [],
          "startOrder": 334,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 409,
          "services": [],
          "startOrder": 338,
          "version": "2025.7.12",
          "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": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 410,
          "services": [],
          "startOrder": 336,
          "version": "2025.7.12",
          "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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scheduler.SchedulerService",
                "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 33,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 411,
          "services": [],
          "startOrder": 341,
          "version": "2025.7.12",
          "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": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": "2025.7.12",
              "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": 412,
          "services": [],
          "startOrder": 343,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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\nBundle-Version: 1.0.0\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": 412,
      "minResolutionOrder": 400,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-signature-config",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": "2025.7.12",
              "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 415,
          "services": [],
          "startOrder": 513,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Digital Signature Default Config\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.signature.config;singleton:=\r\n true\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/signature-default-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 415,
      "minResolutionOrder": 415,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-routing-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.routing.api",
          "org.nuxeo.ecm.platform.routing.core",
          "org.nuxeo.ecm.platform.routing.default"
        ],
        "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": "2025.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": 41,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 36,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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.core.CoreExtensions",
            "org.nuxeo.audit.core.types-contrib"
          ],
          "resolutionOrder": 546,
          "services": [],
          "startOrder": 346,
          "version": "2025.7.12",
          "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.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": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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      <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    </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": 547,
          "services": [],
          "startOrder": 364,
          "version": "2025.7.12",
          "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      <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    </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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 548,
          "services": [],
          "startOrder": 357,
          "version": "2025.7.12",
          "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": 549,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 634,
          "version": "2025.7.12",
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 550,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 635,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 551,
          "services": [],
          "startOrder": 353,
          "version": "2025.7.12",
          "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": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 552,
          "services": [],
          "startOrder": 348,
          "version": "2025.7.12",
          "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": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 553,
          "services": [],
          "startOrder": 356,
          "version": "2025.7.12",
          "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": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 554,
          "services": [],
          "startOrder": 360,
          "version": "2025.7.12",
          "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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 555,
          "services": [],
          "startOrder": 359,
          "version": "2025.7.12",
          "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": 42,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 556,
          "services": [],
          "startOrder": 352,
          "version": "2025.7.12",
          "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.audit.service.AuditComponent--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": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.audit.service.AuditComponent\">\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": 557,
          "services": [],
          "startOrder": 349,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.routing.audit\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" 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": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 558,
          "services": [],
          "startOrder": 361,
          "version": "2025.7.12",
          "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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 559,
          "services": [],
          "startOrder": 347,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 560,
          "services": [],
          "startOrder": 287,
          "version": "2025.7.12",
          "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": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 561,
          "services": [],
          "startOrder": 365,
          "version": "2025.7.12",
          "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": 562,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 355,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 44,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"5\" bucketSize=\"25\" defaultScroller=\"repository\" 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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 563,
          "services": [],
          "startOrder": 354,
          "version": "2025.7.12",
          "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\" defaultScroller=\"repository\" inputStream=\"bulk/documentRoutingEscalation\"\n      bucketSize=\"25\" batchSize=\"5\" exclusive=\"true\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"DocumentRoutingEscalationAction\"\n      class=\"org.nuxeo.ecm.platform.routing.core.bulk.DocumentRoutingEscalationAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.documentRoutingEscalation.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.documentRoutingEscalation.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-routing-escalation-scheduler-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "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": "2025.7.12",
              "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": 43,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" defaultScroller=\"repository\" 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": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 564,
          "services": [],
          "startOrder": 351,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.routing.cleanup.config\">\n\n  <extension target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\" 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\" 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\" defaultScroller=\"repository\" inputStream=\"bulk/garbageCollectWokflows\"\n      bucketSize=\"100\" 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": "2025.7.12",
              "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": "2025.7.12",
              "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": 565,
          "services": [],
          "startOrder": 363,
          "version": "2025.7.12",
          "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": "\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": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 566,
          "services": [],
          "startOrder": 358,
          "version": "2025.7.12",
          "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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 567,
          "services": [],
          "startOrder": 350,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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.RepositoryServiceComponent"
          ],
          "resolutionOrder": 576,
          "services": [],
          "startOrder": 362,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.routing.persister.contrib\"\n  version=\"1.0\">\n\n  <require>org.nuxeo.ecm.core.repository.RepositoryServiceComponent</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.routing.service\" point=\"persister\">\n    <persister 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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo ECM Routing Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.routing.core;singleton=true\r\nBundle-Version: 1.0.0\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/marshallers-contrib.xml,OSGI-IN\r\n F/document-routing-cache-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 576,
      "minResolutionOrder": 546,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login-cas2",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.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": "2025.7.12",
              "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": 334,
          "services": [],
          "startOrder": 272,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 503,
          "services": [],
          "startOrder": 273,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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": 503,
      "minResolutionOrder": 334,
      "packages": [
        "cas2-authentication"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.login",
        "org.nuxeo.ecm.platform.web.common"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-template-rendering-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.template.manager",
          "org.nuxeo.template.manager.api",
          "org.nuxeo.template.manager.jxls",
          "org.nuxeo.template.manager.rest",
          "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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
            "encoding": "UTF-8",
            "length": 3342,
            "mimeType": "text/plain",
            "name": "ReadMe.md"
          }
        ],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.template.manager.api",
      "components": [],
      "fileName": "nuxeo-template-rendering-api-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM Template Rendering API\r\nBundle-SymbolicName: org.nuxeo.template.manager.api;singleton:=true\r\nBundle-Version: 1.0.0\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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
        "encoding": "UTF-8",
        "length": 3342,
        "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-invite",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.user.center.profile",
          "org.nuxeo.ecm.user.invite"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.user.invite",
      "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.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.adapter.contrib/Contributions/org.nuxeo.ecm.user.invite.adapter.contrib--adapters",
              "id": "org.nuxeo.ecm.user.invite.adapter.contrib--adapters",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.user.invite.RegistrationRules\" factory=\"org.nuxeo.ecm.user.invite.RegistrationRulesFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.adapter.contrib",
          "name": "org.nuxeo.ecm.user.invite.adapter.contrib",
          "requirements": [],
          "resolutionOrder": 191,
          "services": [],
          "startOrder": 461,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.invite.adapter.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.user.invite.RegistrationRules\"\n             factory=\"org.nuxeo.ecm.user.invite.RegistrationRulesFactory\"/>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-registration-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.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.types.contrib/Contributions/org.nuxeo.ecm.user.invite.core.types.contrib--schema",
              "id": "org.nuxeo.ecm.user.invite.core.types.contrib--schema",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"registration\" prefix=\"registration\" src=\"schemas/registration.xsd\"/>\n    <schema name=\"userinfo\" prefix=\"userinfo\" src=\"schemas/userinfo.xsd\"/>\n    <schema name=\"registrationconfiguration\" prefix=\"registrationconfiguration\" src=\"schemas/registrationconfiguration.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.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.types.contrib/Contributions/org.nuxeo.ecm.user.invite.core.types.contrib--doctype",
              "id": "org.nuxeo.ecm.user.invite.core.types.contrib--doctype",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"UserInvitation\">\n      <schema name=\"userinfo\"/>\n      <schema name=\"registration\"/>\n    </facet>\n\n    <facet name=\"RegistrationConfiguration\">\n      <schema name=\"registrationconfiguration\"/>\n    </facet>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.types.contrib",
          "name": "org.nuxeo.ecm.user.invite.core.types.contrib",
          "requirements": [],
          "resolutionOrder": 192,
          "services": [],
          "startOrder": 463,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.invite.core.types.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n             point=\"schema\">\n    <schema name=\"registration\" src=\"schemas/registration.xsd\"\n            prefix=\"registration\"/>\n    <schema name=\"userinfo\" src=\"schemas/userinfo.xsd\"\n            prefix=\"userinfo\"/>\n    <schema name=\"registrationconfiguration\" src=\"schemas/registrationconfiguration.xsd\"\n            prefix=\"registrationconfiguration\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <facet name=\"UserInvitation\">\n      <schema name=\"userinfo\"/>\n      <schema name=\"registration\"/>\n    </facet>\n\n    <facet name=\"RegistrationConfiguration\">\n      <schema name=\"registrationconfiguration\"/>\n    </facet>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-registration-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.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib/Contributions/org.nuxeo.ecm.user.invite.core.service.contrib--doctype",
              "id": "org.nuxeo.ecm.user.invite.core.service.contrib--doctype",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <doctype extends=\"File\" name=\"UserInvitation\">\n      <facet name=\"UserInvitation\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype extends=\"Workspace\" name=\"UserInvitationContainer\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\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.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib/Contributions/org.nuxeo.ecm.user.invite.core.service.contrib--types",
              "id": "org.nuxeo.ecm.user.invite.core.service.contrib--types",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"UserInvitationContainer\">default&gt;</type>\n      <type name=\"UserInvitation\">registrationRequest</type>\n    </types>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.user.invite.UserInvitationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib/Contributions/org.nuxeo.ecm.user.invite.core.service.contrib--configuration",
              "id": "org.nuxeo.ecm.user.invite.core.service.contrib--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.user.invite.UserInvitationService",
                "name": "org.nuxeo.ecm.user.invite.UserInvitationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"configuration\" target=\"org.nuxeo.ecm.user.invite.UserInvitationService\">\n    <configuration>\n      <requestDocType>UserInvitation</requestDocType>\n      <container>\n        <docType>UserInvitationContainer</docType>\n        <parentPath>/management/</parentPath>\n        <name>invitationRequests</name>\n        <title>Invitation Requests Container</title>\n      </container>\n      <validationEmail>\n        <title>Hi ${userinfo.firstName} ${userinfo.lastName}! You are invited to access ${productName}</title>\n        <template>skin/views/userRegistration/ValidationEmailTemplate.ftl</template>\n      </validationEmail>\n      <reviveEmail>\n        <title>You are invited to access Nuxeo</title>\n        <template>skin/views/userRegistration/ReviveEmailTemplate.ftl</template>\n      </reviveEmail>\n      <enterPasswordUrl>site/userInvitation/enterpassword/</enterPasswordUrl>\n      <validationRelUrl>site/userInvitation/validate</validationRelUrl>\n    </configuration>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.audit.service.AuditComponent--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib/Contributions/org.nuxeo.ecm.user.invite.core.service.contrib--event",
              "id": "org.nuxeo.ecm.user.invite.core.service.contrib--event",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.audit.service.AuditComponent\">\n    <event name=\"registrationSubmitted\"/>\n    <event name=\"registrationAccepted\"/>\n    <event name=\"registrationValidated\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.core.service.contrib",
          "name": "org.nuxeo.ecm.user.invite.core.service.contrib",
          "requirements": [
            "org.nuxeo.ecm.user.invite.core.types.contrib"
          ],
          "resolutionOrder": 193,
          "services": [],
          "startOrder": 462,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.user.invite.core.service.contrib\">\n\n  <require>org.nuxeo.ecm.user.invite.core.types.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <doctype name=\"UserInvitation\" extends=\"File\">\n      <facet name=\"UserInvitation\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype name=\"UserInvitationContainer\" extends=\"Workspace\">\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"types\">\n    <types>\n      <type name=\"UserInvitationContainer\">default></type>\n      <type name=\"UserInvitation\">registrationRequest</type>\n    </types>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.user.invite.UserInvitationService\" point=\"configuration\">\n    <configuration>\n      <requestDocType>UserInvitation</requestDocType>\n      <container>\n        <docType>UserInvitationContainer</docType>\n        <parentPath>/management/</parentPath>\n        <name>invitationRequests</name>\n        <title>Invitation Requests Container</title>\n      </container>\n      <validationEmail>\n        <title>Hi ${userinfo.firstName} ${userinfo.lastName}! You are invited to access ${productName}</title>\n        <template>skin/views/userRegistration/ValidationEmailTemplate.ftl</template>\n      </validationEmail>\n      <reviveEmail>\n        <title>You are invited to access Nuxeo</title>\n        <template>skin/views/userRegistration/ReviveEmailTemplate.ftl</template>\n      </reviveEmail>\n      <enterPasswordUrl>site/userInvitation/enterpassword/</enterPasswordUrl>\n      <validationRelUrl>site/userInvitation/validate</validationRelUrl>\n    </configuration>\n  </extension>\n\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" point=\"event\">\n    <event name=\"registrationSubmitted\"/>\n    <event name=\"registrationAccepted\"/>\n    <event name=\"registrationValidated\"/>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/user-registration-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.user.invite.UserInvitationComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.user.invite.UserInvitationService",
              "descriptors": [
                "org.nuxeo.ecm.user.invite.UserRegistrationConfiguration"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.UserInvitationService/ExtensionPoints/org.nuxeo.ecm.user.invite.UserInvitationService--configuration",
              "id": "org.nuxeo.ecm.user.invite.UserInvitationService--configuration",
              "label": "configuration (org.nuxeo.ecm.user.invite.UserInvitationService)",
              "name": "configuration",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.UserInvitationService",
          "name": "org.nuxeo.ecm.user.invite.UserInvitationService",
          "requirements": [],
          "resolutionOrder": 194,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.user.invite.UserInvitationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.invite.UserInvitationService/Services/org.nuxeo.ecm.user.invite.UserInvitationService",
              "id": "org.nuxeo.ecm.user.invite.UserInvitationService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 657,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.invite.UserInvitationService\">\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.user.invite.UserInvitationService\"/>\n  </service>\n\n  <implementation\n      class=\"org.nuxeo.ecm.user.invite.UserInvitationComponent\"/>\n\n  <extension-point name=\"configuration\">\n    <object class=\"org.nuxeo.ecm.user.invite.UserRegistrationConfiguration\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-registration-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.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.registration.lifecycle.contrib/Contributions/org.nuxeo.ecm.user.registration.lifecycle.contrib--lifecycle",
              "id": "org.nuxeo.ecm.user.registration.lifecycle.contrib--lifecycle",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <lifecycle defaultInitial=\"created\" name=\"registrationRequest\">\n      <transitions>\n        <transition destinationState=\"approved\" name=\"approve\">\n          <description>Approve the registration request</description>\n        </transition>\n        <transition destinationState=\"rejected\" name=\"reject\">\n          <description>Reject the registration request</description>\n        </transition>\n        <transition destinationState=\"accepted\" name=\"accept\">\n          <description>Accept the registration request</description>\n        </transition>\n        <transition destinationState=\"processed\" name=\"process\">\n          <description>Process the registration request</description>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"Default state\" initial=\"true\" name=\"created\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>reject</transition>\n          </transitions>\n        </state>\n        <state description=\"Registration has been approved\" name=\"approved\">\n          <transitions>\n            <transition>accept</transition>\n          </transitions>\n        </state>\n        <state description=\"Registration has been rejected\" name=\"rejected\">\n          <transitions/>\n        </state>\n        <state description=\"Registration has been accepted\" name=\"accepted\">\n          <transitions>\n            <transition>process</transition>\n          </transitions>\n        </state>\n        <state description=\"Registration request has been processed\" name=\"processed\">\n          <transitions/>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite/org.nuxeo.ecm.user.registration.lifecycle.contrib",
          "name": "org.nuxeo.ecm.user.registration.lifecycle.contrib",
          "requirements": [],
          "resolutionOrder": 195,
          "services": [],
          "startOrder": 465,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.registration.lifecycle.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n             point=\"lifecycle\">\n\n    <lifecycle name=\"registrationRequest\" defaultInitial=\"created\">\n      <transitions>\n        <transition name=\"approve\" destinationState=\"approved\">\n          <description>Approve the registration request</description>\n        </transition>\n        <transition name=\"reject\" destinationState=\"rejected\">\n          <description>Reject the registration request</description>\n        </transition>\n        <transition name=\"accept\" destinationState=\"accepted\">\n          <description>Accept the registration request</description>\n        </transition>\n        <transition name=\"process\" destinationState=\"processed\">\n          <description>Process the registration request</description>\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"created\" description=\"Default state\" initial=\"true\">\n          <transitions>\n            <transition>approve</transition>\n            <transition>reject</transition>\n          </transitions>\n        </state>\n        <state name=\"approved\" description=\"Registration has been approved\">\n          <transitions>\n            <transition>accept</transition>\n          </transitions>\n        </state>\n        <state name=\"rejected\" description=\"Registration has been rejected\">\n          <transitions></transitions>\n        </state>\n        <state name=\"accepted\" description=\"Registration has been accepted\">\n          <transitions>\n            <transition>process</transition>\n          </transitions>\n        </state>\n        <state name=\"processed\" description=\"Registration request has been processed\">\n          <transitions></transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-registration-lifecycle-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-invite-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.user/org.nuxeo.ecm.user.invite",
      "id": "org.nuxeo.ecm.user.invite",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo User Invite\r\nBundle-SymbolicName: org.nuxeo.ecm.user.invite;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/user-registration-adapter-contrib.xml,OSGI-INF\r\n /user-registration-contrib.xml,OSGI-INF/user-registration-core-types-co\r\n ntrib.xml,OSGI-INF/user-registration-service-framework.xml,OSGI-INF/use\r\n r-registration-lifecycle-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 195,
      "minResolutionOrder": 191,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-opencmis-impl",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 218,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 582,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 219,
          "services": [],
          "startOrder": 130,
          "version": "2025.7.12",
          "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": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 220,
          "services": [],
          "startOrder": 129,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 221,
          "services": [],
          "startOrder": 131,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo ECM Core OpenCMIS Implementation\r\nBundle-SymbolicName: org.nuxeo.ecm.core.opencmis.impl;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 5.4.2.qualifier\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,org.antlr.runtime,org.antlr.runtime.tree,\r\n org.apache.chemistry.opencmis.client.api,org.apache.chemistry.opencmis.\r\n client.bindings.spi,org.apache.chemistry.opencmis.client.runtime,org.ap\r\n ache.chemistry.opencmis.client.runtime.objecttype,org.apache.chemistry.\r\n opencmis.client.runtime.util,org.apache.chemistry.opencmis.commons,org.\r\n apache.chemistry.opencmis.commons.data,org.apache.chemistry.opencmis.co\r\n mmons.definitions,org.apache.chemistry.opencmis.commons.enums,org.apach\r\n e.chemistry.opencmis.commons.exceptions,org.apache.chemistry.opencmis.c\r\n ommons.impl,org.apache.chemistry.opencmis.commons.impl.dataobjects,org.\r\n apache.chemistry.opencmis.commons.impl.jaxb,org.apache.chemistry.opencm\r\n is.commons.impl.server,org.apache.chemistry.opencmis.commons.server,org\r\n .apache.chemistry.opencmis.commons.spi,org.apache.chemistry.opencmis.se\r\n rver.support,org.apache.chemistry.opencmis.server.support.query,org.apa\r\n che.commons.logging,org.nuxeo.common.utils,org.nuxeo.ecm.core,org.nuxeo\r\n .ecm.core.api,org.nuxeo.ecm.core.api.blobholder,org.nuxeo.ecm.core.api.\r\n event,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api.impl.blob,org.\r\n nuxeo.ecm.core.api.model,org.nuxeo.ecm.core.api.pathsegment,org.nuxeo.e\r\n cm.core.api.repository,org.nuxeo.ecm.core.api.security,org.nuxeo.ecm.co\r\n re.query,org.nuxeo.ecm.core.query.sql,org.nuxeo.ecm.core.schema,org.nux\r\n eo.ecm.core.schema.types,org.nuxeo.ecm.core.schema.types.primitives,org\r\n .nuxeo.ecm.core.storage,org.nuxeo.ecm.core.storage.sql,org.nuxeo.ecm.co\r\n re.storage.sql.jdbc,org.nuxeo.ecm.core.storage.sql.jdbc.db,org.nuxeo.ec\r\n m.core.storage.sql.jdbc.dialect,org.nuxeo.ecm.platform.audit.api,org.nu\r\n xeo.runtime.api,org.nuxeo.runtime.model\r\n\r\n",
      "maxResolutionOrder": 221,
      "minResolutionOrder": 218,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@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": "2025.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-imaging-rest",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.picture.core",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.picture.rest",
      "components": [],
      "fileName": "nuxeo-platform-imaging-rest-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.picture/org.nuxeo.ecm.platform.picture.rest",
      "id": "org.nuxeo.ecm.platform.picture.rest",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Imaging REST\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.picture.rest;singleton:=true\r\nFragment-Host: org.nuxeo.ecm.platform.restapi.server\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-relations-api",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.relations.api",
      "components": [],
      "fileName": "nuxeo-platform-relations-api-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\r\nImport-Package: org.apache.commons.logging,org.nuxeo.ecm.core;api=split,\r\n org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.impl,org.nuxeo.\r\n ecm.directory;api=split,org.nuxeo.runtime.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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-drive-elasticsearch",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.drive.core",
          "org.nuxeo.drive.elasticsearch",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.drive.elasticsearch",
      "components": [],
      "fileName": "nuxeo-drive-elasticsearch-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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-automation-bindings-c\r\n ontrib.xml,OSGI-INF/nuxeodrive-elasticsearch-operations.xml\r\nBundle-SymbolicName: org.nuxeo.drive.elasticsearch;singleton:=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-connect-client-wrapper",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 67,
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "startOrder": 551,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: nuxeo connect client\r\nBundle-SymbolicName: org.nuxeo.connect.client.wrapper;singleton:=true\r\nBundle-Version: 0.0.1\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/connect-client-framework.xml\r\n\r\n",
      "maxResolutionOrder": 67,
      "minResolutionOrder": 67,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-binary-metadata",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": "2025.7.12",
              "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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 60,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 549,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": "2025.7.12",
              "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 262,
          "services": [],
          "startOrder": 44,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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-Version: 1.0.0\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": 262,
      "minResolutionOrder": 60,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-versioning-api",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.versioning.api",
      "components": [],
      "fileName": "nuxeo-platform-versioning-api-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\r\nImport-Package: org.apache.commons.logging,org.nuxeo.ecm.core;api=split,\r\n org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.adapter,org.nux\r\n eo.ecm.core.api.facet,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.c\r\n ore.utils,org.nuxeo.ecm.directory;api=split,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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-importer-rest",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.importer.core",
          "org.nuxeo.ecm.platform.importer.rest"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.importer.rest",
      "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.rest/org.nuxeo.ecm.platform.importer.service.rest.contrib/Contributions/org.nuxeo.ecm.platform.importer.service.rest.contrib--importerConfiguration",
              "id": "org.nuxeo.ecm.platform.importer.service.rest.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": "2025.7.12",
              "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.rest/org.nuxeo.ecm.platform.importer.service.rest.contrib",
          "name": "org.nuxeo.ecm.platform.importer.service.rest.contrib",
          "requirements": [],
          "resolutionOrder": 189,
          "services": [],
          "startOrder": 269,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.importer.service.rest.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-rest-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.importer/org.nuxeo.ecm.platform.importer.rest",
      "id": "org.nuxeo.ecm.platform.importer.rest",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM REST Importer\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.importer.rest;singleton:=tru\r\n e\r\nBundle-Version: 1.0.0\r\nRequire-Bundle: org.nuxeo.ecm.webengine.core\r\nNuxeo-WebModule: org.nuxeo.ecm.platform.importer.executor.rest.ImporterA\r\n pp\r\nNuxeo-Component: OSGI-INF/importer-service-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 189,
      "minResolutionOrder": 189,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-comment-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.comment",
          "org.nuxeo.ecm.platform.comment.api",
          "org.nuxeo.ecm.platform.comment.restapi",
          "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": "2025.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": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 273,
          "services": [],
          "startOrder": 232,
          "version": "2025.7.12",
          "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": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 274,
          "services": [],
          "startOrder": 90,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/CommentableAdapter.xml,OSGI-INF/comment-adapte\r\n r-contrib.xml\r\nImport-Package: org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=\r\n split,org.nuxeo.ecm.core.api.adapter,org.nuxeo.ecm.directory;api=split,\r\n org.nuxeo.runtime.api\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.comment.api;singleton=true\r\n\r\n",
      "maxResolutionOrder": 274,
      "minResolutionOrder": 273,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "chemistry-opencmis-client-bindings",
      "artifactVersion": "2.0.0",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-bindings",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-impl",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-impl"
        ],
        "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis",
        "id": "grp:org.nuxeo.chemistry.opencmis",
        "name": "org.nuxeo.chemistry.opencmis",
        "parentIds": [],
        "readmes": [],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-bindings",
      "components": [],
      "fileName": "chemistry-opencmis-client-bindings-2.0.0.jar",
      "groupId": "org.nuxeo.chemistry.opencmis",
      "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis/org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-bindings",
      "id": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-bindings",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Apache Maven Bundle Plugin\r\nBuilt-By: Kevin.Leturc\r\nBuild-Jdk: 11.0.23\r\nSpecification-Title: OpenCMIS Client Bindings Implementation\r\nSpecification-Version: 2.0.0\r\nSpecification-Vendor: Nuxeo\r\nImplementation-URL: http://www.nuxeo.com/en/products/chemistry-opencmis-\r\n client/chemistry-opencmis-client-bindings\r\nImplementation-Title: OpenCMIS Client Bindings Implementation\r\nImplementation-Vendor: Nuxeo\r\nImplementation-Vendor-Id: org.nuxeo.chemistry.opencmis\r\nImplementation-Version: 2.0.0\r\nX-Apache-SVN-Revision: ${buildNumber}\r\nX-Compile-Source-JDK: 11\r\nX-Compile-Target-JDK: 11\r\nBnd-LastModified: 1717165754584\r\nBundle-Description: Apache Chemistry OpenCMIS is an open source implemen\r\n tation of the OASIS CMIS specification.\r\nBundle-DocURL: http://www.nuxeo.com/en/products/chemistry-opencmis-clien\r\n t/chemistry-opencmis-client-bindings\r\nBundle-License: https://www.apache.org/licenses/LICENSE-2.0.txt\r\nBundle-ManifestVersion: 2\r\nBundle-Name: OpenCMIS Client Bindings Implementation\r\nBundle-SymbolicName: org.nuxeo.chemistry.opencmis.chemistry-opencmis-cli\r\n ent-bindings\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 2.0.0\r\nExport-Package: org.apache.chemistry.opencmis.client.bindings;version=\"2\r\n .0.0\";uses:=\"org.apache.chemistry.opencmis.client.bindings.cache,org.ap\r\n ache.chemistry.opencmis.commons.spi\",org.apache.chemistry.opencmis.clie\r\n nt.bindings.spi;version=\"2.0.0\";uses:=\"jakarta.xml.ws.handler,javax.net\r\n .ssl,org.apache.chemistry.opencmis.commons.exceptions,org.apache.chemis\r\n try.opencmis.commons.spi,org.w3c.dom\",org.apache.chemistry.opencmis.cli\r\n ent.bindings.spi.atompub;version=\"2.0.0\";uses:=\"javax.xml.stream,org.ap\r\n ache.chemistry.opencmis.client.bindings.spi,org.apache.chemistry.opencm\r\n is.client.bindings.spi.atompub.objects,org.apache.chemistry.opencmis.cl\r\n ient.bindings.spi.http,org.apache.chemistry.opencmis.commons.data,org.a\r\n pache.chemistry.opencmis.commons.definitions,org.apache.chemistry.openc\r\n mis.commons.enums,org.apache.chemistry.opencmis.commons.exceptions,org.\r\n apache.chemistry.opencmis.commons.impl,org.apache.chemistry.opencmis.co\r\n mmons.impl.dataobjects,org.apache.chemistry.opencmis.commons.spi\",org.a\r\n pache.chemistry.opencmis.client.bindings.spi.atompub.objects;version=\"2\r\n .0.0\";uses:=\"javax.xml.namespace,org.apache.chemistry.opencmis.commons.\r\n data\",org.apache.chemistry.opencmis.client.bindings.spi.browser;version\r\n =\"2.0.0\";uses:=\"org.apache.chemistry.opencmis.client.bindings.spi,org.a\r\n pache.chemistry.opencmis.client.bindings.spi.http,org.apache.chemistry.\r\n opencmis.commons.data,org.apache.chemistry.opencmis.commons.definitions\r\n ,org.apache.chemistry.opencmis.commons.enums,org.apache.chemistry.openc\r\n mis.commons.exceptions,org.apache.chemistry.opencmis.commons.impl,org.a\r\n pache.chemistry.opencmis.commons.impl.json.parser,org.apache.chemistry.\r\n opencmis.commons.spi\",org.apache.chemistry.opencmis.client.bindings.spi\r\n .cookies;version=\"2.0.0\",org.apache.chemistry.opencmis.client.bindings.\r\n spi.http;version=\"2.0.0\";uses:=\"javax.net.ssl,okhttp3,org.apache.chemis\r\n try.opencmis.client.bindings.spi,org.apache.chemistry.opencmis.commons.\r\n impl,org.apache.http.impl.client,org.apache.http.params,org.slf4j\",org.\r\n apache.chemistry.opencmis.client.bindings.spi.local;version=\"2.0.0\";use\r\n s:=\"org.apache.chemistry.opencmis.client.bindings.spi,org.apache.chemis\r\n try.opencmis.commons.data,org.apache.chemistry.opencmis.commons.definit\r\n ions,org.apache.chemistry.opencmis.commons.enums,org.apache.chemistry.o\r\n pencmis.commons.server,org.apache.chemistry.opencmis.commons.spi\",org.a\r\n pache.chemistry.opencmis.client.bindings.spi.webservices;version=\"2.0.0\r\n \";uses:=\"jakarta.xml.ws,javax.xml.namespace,org.apache.chemistry.opencm\r\n is.client.bindings.spi,org.apache.chemistry.opencmis.commons.data,org.a\r\n pache.chemistry.opencmis.commons.definitions,org.apache.chemistry.openc\r\n mis.commons.enums,org.apache.chemistry.opencmis.commons.exceptions,org.\r\n apache.chemistry.opencmis.commons.impl.jaxb,org.apache.chemistry.opencm\r\n is.commons.spi\",org.apache.chemistry.opencmis.client.bindings.cache;ver\r\n sion=\"2.0.0\";uses:=\"org.apache.chemistry.opencmis.client.bindings.spi,o\r\n rg.apache.chemistry.opencmis.commons.definitions\",org.apache.chemistry.\r\n opencmis.client.bindings.cache.impl;version=\"2.0.0\";uses:=\"org.apache.c\r\n hemistry.opencmis.client.bindings.cache\"\r\nImport-Package: jakarta.xml.ws;version=\"[3.0,4)\",jakarta.xml.ws.handler;\r\n version=\"[3.0,4)\",jakarta.xml.ws.http;version=\"[3.0,4)\",jakarta.xml.ws.\r\n soap;version=\"[3.0,4)\",jakarta.xml.ws.spi;version=\"[3.0,4)\",javax.net.s\r\n sl,javax.security.auth,javax.xml.namespace,javax.xml.parsers,javax.xml.\r\n stream,javax.xml.transform,javax.xml.transform.dom,javax.xml.transform.\r\n stream,okhttp3,okio;version=\"[3.6,4)\",org.apache.chemistry.opencmis.cli\r\n ent.bindings.cache;version=\"[2.0,3)\",org.apache.chemistry.opencmis.clie\r\n nt.bindings.cache.impl;version=\"[2.0,3)\",org.apache.chemistry.opencmis.\r\n client.bindings.spi.atompub.objects;version=\"[2.0,3)\",org.apache.chemis\r\n try.opencmis.client.bindings.spi.cookies;version=\"[2.0,3)\",org.apache.c\r\n hemistry.opencmis.commons.data;version=\"[2.0,3)\",org.apache.chemistry.o\r\n pencmis.commons.definitions;version=\"[2.0,3)\",org.apache.chemistry.open\r\n cmis.commons.enums;version=\"[2.0,3)\",org.apache.chemistry.opencmis.comm\r\n ons.exceptions;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.\r\n impl;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.datao\r\n bjects;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.jax\r\n b;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.json;ver\r\n sion=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.json.parser;v\r\n ersion=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.server;version=\"\r\n [2.0,3)\",org.apache.chemistry.opencmis.commons.spi;version=\"[2.0,3)\",or\r\n g.apache.cxf;version=\"[4.0,5)\",org.apache.cxf.configuration.jsse;versio\r\n n=\"[4.0,5)\",org.apache.cxf.endpoint;version=\"[4.0,5)\",org.apache.cxf.fr\r\n ontend;version=\"[4.0,5)\",org.apache.cxf.headers;version=\"[4.0,5)\",org.a\r\n pache.cxf.transport;version=\"[4.0,5)\",org.apache.cxf.transport.http;ver\r\n sion=\"[4.0,5)\",org.apache.cxf.transports.http.configuration;version=\"[4\r\n .0,5)\",org.apache.http,org.apache.http.client.methods,org.apache.http.c\r\n onn,org.apache.http.conn.routing,org.apache.http.conn.scheme,org.apache\r\n .http.conn.ssl,org.apache.http.entity,org.apache.http.impl.client,org.a\r\n pache.http.impl.conn,org.apache.http.params,org.slf4j;version=\"[1.7,2)\"\r\n ,org.w3c.dom,org.xml.sax\r\nRequire-Capability: osgi.ee;filter:=\"(osgi.ee=UNKNOWN)\"\r\nTool: Bnd-3.3.0.201609221906\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2.0.0"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-task-automation",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.task.api",
          "org.nuxeo.ecm.platform.task.automation",
          "org.nuxeo.ecm.platform.task.core"
        ],
        "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": "2025.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": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 36,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 439,
          "services": [],
          "startOrder": 81,
          "version": "2025.7.12",
          "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": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 440,
          "services": [],
          "startOrder": 82,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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": 440,
      "minResolutionOrder": 439,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.platform.task.api",
        "org.nuxeo.ecm.automation.core"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-convert-api",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.convert.api",
      "components": [],
      "fileName": "nuxeo-core-convert-api-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 5.4.2.qualifier\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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-video-rest",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.video",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.video.rest",
      "components": [],
      "fileName": "nuxeo-platform-video-rest-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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\nBundle-Version: 1.0.0\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-lang-ext",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 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": "2025.7.12",
              "xml": "<extension point=\"loginScreen\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <loginScreenConfig>\n      <supportedLocales append=\"true\">\n        <locale>ar</locale><!-- Arabic -->\n        <locale>ar_SA</locale><!-- Arabic - Saudi Arabia -->\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>he</locale><!-- Hebrew -->\n        <locale>he_IL</locale><!-- Hebrew - Israel -->\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": 509,
          "services": [],
          "startOrder": 410,
          "version": "2025.7.12",
          "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>ar</locale><!-- Arabic -->\n        <locale>ar_SA</locale><!-- Arabic - Saudi Arabia -->\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>he</locale><!-- Hebrew -->\n        <locale>he_IL</locale><!-- Hebrew - Israel -->\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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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": 509,
      "minResolutionOrder": 509,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "# Nuxeo external translations\n\nThis module contains community-created translations.\n\nThis README is for developers that are maintaining this\nmodule according to Crowdin translation files.\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.\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": "703992aa6eb33476f9fcdc0d143137a4",
        "encoding": "UTF-8",
        "length": 4721,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-binarymanager-s3",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.binarymanager.s3",
      "components": [
        {
          "@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": 107,
          "services": [],
          "startOrder": 157,
          "version": "2025.7.12",
          "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": 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": "2025.7.12",
              "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": 500,
          "services": [],
          "startOrder": 151,
          "version": "2025.7.12",
          "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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 615,
          "services": [],
          "startOrder": 156,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.binarymanager.s3;singlet\r\n on:=true\r\nNuxeo-Component: OSGI-INF/s3web-request-controller-contrib.xml,OSGI-INF/\r\n configuration-properties.xml,OSGI-INF/bulk-config.xml\r\n\r\n",
      "maxResolutionOrder": 615,
      "minResolutionOrder": 107,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-launcher-commons",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.launcher.commons",
      "components": [],
      "fileName": "nuxeo-launcher-commons-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.launcher.commons;\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-storage-dbs",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.migration.MigrationService",
                "name": "org.nuxeo.runtime.migration.MigrationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 154,
          "services": [],
          "startOrder": 153,
          "version": "2025.7.12",
          "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": 577,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 588,
          "version": "2025.7.12",
          "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": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <!-- Internal -->\n    <action batchSize=\"25\" bucketSize=\"100\" defaultScroller=\"repository\" 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": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 616,
          "services": [],
          "startOrder": 152,
          "version": "2025.7.12",
          "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\" defaultScroller=\"repository\" inputStream=\"bulk/updateReadAcls\" bucketSize=\"100\"\n      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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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": 616,
      "minResolutionOrder": 154,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-api",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.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": "2025.7.12"
            }
          ],
          "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": 93,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 563,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 94,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 568,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 95,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 564,
          "version": "2025.7.12",
          "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": "2025.7.12",
              "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": 96,
          "services": [],
          "startOrder": 95,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 97,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 571,
          "version": "2025.7.12",
          "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": "2025.7.12"
            },
            {
              "@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": "2025.7.12"
            }
          ],
          "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": 98,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 565,
          "version": "2025.7.12",
          "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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 99,
          "services": [],
          "startOrder": 96,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 100,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 566,
          "version": "2025.7.12",
          "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": 101,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 553,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 102,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 567,
          "version": "2025.7.12",
          "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": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 103,
          "services": [],
          "startOrder": 98,
          "version": "2025.7.12",
          "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": "2025.7.12"
            }
          ],
          "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": 104,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 569,
          "version": "2025.7.12",
          "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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 105,
          "services": [],
          "startOrder": 97,
          "version": "2025.7.12",
          "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": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 106,
          "services": [],
          "startOrder": 147,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 5.4.2.qualifier\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": 106,
      "minResolutionOrder": 93,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-api",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.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": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 296,
          "services": [],
          "startOrder": 256,
          "version": "2025.7.12",
          "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
        },
        {
          "@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.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.api/org.nuxeo.ecm.directory.scroll.config/Contributions/org.nuxeo.ecm.directory.scroll.config--scroll",
              "id": "org.nuxeo.ecm.directory.scroll.config--scroll",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.ecm.directory.scroll.DirectoryScroll\" name=\"directory\" type=\"generic\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.api/org.nuxeo.ecm.directory.scroll.config",
          "name": "org.nuxeo.ecm.directory.scroll.config",
          "requirements": [],
          "resolutionOrder": 297,
          "services": [],
          "startOrder": 181,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.directory.scroll.config\" version=\"1.0.0\">\n  <extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll type=\"generic\" name=\"directory\" class=\"org.nuxeo.ecm.directory.scroll.DirectoryScroll\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/scroll-config.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-directory-api-2025.7.12.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\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\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,OSGI-INF/scroll-conf\r\n ig.xml\r\n\r\n",
      "maxResolutionOrder": 297,
      "minResolutionOrder": 296,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-automation-features",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.automation.core",
          "org.nuxeo.ecm.automation.features",
          "org.nuxeo.ecm.automation.io",
          "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": "2025.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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.query.ResultSetPaginatedQuery\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.AuditLog\"/>\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    <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    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.search.SearchIndexOperation\"/>\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.search.SearchWaitForIndexingOperation\"/>\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": "2025.7.12",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <chain id=\"VersionAndAttachFile\">\n      <operation id=\"Context.PushBlobList\"/>\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 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 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 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": "2025.7.12",
              "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": 49,
          "services": [],
          "startOrder": 104,
          "version": "2025.7.12",
          "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\" point=\"operations\">\n\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.query.DocumentPaginatedQuery\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.query.ResultSetPaginatedQuery\" />\n    <operation\n      class=\"org.nuxeo.ecm.automation.core.operations.services.AuditLog\" />\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    <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    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.search.SearchIndexOperation\" />\n    <operation class=\"org.nuxeo.ecm.automation.core.operations.services.search.SearchWaitForIndexingOperation\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"chains\">\n    <chain id=\"VersionAndAttachFile\">\n      <operation id=\"Context.PushBlobList\" />\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 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 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 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": "2025.7.12",
              "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    <binding name=\"Search.Index\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Search.WaitForIndexing\">\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": 50,
          "services": [],
          "startOrder": 102,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.core.automation.features.bindings\">\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\" 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    <binding name=\"Search.Index\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"Search.WaitForIndexing\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/bindings-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.audit.PageProviderservice.automation.contrib"
          ],
          "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.audit.PageProviderService.automation.contrib/Contributions/org.nuxeo.audit.PageProviderService.automation.contrib--providers",
              "id": "org.nuxeo.audit.PageProviderService.automation.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": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.audit.provider.AuditPageProvider\" name=\"AUDIT_BROWSER\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate operator=\">\" parameter=\"id\">\n          <field name=\"logId\" schema=\"basicauditsearch\"/>\n        </predicate>\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=\"eventDate\"/>\n      <sort ascending=\"true\" column=\"id\"/>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.features/org.nuxeo.audit.PageProviderService.automation.contrib",
          "name": "org.nuxeo.audit.PageProviderService.automation.contrib",
          "requirements": [],
          "resolutionOrder": 51,
          "services": [],
          "startOrder": 35,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.PageProviderService.automation.contrib\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.ecm.platform.audit.PageProviderservice.automation.contrib</alias>\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n\n    <genericPageProvider name=\"AUDIT_BROWSER\" class=\"org.nuxeo.audit.provider.AuditPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <predicate parameter=\"id\" operator=\"&gt;\">\n          <field schema=\"basicauditsearch\" name=\"logId\" />\n        </predicate>\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=\"true\" />\n      <sort column=\"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": "2025.7.12",
              "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>"
            }
          ],
          "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": 52,
          "services": [],
          "startOrder": 99,
          "version": "2025.7.12",
          "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</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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 53,
          "services": [],
          "startOrder": 175,
          "version": "2025.7.12",
          "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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"5\" bucketSize=\"25\" httpEnabled=\"true\" inputStream=\"bulk/automation\" name=\"automation\" validationClass=\"org.nuxeo.ecm.automation.core.operations.services.bulk.validation.AutomationBulkValidation\"/>\n\n    <action batchSize=\"5\" bucketSize=\"25\" 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": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 613,
          "services": [],
          "startOrder": 103,
          "version": "2025.7.12",
          "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=\"25\" batchSize=\"5\" httpEnabled=\"true\"\n      validationClass=\"org.nuxeo.ecm.automation.core.operations.services.bulk.validation.AutomationBulkValidation\" />\n\n    <action name=\"automationUi\" inputStream=\"bulk/automationUi\" bucketSize=\"25\" batchSize=\"5\" 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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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": 613,
      "minResolutionOrder": 49,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.automation.core"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-retention",
      "artifactVersion": "2025.0.8",
      "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=retention/nuxeo-retention/lts-2025)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2025/)\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_/_lts-2025_ 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": "b033334a77a1d8b3a7022acd92316a74",
            "encoding": "UTF-8",
            "length": 6319,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2025.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": 40,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.0.8",
              "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": 35,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.0.8",
              "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": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.0.8",
              "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": 536,
          "services": [],
          "startOrder": 504,
          "version": "2025.0.8",
          "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": "2025.0.8",
              "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": 537,
          "services": [],
          "startOrder": 498,
          "version": "2025.0.8",
          "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": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.0.8",
              "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": 538,
          "services": [],
          "startOrder": 500,
          "version": "2025.0.8",
          "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": "2025.0.8",
              "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": 539,
          "services": [],
          "startOrder": 505,
          "version": "2025.0.8",
          "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": 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": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.0.8",
              "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": 540,
          "services": [],
          "startOrder": 496,
          "version": "2025.0.8",
          "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.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": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.0.8",
              "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    <searchServicePageProvider 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    </searchServicePageProvider>\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": 541,
          "services": [],
          "startOrder": 501,
          "version": "2025.0.8",
          "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 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 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    <searchServicePageProvider 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 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    </searchServicePageProvider>\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": "2025.0.8",
              "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": 542,
          "services": [],
          "startOrder": 502,
          "version": "2025.0.8",
          "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": "2025.0.8",
              "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": "2025.0.8",
              "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": 543,
          "services": [],
          "startOrder": 503,
          "version": "2025.0.8",
          "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": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.0.8",
              "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  </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": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.0.8",
              "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  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.retention/org.nuxeo.retention.core/org.nuxeo.retention.actions",
          "name": "org.nuxeo.retention.actions",
          "requirements": [],
          "resolutionOrder": 544,
          "services": [],
          "startOrder": 495,
          "version": "2025.0.8",
          "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  </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  </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.audit.service.AuditComponent--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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.0.8",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.audit.service.AuditComponent\">\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": 545,
          "services": [],
          "startOrder": 497,
          "version": "2025.0.8",
          "xmlFileContent": "<component name=\"org.nuxeo.retention.audit\" version=\"1.0\">\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" 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
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.retention.service.RetentionManagerImpl",
          "declaredStartOrder": 1001,
          "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.core.operation.OperationServiceComponent",
            "org.nuxeo.ecm.platform.usermanager.UserManagerImpl",
            "org.nuxeo.retention.vocabularies",
            "org.nuxeo.ecm.platform.usermanager.UserService"
          ],
          "resolutionOrder": 596,
          "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": "2025.0.8"
            }
          ],
          "startOrder": 679,
          "version": "2025.0.8",
          "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.ecm.core.operation.OperationServiceComponent</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.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": 45,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.0.8",
              "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": 597,
          "services": [],
          "startOrder": 499,
          "version": "2025.0.8",
          "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
        }
      ],
      "fileName": "nuxeo-retention-2025.0.8.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\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": 597,
      "minResolutionOrder": 536,
      "packages": [
        "nuxeo-retention"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=retention/nuxeo-retention/lts-2025)](https://jenkins.platform.dev.nuxeo.com/job/retention/job/nuxeo-retention/job/lts-2025/)\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_/_lts-2025_ 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": "b033334a77a1d8b3a7022acd92316a74",
        "encoding": "UTF-8",
        "length": 6319,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2025.0.8"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-webapp-types",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": 38,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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  </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": 33,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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.schema.common"
          ],
          "resolutionOrder": 512,
          "services": [],
          "startOrder": 439,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.webapp.schemas\">\n\n  <require>org.nuxeo.ecm.core.schema.common</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  </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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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      <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      <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      <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      <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      <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      <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      <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      <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      <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    </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    </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      <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      <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      <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": 513,
          "services": [],
          "startOrder": 398,
          "version": "2025.7.12",
          "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      <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      <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      <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      <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      <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      <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      <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      <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      <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    </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    </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      <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      <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      <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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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": 513,
      "minResolutionOrder": 512,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.schema",
        "org.nuxeo.ecm.core"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login-digest",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.login.digest",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    This authentication plugin processes HTTP Digest Access Authentication\n    (RFC 2617).\n\n    It requires a specific directory to be configured with\n    the user manager implementation in order to stored specialized\n    hashed versions of the user passwords, which RFC 2617 needs.\n  \n",
          "documentationHtml": "<p>\nThis authentication plugin processes HTTP Digest Access Authentication\n(RFC 2617).\n</p><p>\nIt requires a specific directory to be configured with\nthe user manager implementation in order to stored specialized\nhashed versions of the user passwords, which RFC 2617 needs.\n</p><p></p>",
          "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.digest/org.nuxeo.ecm.platform.login.digest/Contributions/org.nuxeo.ecm.platform.login.digest--authenticators",
              "id": "org.nuxeo.ecm.platform.login.digest--authenticators",
              "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": "2025.7.12",
              "xml": "<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <authenticationPlugin class=\"org.nuxeo.ecm.ui.web.auth.digest.DigestAuthenticator\" enabled=\"true\" name=\"DIGEST_AUTH\">\n      <stateful>false</stateful>\n    </authenticationPlugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.digest/org.nuxeo.ecm.platform.login.digest",
          "name": "org.nuxeo.ecm.platform.login.digest",
          "requirements": [],
          "resolutionOrder": 335,
          "services": [],
          "startOrder": 274,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.login.digest\">\n\n  <documentation>\n    This authentication plugin processes HTTP Digest Access Authentication\n    (RFC 2617).\n\n    It requires a specific directory to be configured with\n    the user manager implementation in order to stored specialized\n    hashed versions of the user passwords, which RFC 2617 needs.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"authenticators\">\n    <authenticationPlugin name=\"DIGEST_AUTH\" enabled=\"true\" class=\"org.nuxeo.ecm.ui.web.auth.digest.DigestAuthenticator\">\n      <stateful>false</stateful>\n    </authenticationPlugin>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/digest-authentication-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.login/org.nuxeo.ecm.platform.login.digest/org.nuxeo.ecm.platform.digestauth.schemaContrib/Contributions/org.nuxeo.ecm.platform.digestauth.schemaContrib--schema",
              "id": "org.nuxeo.ecm.platform.digestauth.schemaContrib--schema",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"digestauth\" src=\"schema/digestauth.xsd\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.digest/org.nuxeo.ecm.platform.digestauth.schemaContrib",
          "name": "org.nuxeo.ecm.platform.digestauth.schemaContrib",
          "requirements": [],
          "resolutionOrder": 336,
          "services": [],
          "startOrder": 255,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.digestauth.schemaContrib\">\n  <extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"digestauth\" src=\"schema/digestauth.xsd\"/>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/digest-authentication-schema-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-login-digest-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.digest",
      "id": "org.nuxeo.ecm.platform.login.digest",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo HTTP Digest Access Authentication Login Module extens\r\n ion\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.login.digest;singleton:=true\r\nBundle-Version: 1.0.0\r\nRequire-Bundle: org.nuxeo.ecm.platform.login\r\nNuxeo-Component: OSGI-INF/digest-authentication-contrib.xml,OSGI-INF/dig\r\n est-authentication-schema-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 336,
      "minResolutionOrder": 335,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.login"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-apidoc-webengine",
      "artifactVersion": "2025.0.2",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.apidoc.webengine",
      "components": [],
      "fileName": "nuxeo-apidoc-webengine-2025.0.2.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.apidoc/org.nuxeo.apidoc.webengine",
      "id": "org.nuxeo.apidoc.webengine",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 0.0.1\r\nBundle-Name: nuxeo api documentation browser\r\nBundle-SymbolicName: org.nuxeo.apidoc.webengine;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Require: org.nuxeo.ecm.webengine.core,org.nuxeo.apidoc.core\r\nNuxeo-WebModule: org.nuxeo.apidoc.browse.ApiDocApplication\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": "\n## About nuxeo-apidoc-webengine\n\nThis bundle provide a WebEngine API on top of the nuxeo-apidoc-core API.\n\nEach object provided by the core layer is wrapped in a WebObject that is then associated with views.\n\nThe same WebEngine API can be used in 2 mode :\n\n - embedded mode: can be embedded as frames, as it was embedded inside the JSF admin center, for instance\n - full model: in /site/distribution/\n",
        "digest": "d371e977af9ef6599555b72d17acd3e8",
        "encoding": "UTF-8",
        "length": 402,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "requirements": [
        "org.nuxeo.ecm.webengine.core",
        "org.nuxeo.apidoc.core"
      ],
      "version": "2025.0.2"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-bulk",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.bulk",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.scroll.ScrollComponent",
          "declaredStartOrder": null,
          "documentation": "\n    The scroll service offers an unified API to scroll large result set.\n  \n",
          "documentationHtml": "<p>\nThe scroll service offers an unified API to scroll large result set.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.scroll.service",
              "descriptors": [
                "org.nuxeo.ecm.core.scroll.ScrollDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.scroll.service/ExtensionPoints/org.nuxeo.ecm.core.scroll.service--scroll",
              "id": "org.nuxeo.ecm.core.scroll.service--scroll",
              "label": "scroll (org.nuxeo.ecm.core.scroll.service)",
              "name": "scroll",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.scroll.service",
          "name": "org.nuxeo.ecm.core.scroll.service",
          "requirements": [],
          "resolutionOrder": 108,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.scroll.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.scroll.service/Services/org.nuxeo.ecm.core.api.scroll.ScrollService",
              "id": "org.nuxeo.ecm.core.api.scroll.ScrollService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 586,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.scroll.service\" version=\"1.0\">\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.api.scroll.ScrollService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.scroll.ScrollComponent\" />\n\n  <documentation>\n    The scroll service offers an unified API to scroll large result set.\n  </documentation>\n\n  <extension-point name=\"scroll\">\n    <object class=\"org.nuxeo.ecm.core.scroll.ScrollDescriptor\" />\n  </extension-point>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/scroll-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.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.scroll.contrib.default/Contributions/org.nuxeo.ecm.core.scroll.contrib.default--scroll",
              "id": "org.nuxeo.ecm.core.scroll.contrib.default--scroll",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.ecm.core.scroll.RepositoryScroll\" default=\"true\" name=\"repository\" type=\"document\"/>\n    <scroll class=\"org.nuxeo.ecm.core.scroll.StaticScroll\" name=\"list\" type=\"static\"/>\n    <scroll class=\"org.nuxeo.ecm.core.scroll.EmptyScroll\" name=\"list\" type=\"empty\"/>\n    <scroll class=\"org.nuxeo.ecm.core.scroll.GenerateUidScroll\" name=\"generateUid\" type=\"generic\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.scroll.contrib.default",
          "name": "org.nuxeo.ecm.core.scroll.contrib.default",
          "requirements": [
            "org.nuxeo.ecm.core.scroll.service"
          ],
          "resolutionOrder": 110,
          "services": [],
          "startOrder": 140,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.scroll.contrib.default\" 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=\"document\" name=\"repository\" default=\"true\" class=\"org.nuxeo.ecm.core.scroll.RepositoryScroll\" />\n    <scroll type=\"static\" name=\"list\" class=\"org.nuxeo.ecm.core.scroll.StaticScroll\" />\n    <scroll type=\"empty\" name=\"list\" class=\"org.nuxeo.ecm.core.scroll.EmptyScroll\" />\n    <scroll type=\"generic\" name=\"generateUid\" class=\"org.nuxeo.ecm.core.scroll.GenerateUidScroll\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/scroll-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.bulk.BulkComponent",
          "declaredStartOrder": -600,
          "documentation": "\n    The Bulk Service allows to execute a Bulk Command. This consists of two steps:\n    <ul>\n    <li>Creation of a document set by scrolling the database</li>\n    <li>Execution of a bulk on document set</li>\n</ul>\n",
          "documentationHtml": "<p>\nThe Bulk Service allows to execute a Bulk Command. This consists of two steps:\n</p><ul><li>Creation of a document set by scrolling the database</li><li>Execution of a bulk on document set</li></ul>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.bulk",
              "descriptors": [
                "org.nuxeo.ecm.core.bulk.BulkActionDescriptor"
              ],
              "documentation": "\n      Allows to define the bulk actions.\n\n      A bulk action is a stream processing composed of one or more computations.\n\n      A bulk action can be made available through http APIs, default is false.\n\n      The bucket size determines the number of document ids per record at the scroller level, default is 100.\n\n      The batch size determines the number of document ids handled per transactions at the computation level, default is 25.\n\n      <code>\n    <extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n        <action batchSize=\"25\" bucketSize=\"100\" name=\"internalAction\"/>\n        <action batchSize=\"25\" bucketSize=\"100\" httpEnabled=\"true\" name=\"publicAction\"/>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\nAllows to define the bulk actions.\n</p><p>\nA bulk action is a stream processing composed of one or more computations.\n</p><p>\nA bulk action can be made available through http APIs, default is false.\n</p><p>\nThe bucket size determines the number of document ids per record at the scroller level, default is 100.\n</p><p>\nThe batch size determines the number of document ids handled per transactions at the computation level, default is 25.\n</p><p>\n</p><pre><code>    &lt;extension point&#61;&#34;actions&#34; target&#61;&#34;org.nuxeo.ecm.core.bulk&#34;&gt;\n        &lt;action batchSize&#61;&#34;25&#34; bucketSize&#61;&#34;100&#34; name&#61;&#34;internalAction&#34;/&gt;\n        &lt;action batchSize&#61;&#34;25&#34; bucketSize&#61;&#34;100&#34; httpEnabled&#61;&#34;true&#34; name&#61;&#34;publicAction&#34;/&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk/ExtensionPoints/org.nuxeo.ecm.core.bulk--actions",
              "id": "org.nuxeo.ecm.core.bulk--actions",
              "label": "actions (org.nuxeo.ecm.core.bulk)",
              "name": "actions",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk",
          "name": "org.nuxeo.ecm.core.bulk",
          "requirements": [],
          "resolutionOrder": 111,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.bulk",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk/Services/org.nuxeo.ecm.core.bulk.BulkService",
              "id": "org.nuxeo.ecm.core.bulk.BulkService",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.bulk",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk/Services/org.nuxeo.ecm.core.bulk.BulkAdminService",
              "id": "org.nuxeo.ecm.core.bulk.BulkAdminService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 4,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.bulk\" version=\"1.0.0\">\n\n  <documentation>\n    The Bulk Service allows to execute a Bulk Command. This consists of two steps:\n    <ul>\n      <li>Creation of a document set by scrolling the database</li>\n      <li>Execution of a bulk on document set</li>\n    </ul>\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.bulk.BulkComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.bulk.BulkService\" />\n    <provide interface=\"org.nuxeo.ecm.core.bulk.BulkAdminService\" />\n  </service>\n\n  <extension-point name=\"actions\">\n    <documentation>\n      Allows to define the bulk actions.\n\n      A bulk action is a stream processing composed of one or more computations.\n\n      A bulk action can be made available through http APIs, default is false.\n\n      The bucket size determines the number of document ids per record at the scroller level, default is 100.\n\n      The batch size determines the number of document ids handled per transactions at the computation level, default is 25.\n\n      <code>\n        <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n          <action name=\"internalAction\" bucketSize=\"100\" batchSize=\"25\" />\n          <action name=\"publicAction\" bucketSize=\"100\" batchSize=\"25\" httpEnabled=\"true\" />\n        </extension>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.bulk.BulkActionDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-component.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.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk.io/Contributions/org.nuxeo.ecm.core.bulk.io--marshallers",
              "id": "org.nuxeo.ecm.core.bulk.io--marshallers",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.core.bulk.io.BulkStatusJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.bulk.io.BulkStatusJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.bulk.io.BulkCommandJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.bulk.io.BulkCommandJsonWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk.io",
          "name": "org.nuxeo.ecm.core.bulk.io",
          "requirements": [],
          "resolutionOrder": 115,
          "services": [],
          "startOrder": 109,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.bulk.io\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.core.bulk.io.BulkStatusJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.bulk.io.BulkStatusJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.bulk.io.BulkCommandJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.bulk.io.BulkCommandJsonWriter\" enable=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-io-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.avro--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk.config/Contributions/org.nuxeo.ecm.core.bulk.config--schema",
              "id": "org.nuxeo.ecm.core.bulk.config--schema",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.avro",
                "name": "org.nuxeo.runtime.avro",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.runtime.avro\">\n    <schema file=\"avro/Record-0x5D82F1387F01C58B.avsc\" name=\"Record-2023.0\"/>\n    <schema file=\"avro/BulkCommand-0xF032C4AB0AF8B906.avsc\" name=\"BulkCommand-2023.0\"/>\n    <schema file=\"avro/BulkCommand-0xDF8D62C9EE6F08F9.avsc\" name=\"BulkCommand-2023.4\"/>\n    <schema file=\"avro/BulkStatus-0xDA29E947B01E64AA.avsc\" name=\"BulkStatus-2023.0\"/>\n    <schema file=\"avro/DataBucket-0xEB04211B6C6C3B5F.avsc\" name=\"DataBucket-2023.0\"/>\n    <schema file=\"avro/BulkBucket-0xCC59A5FF2725F7AF.avsc\" name=\"BulkBucket-2023.0\"/>\n    <schema file=\"avro/NuxeoLogEvent-0xCA271CCAAF986742.avsc\" name=\"NuxeoLogEvent-2023.7\"/>\n    <schema file=\"avro/BlobDomainEvent-0x12FED19D1674451B.avsc\" name=\"BlobDomainEvent-2023.0,BlobDomainEvent-2021.54\"/>\n    <schema file=\"avro/DocumentDomainEvent-0x65D1150CBADF06B3.avsc\" name=\"DocumentDomainEvent-2023.3,DocumentDomainEvent-2021.54\"/>\n    <schema file=\"avro/DocumentDomainEvent-0x10E8C63CCCE89FA9.avsc\" name=\"DocumentDomainEvent-2021.58,DocumentDomainEvent-2023.16\"/>\n    <!-- Register 2021 schemas for smooth upgrade -->\n    <schema file=\"avro/Record-0xEE727BE73E8D498.avsc\" name=\"Record-2021.0\"/>\n    <schema file=\"avro/BulkCommand-0x5F64BA8BF77C9B7D.avsc\" name=\"BulkCommand-2021.6\"/>\n    <schema file=\"avro/BulkCommand-0x66217E9613482336.avsc\" name=\"BulkCommand-2021.46\"/>\n    <schema file=\"avro/BulkStatus-0xA58F151AC3B3DEBF.avsc\" name=\"BulkStatus-2021.7\"/>\n    <schema file=\"avro/BulkStatus-0xCE1D96C3B11E127.avsc\" name=\"BulkStatus-2021.38\"/>\n    <schema file=\"avro/DataBucket-0xB62494C74E419198.avsc\" name=\"DataBucket-2021.0\"/>\n    <schema file=\"avro/BlobDomainEvent-0x230B73B9BFB09F33.avsc\" name=\"BlobDomainEvent-2021.34\"/>\n    <schema file=\"avro/DocumentDomainEvent-0x370465EA76EBBAE3.avsc\" name=\"DocumentDomainEvent-2021.44\"/>\n    <!-- Same schemas in 2023 -->\n    <!-- schema name=\"BulkBucket-2021.0\" file=\"avro/BulkBucket-0xCC59A5FF2725F7AF.avsc\" / -->\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--logConfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk.config/Contributions/org.nuxeo.ecm.core.bulk.config--logConfig",
              "id": "org.nuxeo.ecm.core.bulk.config--logConfig",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"logConfig\" target=\"org.nuxeo.runtime.stream.service\">\n    <logConfig>\n      <!-- command stream size sets the maximum concurrency for the scroller computation in the Nuxeo cluster -->\n      <log name=\"bulk/command\" size=\"2\"/>\n      <!-- status stream size sets the maximum concurrency for the status computation in the Nuxeo cluster -->\n      <log name=\"bulk/status\" size=\"1\"/>\n      <!-- done stream size sets the maximum concurrency for the triggers computations -->\n      <log name=\"bulk/done\" size=\"1\"/>\n    </logConfig>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk.config/Contributions/org.nuxeo.ecm.core.bulk.config--configuration",
              "id": "org.nuxeo.ecm.core.bulk.config--configuration",
              "registrationOrder": 47,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <property name=\"nuxeo.core.bulk.scroller.scroll.size\">200</property>\n    <property name=\"nuxeo.core.bulk.scroller.scroll.keepAliveSeconds\">300</property>\n    <property name=\"nuxeo.core.bulk.scroller.transactionTimeout\">2d</property>\n    <property name=\"nuxeo.core.bulk.scroller.produceImmediate\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk.config/Contributions/org.nuxeo.ecm.core.bulk.config--streamProcessor",
              "id": "org.nuxeo.ecm.core.bulk.config--streamProcessor",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.bulk.BulkServiceProcessor\" defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultExternal=\"true\" defaultPartitions=\"1\" name=\"bulkServiceProcessor\" start=\"false\">\n      <stream external=\"false\" name=\"bulk/command\"/>\n      <stream external=\"false\" name=\"bulk/status\"/>\n      <stream external=\"false\" name=\"bulk/done\"/>\n      <policy continueOnFailure=\"false\" delay=\"1s\" maxDelay=\"60s\" maxRetries=\"0\" name=\"bulk/scroller\"/>\n      <policy continueOnFailure=\"false\" delay=\"1s\" maxDelay=\"60s\" maxRetries=\"20\" name=\"bulk/status\"/>\n      <computation concurrency=\"2\" name=\"bulk/scroller\"/>\n      <computation concurrency=\"1\" name=\"bulk/status\"/>\n    </streamProcessor>\n\n    <streamProcessor class=\"org.nuxeo.ecm.core.bulk.introspection.StreamIntrospectionProcessor\" defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultPartitions=\"1\" enabled=\"true\" name=\"streamIntrospection\">\n      <policy continueOnFailure=\"true\" delay=\"100ms\" maxRetries=\"1\" name=\"default\"/>\n    </streamProcessor>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk.config/Contributions/org.nuxeo.ecm.core.bulk.config--actions",
              "id": "org.nuxeo.ecm.core.bulk.config--actions",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <!-- Internal -->\n    <action batchSize=\"25\" bucketSize=\"100\" defaultScroller=\"repository\" inputStream=\"bulk/trash\" name=\"trash\" sequentialScroll=\"true\"/>\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"bulk/removeProxy\" name=\"removeProxy\"/>\n    <action batchSize=\"25\" bucketSize=\"100\" inputStream=\"bulk/setSystemProperties\" name=\"setSystemProperties\"/>\n    <!-- Exposed through REST API -->\n    <action batchSize=\"25\" bucketSize=\"100\" httpEnabled=\"true\" inputStream=\"bulk/setProperties\" name=\"setProperties\" validationClass=\"org.nuxeo.ecm.core.bulk.validation.SetPropertiesValidation\"/>\n    <action batchSize=\"25\" bucketSize=\"100\" defaultScroller=\"generateUid\" enabled=\"false\" inputStream=\"bulk/idle\" name=\"idle\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk.config/Contributions/org.nuxeo.ecm.core.bulk.config--streamProcessor1",
              "id": "org.nuxeo.ecm.core.bulk.config--streamProcessor1",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <!-- SetProperty processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.bulk.action.SetPropertiesAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"setProperties\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n\n    <!-- SetSystemProperty processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.bulk.action.SetSystemPropertiesAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"setSystemProperties\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n\n    <!-- RemoveProxy processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.bulk.action.RemoveProxyAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"removeProxy\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n\n    <!-- Trash processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.bulk.action.TrashAction\" defaultConcurrency=\"1\" defaultPartitions=\"1\" name=\"trash\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n\n    <!-- Idle processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.bulk.action.IdleAction\" defaultConcurrency=\"4\" defaultPartitions=\"12\" enabled=\"false\" name=\"idle\">\n      <policy continueOnFailure=\"true\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk/org.nuxeo.ecm.core.bulk.config",
          "name": "org.nuxeo.ecm.core.bulk.config",
          "requirements": [
            "org.nuxeo.runtime.stream.service"
          ],
          "resolutionOrder": 611,
          "services": [],
          "startOrder": 108,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.bulk.config\" version=\"1.0.0\">\n\n  <require>org.nuxeo.runtime.stream.service</require>\n\n  <!-- ======================================================================================= -->\n  <!-- Ensure backward/forward compatibility by registering schema evolution -->\n  <extension point=\"schema\" target=\"org.nuxeo.runtime.avro\">\n    <schema name=\"Record-2023.0\" file=\"avro/Record-0x5D82F1387F01C58B.avsc\" />\n    <schema name=\"BulkCommand-2023.0\" file=\"avro/BulkCommand-0xF032C4AB0AF8B906.avsc\" />\n    <schema name=\"BulkCommand-2023.4\" file=\"avro/BulkCommand-0xDF8D62C9EE6F08F9.avsc\" />\n    <schema name=\"BulkStatus-2023.0\" file=\"avro/BulkStatus-0xDA29E947B01E64AA.avsc\" />\n    <schema name=\"DataBucket-2023.0\" file=\"avro/DataBucket-0xEB04211B6C6C3B5F.avsc\" />\n    <schema name=\"BulkBucket-2023.0\" file=\"avro/BulkBucket-0xCC59A5FF2725F7AF.avsc\" />\n    <schema name=\"NuxeoLogEvent-2023.7\" file=\"avro/NuxeoLogEvent-0xCA271CCAAF986742.avsc\" />\n    <schema name=\"BlobDomainEvent-2023.0,BlobDomainEvent-2021.54\" file=\"avro/BlobDomainEvent-0x12FED19D1674451B.avsc\" />\n    <schema name=\"DocumentDomainEvent-2023.3,DocumentDomainEvent-2021.54\" file=\"avro/DocumentDomainEvent-0x65D1150CBADF06B3.avsc\" />\n    <schema name=\"DocumentDomainEvent-2021.58,DocumentDomainEvent-2023.16\" file=\"avro/DocumentDomainEvent-0x10E8C63CCCE89FA9.avsc\" />\n    <!-- Register 2021 schemas for smooth upgrade -->\n    <schema name=\"Record-2021.0\" file=\"avro/Record-0xEE727BE73E8D498.avsc\" />\n    <schema name=\"BulkCommand-2021.6\" file=\"avro/BulkCommand-0x5F64BA8BF77C9B7D.avsc\" />\n    <schema name=\"BulkCommand-2021.46\" file=\"avro/BulkCommand-0x66217E9613482336.avsc\" />\n    <schema name=\"BulkStatus-2021.7\" file=\"avro/BulkStatus-0xA58F151AC3B3DEBF.avsc\" />\n    <schema name=\"BulkStatus-2021.38\" file=\"avro/BulkStatus-0xCE1D96C3B11E127.avsc\" />\n    <schema name=\"DataBucket-2021.0\" file=\"avro/DataBucket-0xB62494C74E419198.avsc\" />\n    <schema name=\"BlobDomainEvent-2021.34\" file=\"avro/BlobDomainEvent-0x230B73B9BFB09F33.avsc\" />\n    <schema name=\"DocumentDomainEvent-2021.44\" file=\"avro/DocumentDomainEvent-0x370465EA76EBBAE3.avsc\" />\n    <!-- Same schemas in 2023 -->\n    <!-- schema name=\"BulkBucket-2021.0\" file=\"avro/BulkBucket-0xCC59A5FF2725F7AF.avsc\" / -->\n  </extension>\n\n  <!-- ======================================================================================= -->\n  <!-- Bulk Service configuration -->\n\n  <!-- Initialize bulk service streams before action processors -->\n  <extension point=\"logConfig\" target=\"org.nuxeo.runtime.stream.service\">\n    <logConfig>\n      <!-- command stream size sets the maximum concurrency for the scroller computation in the Nuxeo cluster -->\n      <log name=\"bulk/command\" size=\"2\" />\n      <!-- status stream size sets the maximum concurrency for the status computation in the Nuxeo cluster -->\n      <log name=\"bulk/status\" size=\"1\" />\n      <!-- done stream size sets the maximum concurrency for the triggers computations -->\n      <log name=\"bulk/done\" size=\"1\" />\n    </logConfig>\n  </extension>\n\n  <!-- Configure the default scroller behavior -->\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <property name=\"nuxeo.core.bulk.scroller.scroll.size\">200</property>\n    <property name=\"nuxeo.core.bulk.scroller.scroll.keepAliveSeconds\">${nuxeo.core.bulk.scroller.scroll.keepAliveSeconds:=300}</property>\n    <property name=\"nuxeo.core.bulk.scroller.transactionTimeout\">2d</property>\n    <property name=\"nuxeo.core.bulk.scroller.produceImmediate\">false</property>\n  </extension>\n\n  <!-- Bulk service processor -->\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"bulkServiceProcessor\" class=\"org.nuxeo.ecm.core.bulk.BulkServiceProcessor\"\n      defaultCodec=\"avro\" defaultConcurrency=\"1\" defaultPartitions=\"1\" defaultExternal=\"true\" start=\"false\">\n      <stream name=\"bulk/command\" external=\"false\" />\n      <stream name=\"bulk/status\" external=\"false\" />\n      <stream name=\"bulk/done\" external=\"false\" />\n      <policy name=\"bulk/scroller\" maxRetries=\"0\" delay=\"1s\" maxDelay=\"60s\"\n        continueOnFailure=\"${nuxeo.core.bulk.scroller.continueOnFailure:=false}\" />\n      <policy name=\"bulk/status\" maxRetries=\"20\" delay=\"1s\" maxDelay=\"60s\"\n        continueOnFailure=\"${nuxeo.core.bulk.status.continueOnFailure:=false}\" />\n      <computation name=\"bulk/scroller\" concurrency=\"${nuxeo.core.bulk.scroller.concurrency:=2}\" />\n      <computation name=\"bulk/status\" concurrency=\"${nuxeo.core.bulk.status.concurrency:=1}\" />\n    </streamProcessor>\n\n    <streamProcessor name=\"streamIntrospection\" enabled=\"${metrics.streams.enabled:=false}\"\n      class=\"org.nuxeo.ecm.core.bulk.introspection.StreamIntrospectionProcessor\" defaultCodec=\"avro\"\n      defaultConcurrency=\"1\" defaultPartitions=\"1\">\n      <policy name=\"default\" maxRetries=\"1\" delay=\"100ms\" continueOnFailure=\"true\" />\n    </streamProcessor>\n\n  </extension>\n\n  <!-- ======================================================================================= -->\n  <!-- Actions configuration -->\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <!-- Internal -->\n    <action name=\"trash\" defaultScroller=\"repository\" inputStream=\"bulk/trash\" bucketSize=\"100\" batchSize=\"25\" sequentialScroll=\"true\" />\n    <action name=\"removeProxy\" inputStream=\"bulk/removeProxy\" bucketSize=\"100\" batchSize=\"25\" />\n    <action name=\"setSystemProperties\" inputStream=\"bulk/setSystemProperties\" bucketSize=\"100\" batchSize=\"25\" />\n    <!-- Exposed through REST API -->\n    <action name=\"setProperties\" inputStream=\"bulk/setProperties\" bucketSize=\"100\" batchSize=\"25\" httpEnabled=\"true\"\n      validationClass=\"org.nuxeo.ecm.core.bulk.validation.SetPropertiesValidation\" />\n    <action name=\"idle\" enabled=\"${nuxeo.bulk.action.idle.enabled:=false}\" defaultScroller=\"generateUid\"\n      inputStream=\"bulk/idle\" bucketSize=\"100\" batchSize=\"25\" />\n  </extension>\n\n  <!-- Action's processor -->\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <!-- SetProperty processor -->\n    <streamProcessor name=\"setProperties\" class=\"org.nuxeo.ecm.core.bulk.action.SetPropertiesAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.setProperties.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.setProperties.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n\n    <!-- SetSystemProperty processor -->\n    <streamProcessor name=\"setSystemProperties\" class=\"org.nuxeo.ecm.core.bulk.action.SetSystemPropertiesAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.setSystemProperties.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.setSystemProperties.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n\n    <!-- RemoveProxy processor -->\n    <streamProcessor name=\"removeProxy\" class=\"org.nuxeo.ecm.core.bulk.action.RemoveProxyAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.removeProxy.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.removeProxy.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n\n    <!-- Trash processor -->\n    <streamProcessor name=\"trash\" class=\"org.nuxeo.ecm.core.bulk.action.TrashAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.trash.defaultConcurrency:=1}\"\n      defaultPartitions=\"${nuxeo.bulk.action.trash.defaultPartitions:=1}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"false\" />\n    </streamProcessor>\n\n    <!-- Idle processor -->\n    <streamProcessor name=\"idle\" class=\"org.nuxeo.ecm.core.bulk.action.IdleAction\"\n      enabled=\"${nuxeo.bulk.action.idle.enabled:=false}\"\n      defaultConcurrency=\"${nuxeo.bulk.action.idle.defaultConcurrency:=3}\"\n      defaultPartitions=\"${nuxeo.bulk.action.idle.defaultPartitions:=12}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-config.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-bulk-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.bulk",
      "id": "org.nuxeo.ecm.core.bulk",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Core Bulk\r\nBundle-SymbolicName: org.nuxeo.ecm.core.bulk;singleton:=true\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/scroll-service.xml,OSGI-INF/scroll-contrib.xml\r\n ,OSGI-INF/bulk-component.xml,OSGI-INF/bulk-config.xml,OSGI-INF/bulk-io-\r\n contrib.xml\r\n\r\n",
      "maxResolutionOrder": 611,
      "minResolutionOrder": 108,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "nuxeo-core-bulk\n===============\n\n## About\n\nThis module provides the ability to execute actions asynchronously on a -possibly large- set of documents. This is done by leveraging [Nuxeo Streams](https://github.com/nuxeo/nuxeo/tree/master/modules/runtime/nuxeo-runtime-stream#nuxeo-runtime-stream) that bring scalability and fault tolerance.\n\n## Definitions\n\n\n- __document set__: a list of documents from a repository represented as a list of document identifiers.\n\n- __action__: an operation that can be applied to a document set.\n\n- __command__: a set of parameters building a request to apply an action on a document set.\n\n- __bucket__: a portion of a document set that fits into a stream record.\n\n- __batch__: a smaller (or equals) portion of a bucket where the action is applied within a transaction.\n\n## Requirements\n\nTo work properly the Bulk Service need a true KeyValue storage to store the command its status,\nthere are 2 possibles choices:\n\n- Use `SQLKeyValueStore` this is the case if you are using a SQL database.\n- Use `MongoDBKeyValueStore` this is the case if you are using the `mongodb` template.\n\nYou should not rely on the default `MemKeyValueStore` implementation that flushes the data on restart.\n\n\n## Bulk Command\n\nThe bulk command is the input of the framework.\nIt is composed by the unique name of the action to execute, the NXQL query that materializes the document set, the user submitting the command, the repository and some optional parameters that could be needed by the action:\n\n```java\nBulkCommand command = new BulkCommand.Builder(\"myAction\", \"SELECT * from Document\")\n                                        .repository(\"myRepository\")\n                                        .user(\"myUser\")\n                                        .param(\"param1\", \"myParam1\")\n                                        .param(\"param2\", \"myParam2\")\n                                        .build();\nString commandId = Framework.getService(BulkService.class).submit(command);\n```\n\n\n## Execution flow\n\n![baf](bulk-overview.png)\n\n### The BulkService\nThe entry point is the [`BulkService`](./src/main/java/org/nuxeo/ecm/core/bulk/BulkService.java) that takes a bulk command as an input.\nThe service submits this command, meaning it appends the `BulkCommand` to the `command` stream.\n\nThe BulkService can also returns the status of a command which is internally stored into a KeyValueStore.\n\n### The Scroller computation\n\nThe `command` stream is the input of the `Scroller` computation.\n\nThis computation scrolls the database using a cursor to retrieve the document ids matching the NXQL query.\nThe ids are grouped into a bucket that fit into a record.\n\nThe `BulkBucket` record is appended to the action's stream.\n\nThe scroller send command status update to inform that the scroll is in progress or terminated and to set the total number of document in the materialized document set.\n\n### Actions processors\n\nEach action runs its own stream processor (a topology of computations).\n\nThe action processor must respect the following rules:\n\n- action must send a status update containing the number of processed documents since the last update.\n\n- action must handle possible error, for instance the user that send the command might not have write permission on all documents\n\n- the total number of processed documents reported must match at some point the number of documents in the document set.\n\n- action that aggregates bucket records per command must handle interleaved commands.\n  This can be done by maintaining a local state for each command.\n\n- action that aggregates bucket records per command should checkpoint only when there no other interleaved command in progress.\n  This is to prevent checkpoint while some records are not yet processed resulting in possible loss of record.\n\nAn [`AbstractBulkComputation`](./src/main/java/org/nuxeo/ecm/core/bulk/action/computation/AbstractBulkComputation.java) is provided so an action can be implemented easily with a single computation\nSee [`SetPropertiesAction`](./src/main/java/org/nuxeo/ecm/core/bulk/action/SetPropertiesAction.java) for a simple example.\n\nSee The [`CSVExportAction`](./src/main/java/org/nuxeo/ecm/core/bulk/action/CSVExportAction.java) and particularly the [`MakeBlob`](./src/main/java/org/nuxeo/ecm/core/bulk/action/computation/MakeBlob.java) computation for an advanced example.\n\n\n### The Status computation\n\nThis computation reads from the `status` stream and aggregate status update to build the current status of command.\nThe status is saved into a KeyValueStore.\nWhen the number of processed document is equals to the number of document in the set, the state is changed to completed.\nAnd the computation appends the final status to the `done` stream.\n\nThis `done` stream can be used as an input by custom computation to execute other actions once a command is completed.\n\n\n## How to contribute an action\n\nYou need to register a couple action / stream processor :\n\n```xml\n<extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n  <action name=\"myAction\" bucketSize=\"100\" batchSize=\"20\"/>\n</extension>\n```\n\n```xml\n<extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n  <streamProcessor name=\"myAction\" class=\"org.nuxeo.ecm.core.bulk.action.MyActionProcessor\"\n      defaultConcurrency=\"2\" defaultPartitions=\"4\" />\n</extension>\n```\n\nSee [`SetPropertiesAction`](./src/main/java/org/nuxeo/ecm/core/bulk/action/SetPropertiesAction.java) for a very basic action implementation.\n\nYou can find more info on how to configure a stream processor in the following link:\nhttps://github.com/nuxeo/nuxeo/tree/master/modules/runtime/nuxeo-runtime-stream#stream-processing\n\n\n## Testing a bulk action with REST API\n\nHere is an example on how to launch a bulk command and get status:\n\n```bash\n## Run a bulk action\ncurl -s -X POST 'http://localhost:8080/nuxeo/site/automation/Bulk.RunAction' -u Administrator:Administrator -H 'content-type: application/json' -d '{\n  \"context\": {},\n  \"params\": {\n    \"action\": \"csvExport\",\n    \"query\": \"SELECT * FROM File WHERE ecm:isVersion = 0 AND ecm:isTrashed = 0\",\n    \"parameters\": {}\n  }\n}' | tee /tmp/bulk-command.txt\n# {\"commandId\":\"e8cc059d-6b9d-480b-a6e1-b0edace6d982\"}\n\n## Extract the command id from the output\ncommandId=$(cat /tmp/bulk-command.txt | jq .[] | tr -d '\"')\n\n## Ask for the command status\ncurl -s -X GET \"http://localhost:8080/nuxeo/api/v1/bulk/$commandId\"  -u Administrator:Administrator  -H 'content-type: application/json' | jq .\n# {\n#  \"entity-type\": \"bulkStatus\",\n#  \"commandId\": \"e8cc059d-6b9d-480b-a6e1-b0edace6d982\",\n#  \"state\": \"RUNNING\",\n#  \"processed\": 0,\n#  \"total\": 1844,\n#  \"submitted\": \"2018-10-11T13:10:26.825Z\",\n#  \"scrollStart\": \"2018-10-11T13:10:26.827Z\",\n#  \"scrollEnd\": \"2018-10-11T13:10:26.846Z\",\n#  \"completed\": null\n#}\n\n## Wait for the completion of the command, this is only for testing purpose\n## a normal client should poll the status regularly instead of using this call:\ncurl -X POST 'http://localhost:8080/nuxeo/site/automation/Bulk.WaitForAction' -u Administrator:Administrator -H 'content-type: application/json' -d $'{\n  \"context\": {},\n  \"params\": {\n    \"commandId\": \"'\"$commandId\"'\",\n    \"timeoutSecond\": \"3600\"\n  }\n}'\n# {\"entity-type\":\"boolean\",\"value\":true}\n\n## Get the status again:\ncurl -s -X GET \"http://localhost:8080/nuxeo/api/v1/bulk/$commandId\"  -u Administrator:Administrator  -H 'content-type: application/json' | jq .\n#{\n#  \"entity-type\": \"bulkStatus\",\n#  \"commandId\": \"e8cc059d-6b9d-480b-a6e1-b0edace6d982\",\n#  \"state\": \"COMPLETED\",\n#  \"processed\": 1844,\n#  \"total\": 1844,\n#  \"submitted\": \"2018-10-11T13:10:26.825Z\",\n#  \"scrollStart\": \"2018-10-11T13:10:26.827Z\",\n#  \"scrollEnd\": \"2018-10-11T13:10:26.846Z\",\n#  \"completed\": \"2018-10-11T13:10:28.243Z\"\n#}\n```\n\nAlso a command can be aborted, this is useful for long running command launched by error,\nor to by pass a command that fails systematically which blocks the entire action processor:\n\n```\n## Abort a command\ncurl -s -X PUT \"http://localhost:8080/nuxeo/api/v1/bulk/$commandId/abort\"  -u Administrator:Administrator  -H 'content-type: application/json' | jq .\n\n```\n\n\n\n## Debugging\n\nAll streams used by the bulk service and action can be introspected using\nthe Nuxeo `bin/stream.sh` script.\n\nFor instance to see the latest commands submitted:\n```bash\n## When using Kafka\n./bin/stream.sh tail -k -l bulk-command --codec avro\n```\n| offset | watermark | flag | key | length | data |\n| --- | --- | --- | --- | ---: | --- |\n|bulk-command-01:+2|2018-10-11 11:18:34.955:0|[DEFAULT]|setProperties|164|{\"id\": \"b667b677-d40e-471a-8377-eb16dd301b42\", \"action\": \"setProperties\", \"query\": \"Select * from Document\", \"username\": \"Administrator\", \"repository\": \"default\", \"bucketSize\": 100, \"batchSize\": 25, \"params\": \"{\\\"dc:description\\\":\\\"a new new testbulk description\\\"}\"}|\n|bulk-command-00:+2|2018-10-11 15:10:26.826:0|[DEFAULT]|csvExport|151|{\"id\": \"e8cc059d-6b9d-480b-a6e1-b0edace6d982\", \"action\": \"csvExport\", \"query\": \"SELECT * FROM File WHERE ecm:isVersion = 0 AND ecm:isTrashed = 0\", \"username\": \"Administrator\", \"repository\": \"default\", \"bucketSize\": 100, \"batchSize\": 50, \"params\": null}|\n\n\nTo get the latest commands completed:\n```bash\n./bin/stream.sh tail -k -l bulk-done --codec avro\n```\n| offset | watermark | flag | key | length | data |\n| --- | --- | --- | --- | ---: | --- |\n|bulk-done-00:+4|2018-10-11 14:23:29.219:0|[DEFAULT]|580df47d-dd90-4d16-b23c-0e39ae363e06|96|{\"commandId\": \"580df47d-dd90-4d16-b23c-0e39ae363e06\", \"action\": \"csvExport\", \"delta\": false, \"processed\": 3873, \"state\": \"COMPLETED\", \"submitTime\": 1539260607207, \"scrollStartTime\": 1539260607275, \"scrollEndTime\": 1539260607326, \"completedTime\": 1539260609218, \"total\": 3873, \"result\": null}|\n|bulk-done-00:+5|2018-10-11 15:10:28.244:0|[DEFAULT]|e8cc059d-6b9d-480b-a6e1-b0edace6d982|96|{\"commandId\": \"e8cc059d-6b9d-480b-a6e1-b0edace6d982\", \"action\": \"csvExport\", \"delta\": false, \"processed\": 1844, \"state\": \"COMPLETED\", \"submitTime\": 1539263426825, \"scrollStartTime\": 1539263426827, \"scrollEndTime\": 1539263426846, \"completedTime\": 1539263428243, \"total\": 1844, \"result\": null}|\n\n\nOf course you can view the BulkBucket message\n```bash\n./bin/stream.sh tail -k -l bulk-csvExport --codec avro\n```\n| offset | watermark | flag | key | length | data |\n| --- | --- | --- | --- | ---: | --- |\n|bulk-csvExport-01:+48|2018-10-11 15:10:26.842:0|[DEFAULT]|e8cc059d-6b9d-480b-a6e1-b0edace6d982:18|3750|{\"commandId\": \"e8cc059d-6b9d-480b-a6e1-b0edace6d982\", \"ids\": [\"763135b8-ca49-4eea-9a52-1ceaa227e60a\", ...]}|\n\nAnd check for any lag on any computation, for more information on `stream.sh`:\n```bash\n./bin/stream.sh help\n```\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": "19ddefdce7d19f2a7be1da9fa740d597",
        "encoding": "UTF-8",
        "length": 11309,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-routing-default",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.routing.api",
          "org.nuxeo.ecm.platform.routing.core",
          "org.nuxeo.ecm.platform.routing.default"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.routing.default",
      "components": [
        {
          "@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.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--resources",
              "id": "studio.extensions.nuxeo-routing-default--resources",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.services.resource.ResourceService",
                "name": "org.nuxeo.runtime.services.resource.ResourceService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.runtime.services.resource.ResourceService\">\n    <resource name=\"NRD-PR-TasksInfo\">data/templates/NRD-PR-TasksInfo</resource>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--event-handlers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--event-handlers",
              "id": "studio.extensions.nuxeo-routing-default--event-handlers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"event-handlers\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <handler chainId=\"cancelWorkflow\">\n      <event>workflowCanceled</event>\n    </handler>\n  </extension>"
            },
            {
              "@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.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--chains",
              "id": "studio.extensions.nuxeo-routing-default--chains",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <chain id=\"NRD-AC-PR-ChooseParticipants-Output\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">NRD-AC-PR-LockDocument</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param name=\"name\" type=\"string\">initiatorComment</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"comment\"]</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-LockDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Auth.LoginAs\">\n        <param name=\"name\" type=\"string\">expr:workflowInitiator</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">expr:Document.isLocked()?\"voidChain\":\"Document.Lock\"</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-UnlockDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.Unlock\"/>\n    </chain>\n    <chain id=\"NRD-AC-PR-ValidateNode-Output\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">NRD-AC-PR-UnlockDocument</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">logInAudit</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-force-validate\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Auth.LoginAs\">\n        <param name=\"name\" type=\"string\">expr:Context[\"workflowInitiator\"]</param>\n      </operation>\n      <operation id=\"Audit.LogEvent\">\n        <param name=\"event\" type=\"string\">Consultation time excedeed</param>\n        <param name=\"category\" type=\"string\">Review workflow</param>\n        <param name=\"comment\" type=\"string\">Some consultation tasks were aborted by the system as they received no feedback message.</param>\n      </operation>\n      <operation id=\"Workflow.ResumeNode\"/>\n    </chain>\n    <chain id=\"NRD-AC-PR-storeTaskInfo\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">This[0]</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">tasksInfo</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"tasks\"]</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">numberNA</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"NA\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">numberRejected</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"reject\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">numberApproved</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"approve\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">numberOfTasks</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"numberOfTasks\"]</param>\n      </operation>\n      <operation id=\"Render.Document\">\n        <param name=\"template\" type=\"string\">template:NRD-PR-TasksInfo</param>\n        <param name=\"filename\" type=\"string\">output.ftl</param>\n        <param name=\"mimetype\" type=\"string\">text/xml</param>\n        <param name=\"type\" type=\"string\">ftl</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param name=\"name\" type=\"string\">review_result_file</param>\n        <param name=\"value\" type=\"object\">expr:This.get(0)</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param name=\"name\" type=\"string\">review_result</param>\n        <param name=\"value\" type=\"object\">expr:This.get(0).getString()</param>\n      </operation>\n    </chain>\n    <chain id=\"cancelWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">isParallelWF</param>\n        <param name=\"value\" type=\"object\">expr:Event.context.getProperty(\"wfName\").equals(\"wf.parallelDocumentReview.ParallelDocumentReview\")?true:false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">expr:isParallelWF?\"Document.Unlock\":\"voidChain\"</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"initInitiatorComment\">\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">if((NodeVariables[\"comment\"] != \"\") AND (NodeVariables[\"comment\"] != null)){\nWorkflowVariables[\"initiatorComment\"]= NodeVariables[\"comment\"];}</param>\n      </operation>\n    </chain>\n    <chain id=\"logInAudit\">\n      <operation id=\"Audit.LogEvent\">\n        <param name=\"event\" type=\"string\">expr:NodeVariables[\"button\"] ==\"reject\"?\"chain.document.refused\":\"chain.document.validated\"</param>\n        <param name=\"category\" type=\"string\">Review workflow</param>\n        <param name=\"comment\" type=\"string\">expr:@{nodeLastActor} @{NodeVariables[\"button\"] ==\"reject\"?\"chain.document.refused\":\"chain.document.validated\"} the document with the following comment: @{NodeVariables[\"comment\"]}</param>\n      </operation>\n    </chain>\n    <chain id=\"nextAssignee\">\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">if (NodeVariables[\"button\"] == \"validate\") {\n  WorkflowVariables[\"index\"] = WorkflowVariables[\"index\"] + 1;\n}\nelse if (NodeVariables[\"button\"] == \"reject\") {\n  WorkflowVariables[\"index\"] = WorkflowVariables[\"index\"] - 1;\n}\nelse if (NodeVariables[\"button\"] == \"submit\") {\n  WorkflowVariables[\"index\"] = 0;\n}</param>\n      </operation>\n    </chain>\n    <chain id=\"notifyInitiatorEndOfWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.Mail\">\n        <param name=\"from\" type=\"string\">expr:Env[\"mail.from\"]</param>\n        <param name=\"message\" type=\"string\">The document was approved by every participant.</param>\n        <param name=\"subject\" type=\"string\">expr:@{Env[\"nuxeo.notification.eMailSubjectPrefix\"]} Document approved</param>\n        <param name=\"to\" type=\"stringlist\">expr:Fn.getEmail(workflowInitiator)</param>\n        <param name=\"HTML\" type=\"boolean\">false</param>\n        <param name=\"rollbackOnError\" type=\"boolean\">true</param>\n        <param name=\"viewId\" type=\"string\">view_documents</param>\n      </operation>\n    </chain>\n    <chain id=\"reinitAssigneeComment\">\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">if((NodeVariables[\"comment\"] != \"\") AND (NodeVariables[\"comment\"] != null)){\nNodeVariables[\"comment\"]= null;}</param>\n      </operation>\n    </chain>\n    <chain id=\"terminateWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">logInAudit</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"Context.RunDocumentOperationInNewTx\">\n        <param name=\"id\" type=\"string\">notifyInitiatorEndOfWorkflow</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n        <param name=\"rollbackGlobalOnError\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">expr:WorkflowVariables[\"validationOrReview\"] == \"validation\"?\"validateDocument\":\"voidChain\"</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"Audit.LogEvent\">\n        <param name=\"event\" type=\"string\">Review completed successfully</param>\n        <param name=\"category\" type=\"string\">Review workflow</param>\n        <param name=\"comment\" type=\"string\">All the participants of the review have approved the document.</param>\n      </operation>\n    </chain>\n    <chain id=\"validateDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.FollowLifecycleTransition\">\n        <param name=\"value\" type=\"string\">approve</param>\n      </operation>\n      <operation id=\"Document.CheckIn\">\n        <param name=\"version\" type=\"string\">minor</param>\n        <param name=\"comment\" type=\"string\">Automatic checkin after validation</param>\n      </operation>\n    </chain>\n    <chain id=\"voidChain\">\n      <operation id=\"Context.FetchDocument\"/>\n    </chain>\n  </extension>"
            },
            {
              "@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.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--directories",
              "id": "studio.extensions.nuxeo-routing-default--directories",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n    <directory extends=\"template-vocabulary\" name=\"WorkflowType\">\n      <autoincrementIdField>false</autoincrementIdField>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n      <table>studio_vocabulary_WorkflowType</table>\n      <dataFile>data/vocabularies/WorkflowType.csv</dataFile>\n      <cacheEntryName>vocab-WorkflowType-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>vocab-WorkflowType-cache-without-references</cacheEntryWithoutReferencesName>\n    </directory>\n  </extension>"
            },
            {
              "@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.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--caches",
              "id": "studio.extensions.nuxeo-routing-default--caches",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"caches\" target=\"org.nuxeo.ecm.core.cache.CacheService\">\n    <cache name=\"vocab-WorkflowType-cache\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">500</option>\n      <ttl>60</ttl>\n    </cache>\n    <cache name=\"vocab-WorkflowType-cache-without-references\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">500</option>\n      <ttl>60</ttl>\n    </cache>\n  </extension>"
            },
            {
              "@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.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--schema",
              "id": "studio.extensions.nuxeo-routing-default--schema",
              "registrationOrder": 42,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"var_global_Task2169\" override=\"true\" prefix=\"var_global_Task2169\" src=\"data/schemas/var_global_Task2169.xsd\"/>\n    <schema name=\"var_Task2169\" override=\"true\" prefix=\"var_Task2169\" src=\"data/schemas/var_Task2169.xsd\"/>\n    <schema name=\"var_Task21a0\" override=\"true\" prefix=\"var_Task21a0\" src=\"data/schemas/var_Task21a0.xsd\"/>\n    <schema name=\"var_Task2225\" override=\"true\" prefix=\"var_Task2225\" src=\"data/schemas/var_Task2225.xsd\"/>\n    <schema name=\"var_Task22b4\" override=\"true\" prefix=\"var_Task22b4\" src=\"data/schemas/var_Task22b4.xsd\"/>\n    <schema name=\"var_Task232e\" override=\"true\" prefix=\"var_Task232e\" src=\"data/schemas/var_Task232e.xsd\"/>\n    <schema name=\"var_global_Task2556\" override=\"true\" prefix=\"var_global_Task2556\" src=\"data/schemas/var_global_Task2556.xsd\"/>\n    <schema name=\"var_Task2556\" override=\"true\" prefix=\"var_Task2556\" src=\"data/schemas/var_Task2556.xsd\"/>\n    <schema name=\"var_global_Task328d\" override=\"true\" prefix=\"var_global_Task328d\" src=\"data/schemas/var_global_Task328d.xsd\"/>\n    <schema name=\"var_Task328d\" override=\"true\" prefix=\"var_Task328d\" src=\"data/schemas/var_Task328d.xsd\"/>\n    <schema name=\"var_ParallelDocumentReview\" override=\"true\" prefix=\"var_ParallelDocumentReview\" src=\"data/schemas/var_ParallelDocumentReview.xsd\"/>\n    <schema name=\"var_Task375f\" override=\"true\" prefix=\"var_Task375f\" src=\"data/schemas/var_Task375f.xsd\"/>\n    <schema name=\"var_global_Task38e\" override=\"true\" prefix=\"var_global_Task38e\" src=\"data/schemas/var_global_Task38e.xsd\"/>\n    <schema name=\"var_Task38e\" override=\"true\" prefix=\"var_Task38e\" src=\"data/schemas/var_Task38e.xsd\"/>\n    <schema name=\"var_Task542\" override=\"true\" prefix=\"var_Task542\" src=\"data/schemas/var_Task542.xsd\"/>\n    <schema name=\"var_Task5c1\" override=\"true\" prefix=\"var_Task5c1\" src=\"data/schemas/var_Task5c1.xsd\"/>\n    <schema name=\"var_global_Task6d8\" override=\"true\" prefix=\"var_global_Task6d8\" src=\"data/schemas/var_global_Task6d8.xsd\"/>\n    <schema name=\"var_Task6d8\" override=\"true\" prefix=\"var_Task6d8\" src=\"data/schemas/var_Task6d8.xsd\"/>\n    <schema name=\"var_SerialDocumentReview\" override=\"true\" prefix=\"var_SerialDocumentReview\" src=\"data/schemas/var_SerialDocumentReview.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.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--doctype",
              "id": "studio.extensions.nuxeo-routing-default--doctype",
              "registrationOrder": 37,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"facet-var_global_Task2169\">\n      <schema name=\"var_global_Task2169\"/>\n    </facet>\n    <facet name=\"facet-var_Task2169\">\n      <schema name=\"var_Task2169\"/>\n    </facet>\n    <facet name=\"facet-var_Task21a0\">\n      <schema name=\"var_Task21a0\"/>\n    </facet>\n    <facet name=\"facet-var_Task2225\">\n      <schema name=\"var_Task2225\"/>\n    </facet>\n    <facet name=\"facet-var_Task22b4\">\n      <schema name=\"var_Task22b4\"/>\n    </facet>\n    <facet name=\"facet-var_Task232e\">\n      <schema name=\"var_Task232e\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task2556\">\n      <schema name=\"var_global_Task2556\"/>\n    </facet>\n    <facet name=\"facet-var_Task2556\">\n      <schema name=\"var_Task2556\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task328d\">\n      <schema name=\"var_global_Task328d\"/>\n    </facet>\n    <facet name=\"facet-var_Task328d\">\n      <schema name=\"var_Task328d\"/>\n    </facet>\n    <facet name=\"facet-var_ParallelDocumentReview\">\n      <schema name=\"var_ParallelDocumentReview\"/>\n    </facet>\n    <facet name=\"facet-var_Task375f\">\n      <schema name=\"var_Task375f\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task38e\">\n      <schema name=\"var_global_Task38e\"/>\n    </facet>\n    <facet name=\"facet-var_Task38e\">\n      <schema name=\"var_Task38e\"/>\n    </facet>\n    <facet name=\"facet-var_Task542\">\n      <schema name=\"var_Task542\"/>\n    </facet>\n    <facet name=\"facet-var_Task5c1\">\n      <schema name=\"var_Task5c1\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task6d8\">\n      <schema name=\"var_global_Task6d8\"/>\n    </facet>\n    <facet name=\"facet-var_Task6d8\">\n      <schema name=\"var_Task6d8\"/>\n    </facet>\n    <facet name=\"facet-var_SerialDocumentReview\">\n      <schema name=\"var_SerialDocumentReview\"/>\n    </facet>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.routing.service--routeModelImporter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--routeModelImporter",
              "id": "studio.extensions.nuxeo-routing-default--routeModelImporter",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.routing.service",
                "name": "org.nuxeo.ecm.platform.routing.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"routeModelImporter\" target=\"org.nuxeo.ecm.platform.routing.service\">\n    <template-resource id=\"ParallelDocumentReview\" path=\"data/ParallelDocumentReview.zip\"/>\n    <template-resource id=\"SerialDocumentReview\" path=\"data/SerialDocumentReview.zip\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--filters",
              "id": "studio.extensions.nuxeo-routing-default--filters",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n    <filter id=\"filter@wf@ParallelDocumentReview\">\n      <rule grant=\"true\">\n        <permission>ReadWrite</permission>\n        <type>Audio</type>\n        <type>File</type>\n        <type>Note</type>\n        <type>Picture</type>\n        <type>Video</type>\n        <condition>#{!currentDocument.locked and currentDocument.currentLifeCycleState != 'approved' and !currentDocument.trashed}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>document.isImmutable()</condition>\n      </rule>\n    </filter>\n    <filter id=\"filter@SerialDocumentReview\">\n      <rule grant=\"true\">\n        <permission>ReadWrite</permission>\n        <type>Audio</type>\n        <type>File</type>\n        <type>Note</type>\n        <type>Picture</type>\n        <type>Video</type>\n        <condition>#{currentDocument.currentLifeCycleState != 'approved' and !currentDocument.trashed}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>document.isImmutable()</condition>\n      </rule>\n    </filter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default",
          "name": "studio.extensions.nuxeo-routing-default",
          "requirements": [],
          "resolutionOrder": 568,
          "services": [],
          "startOrder": 530,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"studio.extensions.nuxeo-routing-default\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.runtime.services.resource.ResourceService\" point=\"resources\">\n    <resource name=\"NRD-PR-TasksInfo\">data/templates/NRD-PR-TasksInfo</resource>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"event-handlers\">\n    <handler chainId=\"cancelWorkflow\">\n      <event>workflowCanceled</event>\n    </handler>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"chains\">\n    <chain id=\"NRD-AC-PR-ChooseParticipants-Output\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">NRD-AC-PR-LockDocument</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param type=\"string\" name=\"name\">initiatorComment</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"comment\"]</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-LockDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Auth.LoginAs\">\n        <param type=\"string\" name=\"name\">expr:workflowInitiator</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">expr:Document.isLocked()?\"voidChain\":\"Document.Lock\"</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-UnlockDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.Unlock\"/>\n    </chain>\n    <chain id=\"NRD-AC-PR-ValidateNode-Output\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">NRD-AC-PR-UnlockDocument</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">logInAudit</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-force-validate\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Auth.LoginAs\">\n        <param type=\"string\" name=\"name\">expr:Context[\"workflowInitiator\"]</param>\n      </operation>\n      <operation id=\"Audit.LogEvent\">\n        <param type=\"string\" name=\"event\">Consultation time excedeed</param>\n        <param type=\"string\" name=\"category\">Review workflow</param>\n        <param type=\"string\" name=\"comment\">Some consultation tasks were aborted by the system as they received no feedback message.</param>\n      </operation>\n      <operation id=\"Workflow.ResumeNode\"/>\n    </chain>\n    <chain id=\"NRD-AC-PR-storeTaskInfo\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">This[0]</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">tasksInfo</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"tasks\"]</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">numberNA</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"NA\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">numberRejected</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"reject\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">numberApproved</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"approve\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">numberOfTasks</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"numberOfTasks\"]</param>\n      </operation>\n      <operation id=\"Render.Document\">\n        <param type=\"string\" name=\"template\">template:NRD-PR-TasksInfo</param>\n        <param type=\"string\" name=\"filename\">output.ftl</param>\n        <param type=\"string\" name=\"mimetype\">text/xml</param>\n        <param type=\"string\" name=\"type\">ftl</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param type=\"string\" name=\"name\">review_result_file</param>\n        <param type=\"object\" name=\"value\">expr:This.get(0)</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param type=\"string\" name=\"name\">review_result</param>\n        <param type=\"object\" name=\"value\">expr:This.get(0).getString()</param>\n      </operation>\n    </chain>\n    <chain id=\"cancelWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">isParallelWF</param>\n        <param type=\"object\" name=\"value\">expr:Event.context.getProperty(\"wfName\").equals(\"wf.parallelDocumentReview.ParallelDocumentReview\")?true:false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">expr:isParallelWF?\"Document.Unlock\":\"voidChain\"</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"initInitiatorComment\">\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">if((NodeVariables[\"comment\"] != \"\") AND (NodeVariables[\"comment\"] != null)){\nWorkflowVariables[\"initiatorComment\"]= NodeVariables[\"comment\"];}</param>\n      </operation>\n    </chain>\n    <chain id=\"logInAudit\">\n      <operation id=\"Audit.LogEvent\">\n        <param type=\"string\" name=\"event\">expr:NodeVariables[\"button\"] ==\"reject\"?\"chain.document.refused\":\"chain.document.validated\"</param>\n        <param type=\"string\" name=\"category\">Review workflow</param>\n        <param type=\"string\" name=\"comment\">expr:@{nodeLastActor} @{NodeVariables[\"button\"] ==\"reject\"?\"chain.document.refused\":\"chain.document.validated\"} the document with the following comment: @{NodeVariables[\"comment\"]}</param>\n      </operation>\n    </chain>\n    <chain id=\"nextAssignee\">\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">if (NodeVariables[\"button\"] == \"validate\") {\n  WorkflowVariables[\"index\"] = WorkflowVariables[\"index\"] + 1;\n}\nelse if (NodeVariables[\"button\"] == \"reject\") {\n  WorkflowVariables[\"index\"] = WorkflowVariables[\"index\"] - 1;\n}\nelse if (NodeVariables[\"button\"] == \"submit\") {\n  WorkflowVariables[\"index\"] = 0;\n}</param>\n      </operation>\n    </chain>\n    <chain id=\"notifyInitiatorEndOfWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.Mail\">\n        <param type=\"string\" name=\"from\">expr:Env[\"mail.from\"]</param>\n        <param type=\"string\" name=\"message\">The document was approved by every participant.</param>\n        <param type=\"string\" name=\"subject\">expr:@{Env[\"nuxeo.notification.eMailSubjectPrefix\"]} Document approved</param>\n        <param type=\"stringlist\" name=\"to\">expr:Fn.getEmail(workflowInitiator)</param>\n        <param type=\"boolean\" name=\"HTML\">false</param>\n        <param type=\"boolean\" name=\"rollbackOnError\">true</param>\n        <param type=\"string\" name=\"viewId\">view_documents</param>\n      </operation>\n    </chain>\n    <chain id=\"reinitAssigneeComment\">\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">if((NodeVariables[\"comment\"] != \"\") AND (NodeVariables[\"comment\"] != null)){\nNodeVariables[\"comment\"]= null;}</param>\n      </operation>\n    </chain>\n    <chain id=\"terminateWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">logInAudit</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n      <operation id=\"Context.RunDocumentOperationInNewTx\">\n        <param type=\"string\" name=\"id\">notifyInitiatorEndOfWorkflow</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n        <param type=\"boolean\" name=\"rollbackGlobalOnError\">false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">expr:WorkflowVariables[\"validationOrReview\"] == \"validation\"?\"validateDocument\":\"voidChain\"</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n      <operation id=\"Audit.LogEvent\">\n        <param type=\"string\" name=\"event\">Review completed successfully</param>\n        <param type=\"string\" name=\"category\">Review workflow</param>\n        <param type=\"string\" name=\"comment\">All the participants of the review have approved the document.</param>\n      </operation>\n    </chain>\n    <chain id=\"validateDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.FollowLifecycleTransition\">\n        <param type=\"string\" name=\"value\">approve</param>\n      </operation>\n      <operation id=\"Document.CheckIn\">\n        <param type=\"string\" name=\"version\">minor</param>\n        <param type=\"string\" name=\"comment\">Automatic checkin after validation</param>\n      </operation>\n    </chain>\n    <chain id=\"voidChain\">\n      <operation id=\"Context.FetchDocument\"/>\n    </chain>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n    <directory name=\"WorkflowType\" extends=\"template-vocabulary\">\n      <autoincrementIdField>false</autoincrementIdField>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n      <table>studio_vocabulary_WorkflowType</table>\n      <dataFile>data/vocabularies/WorkflowType.csv</dataFile>\n      <cacheEntryName>vocab-WorkflowType-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>vocab-WorkflowType-cache-without-references</cacheEntryWithoutReferencesName>\n    </directory>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.cache.CacheService\" point=\"caches\">\n    <cache name=\"vocab-WorkflowType-cache\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">500</option>\n      <ttl>60</ttl>\n    </cache>\n    <cache name=\"vocab-WorkflowType-cache-without-references\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">500</option>\n      <ttl>60</ttl>\n    </cache>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"var_global_Task2169\" prefix=\"var_global_Task2169\" override=\"true\" src=\"data/schemas/var_global_Task2169.xsd\"/>\n    <schema name=\"var_Task2169\" prefix=\"var_Task2169\" override=\"true\" src=\"data/schemas/var_Task2169.xsd\"/>\n    <schema name=\"var_Task21a0\" prefix=\"var_Task21a0\" override=\"true\" src=\"data/schemas/var_Task21a0.xsd\"/>\n    <schema name=\"var_Task2225\" prefix=\"var_Task2225\" override=\"true\" src=\"data/schemas/var_Task2225.xsd\"/>\n    <schema name=\"var_Task22b4\" prefix=\"var_Task22b4\" override=\"true\" src=\"data/schemas/var_Task22b4.xsd\"/>\n    <schema name=\"var_Task232e\" prefix=\"var_Task232e\" override=\"true\" src=\"data/schemas/var_Task232e.xsd\"/>\n    <schema name=\"var_global_Task2556\" prefix=\"var_global_Task2556\" override=\"true\" src=\"data/schemas/var_global_Task2556.xsd\"/>\n    <schema name=\"var_Task2556\" prefix=\"var_Task2556\" override=\"true\" src=\"data/schemas/var_Task2556.xsd\"/>\n    <schema name=\"var_global_Task328d\" prefix=\"var_global_Task328d\" override=\"true\" src=\"data/schemas/var_global_Task328d.xsd\"/>\n    <schema name=\"var_Task328d\" prefix=\"var_Task328d\" override=\"true\" src=\"data/schemas/var_Task328d.xsd\"/>\n    <schema name=\"var_ParallelDocumentReview\" prefix=\"var_ParallelDocumentReview\" override=\"true\" src=\"data/schemas/var_ParallelDocumentReview.xsd\"/>\n    <schema name=\"var_Task375f\" prefix=\"var_Task375f\" override=\"true\" src=\"data/schemas/var_Task375f.xsd\"/>\n    <schema name=\"var_global_Task38e\" prefix=\"var_global_Task38e\" override=\"true\" src=\"data/schemas/var_global_Task38e.xsd\"/>\n    <schema name=\"var_Task38e\" prefix=\"var_Task38e\" override=\"true\" src=\"data/schemas/var_Task38e.xsd\"/>\n    <schema name=\"var_Task542\" prefix=\"var_Task542\" override=\"true\" src=\"data/schemas/var_Task542.xsd\"/>\n    <schema name=\"var_Task5c1\" prefix=\"var_Task5c1\" override=\"true\" src=\"data/schemas/var_Task5c1.xsd\"/>\n    <schema name=\"var_global_Task6d8\" prefix=\"var_global_Task6d8\" override=\"true\" src=\"data/schemas/var_global_Task6d8.xsd\"/>\n    <schema name=\"var_Task6d8\" prefix=\"var_Task6d8\" override=\"true\" src=\"data/schemas/var_Task6d8.xsd\"/>\n    <schema name=\"var_SerialDocumentReview\" prefix=\"var_SerialDocumentReview\" override=\"true\" src=\"data/schemas/var_SerialDocumentReview.xsd\"/>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <facet name=\"facet-var_global_Task2169\">\n      <schema name=\"var_global_Task2169\"/>\n    </facet>\n    <facet name=\"facet-var_Task2169\">\n      <schema name=\"var_Task2169\"/>\n    </facet>\n    <facet name=\"facet-var_Task21a0\">\n      <schema name=\"var_Task21a0\"/>\n    </facet>\n    <facet name=\"facet-var_Task2225\">\n      <schema name=\"var_Task2225\"/>\n    </facet>\n    <facet name=\"facet-var_Task22b4\">\n      <schema name=\"var_Task22b4\"/>\n    </facet>\n    <facet name=\"facet-var_Task232e\">\n      <schema name=\"var_Task232e\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task2556\">\n      <schema name=\"var_global_Task2556\"/>\n    </facet>\n    <facet name=\"facet-var_Task2556\">\n      <schema name=\"var_Task2556\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task328d\">\n      <schema name=\"var_global_Task328d\"/>\n    </facet>\n    <facet name=\"facet-var_Task328d\">\n      <schema name=\"var_Task328d\"/>\n    </facet>\n    <facet name=\"facet-var_ParallelDocumentReview\">\n      <schema name=\"var_ParallelDocumentReview\"/>\n    </facet>\n    <facet name=\"facet-var_Task375f\">\n      <schema name=\"var_Task375f\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task38e\">\n      <schema name=\"var_global_Task38e\"/>\n    </facet>\n    <facet name=\"facet-var_Task38e\">\n      <schema name=\"var_Task38e\"/>\n    </facet>\n    <facet name=\"facet-var_Task542\">\n      <schema name=\"var_Task542\"/>\n    </facet>\n    <facet name=\"facet-var_Task5c1\">\n      <schema name=\"var_Task5c1\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task6d8\">\n      <schema name=\"var_global_Task6d8\"/>\n    </facet>\n    <facet name=\"facet-var_Task6d8\">\n      <schema name=\"var_Task6d8\"/>\n    </facet>\n    <facet name=\"facet-var_SerialDocumentReview\">\n      <schema name=\"var_SerialDocumentReview\"/>\n    </facet>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.platform.routing.service\" point=\"routeModelImporter\">\n    <template-resource id=\"ParallelDocumentReview\" path=\"data/ParallelDocumentReview.zip\"/>\n    <template-resource id=\"SerialDocumentReview\" path=\"data/SerialDocumentReview.zip\"/>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\" point=\"filters\">\n    <filter id=\"filter@wf@ParallelDocumentReview\">\n      <rule grant=\"true\">\n        <permission>ReadWrite</permission>\n        <type>Audio</type>\n        <type>File</type>\n        <type>Note</type>\n        <type>Picture</type>\n        <type>Video</type>\n        <condition>#{!currentDocument.locked and currentDocument.currentLifeCycleState != 'approved' and !currentDocument.trashed}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>document.isImmutable()</condition>\n      </rule>\n    </filter>\n    <filter id=\"filter@SerialDocumentReview\">\n      <rule grant=\"true\">\n        <permission>ReadWrite</permission>\n        <type>Audio</type>\n        <type>File</type>\n        <type>Note</type>\n        <type>Picture</type>\n        <type>Video</type>\n        <condition>#{currentDocument.currentLifeCycleState != 'approved' and !currentDocument.trashed}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>document.isImmutable()</condition>\n      </rule>\n    </filter>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/extensions.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-routing-default-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.routing",
      "hierarchyPath": "/grp:org.nuxeo.ecm.routing/grp:org.nuxeo.ecm.platform.routing/org.nuxeo.ecm.platform.routing.default",
      "id": "org.nuxeo.ecm.platform.routing.default",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo ECM Routing Default Workflows\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.routing.default;singleton=tr\r\n ue\r\nBundle-Version: 1.0.0\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/extensions.xml\r\n\r\n",
      "maxResolutionOrder": 568,
      "minResolutionOrder": 568,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "Nuxeo Routing Default\n=====================\n\nThis module defines the default workflow for Nuxeo.\n\n## Information for Nuxeo developers\n\nThis module is adapted from the definition built from the Studio project named `nuxeo-routing-default`.\n\n## Requirements\n\nYou need xmllint installed.\nOn Mac OS X (Yosemite), it is installed by default.\nOn Ubuntu, if it is not already installed, you can run apt-get install libxml2-utils\n\n## Update\n\nChanges in this module should be done in the Studio project to ensure\naccurate synchronization of changes between the Studio project and\nthis code.\n\nHere is the procedure to follow when making changes to files generated\nby Studio:\n\n- make changes in the Studio project, and commit with an accurate\n  description of the changes (references to JIRA issues are very welcome),\n- download the generated jar and unzip it in a temp folder,\n- from this directory, run:\n\n        $ ./etc/update.sh  temp-folder-where-jar-was-unzipped/\n\nIf you need more changes to the generated jar, you should update the\nscript at `etc/update.sh`.\n",
        "digest": "af71d59e8c46125d86ffd22d4ad40bf2",
        "encoding": "UTF-8",
        "length": 1056,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-signature-core",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.signature.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.signature/org.nuxeo.ecm.platform.signature.core/digital.signature.schema/Contributions/digital.signature.schema--schema",
              "id": "digital.signature.schema--schema",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"cert\" src=\"schemas/cert.xsd\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/digital.signature.schema",
          "name": "digital.signature.schema",
          "requirements": [],
          "resolutionOrder": 416,
          "services": [],
          "startOrder": 22,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"digital.signature.schema\">\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"cert\" src=\"schemas/cert.xsd\" />\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.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/digital.signature.directory/Contributions/digital.signature.directory--directories",
              "id": "digital.signature.directory--directories",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"certificate\">\n      <schema>cert</schema>\n      <idField>userid</idField>\n      <passwordField>keypassword</passwordField>\n      <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\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>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/digital.signature.directory",
          "name": "digital.signature.directory",
          "requirements": [],
          "resolutionOrder": 417,
          "services": [],
          "startOrder": 21,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"digital.signature.directory\">\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"certificate\" extends=\"template-directory\">\n      <schema>cert</schema>\n      <idField>userid</idField>\n      <passwordField>keypassword</passwordField>\n      <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\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</component>",
          "xmlFileName": "/OSGI-INF/directory-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.signature.core.pki.RootServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The Root Service is used to configure the root of the Certificate Authority\n    used to sign user certificates\n    @version 1.0\n    @author ws@nuxeo.com\n  \n",
          "documentationHtml": "<p>\nThe Root Service is used to configure the root of the Certificate Authority\nused to sign user certificates\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.signature.api.pki.RootService",
              "descriptors": [
                "org.nuxeo.ecm.platform.signature.core.pki.RootDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.pki.RootService/ExtensionPoints/org.nuxeo.ecm.platform.signature.api.pki.RootService--rootconfig",
              "id": "org.nuxeo.ecm.platform.signature.api.pki.RootService--rootconfig",
              "label": "rootconfig (org.nuxeo.ecm.platform.signature.api.pki.RootService)",
              "name": "rootconfig",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.pki.RootService",
          "name": "org.nuxeo.ecm.platform.signature.api.pki.RootService",
          "requirements": [],
          "resolutionOrder": 418,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.signature.api.pki.RootService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.pki.RootService/Services/org.nuxeo.ecm.platform.signature.api.pki.RootService",
              "id": "org.nuxeo.ecm.platform.signature.api.pki.RootService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 638,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.signature.api.pki.RootService\">\n\n <documentation>\n    The Root Service is used to configure the root of the Certificate Authority\n    used to sign user certificates\n    @version 1.0\n    @author ws@nuxeo.com\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.signature.core.pki.RootServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.signature.api.pki.RootService\" />\n  </service>\n\n  <extension-point name=\"rootconfig\">\n    <object class=\"org.nuxeo.ecm.platform.signature.core.pki.RootDescriptor\" />\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/root-service-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.signature.core.pki.CertServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The Cert Service offers Certificate Authority functionalities\n    like signing CSRs (Certificate Signing Requests), revoking certificates,\n    and also certificate generation capabilities and access to the CA-certificate.\n    @version 1.0\n    @author ws@nuxeo.com\n  \n",
          "documentationHtml": "<p>\nThe Cert Service offers Certificate Authority functionalities\nlike signing CSRs (Certificate Signing Requests), revoking certificates,\nand also certificate generation capabilities and access to the CA-certificate.\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.pki.CertService",
          "name": "org.nuxeo.ecm.platform.signature.api.pki.CertService",
          "requirements": [],
          "resolutionOrder": 419,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.signature.api.pki.CertService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.pki.CertService/Services/org.nuxeo.ecm.platform.signature.api.pki.CertService",
              "id": "org.nuxeo.ecm.platform.signature.api.pki.CertService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 637,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.signature.api.pki.CertService\">\n\n <documentation>\n    The Cert Service offers Certificate Authority functionalities\n    like signing CSRs (Certificate Signing Requests), revoking certificates,\n    and also certificate generation capabilities and access to the CA-certificate.\n    @version 1.0\n    @author ws@nuxeo.com\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.signature.core.pki.CertServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.signature.api.pki.CertService\" />\n  </service>\n\n</component>",
          "xmlFileName": "/OSGI-INF/cert-service-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.signature.core.sign.SignatureServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The signature service offers digital signing capabilities for pdf documents\n    @version 1.0\n    @author ws@nuxeo.com\n  \n",
          "documentationHtml": "<p>\nThe signature service offers digital signing capabilities for pdf documents\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.signature.api.sign.SignatureService",
              "descriptors": [
                "org.nuxeo.ecm.platform.signature.core.sign.SignatureDescriptor"
              ],
              "documentation": "\n      @since 5.8\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n\n      Signature registration.\n      This registration provides configuration of the signature. For layout, numbers of columns, lines, police size and\n      starting (column,line) point. And finally the textual reason of the signature.\n\n      Example of signature configuration:\n\n      <code>\n    <configuration>\n        <reason>This document signed as an example.\n          </reason>\n        <layout columns=\"3\" id=\"configExample\" lines=\"5\" startColumn=\"1\"\n            startLine=\"1\" textSize=\"8\"/>\n    </configuration>\n</code>\n",
              "documentationHtml": "<p>\n&#64;since 5.8\n</p><p>\nSignature registration.\nThis registration provides configuration of the signature. For layout, numbers of columns, lines, police size and\nstarting (column,line) point. And finally the textual reason of the signature.\n</p><p>\nExample of signature configuration:\n</p><p>\n</p><pre><code>    &lt;configuration&gt;\n        &lt;reason&gt;This document signed as an example.\n          &lt;/reason&gt;\n        &lt;layout columns&#61;&#34;3&#34; id&#61;&#34;configExample&#34; lines&#61;&#34;5&#34; startColumn&#61;&#34;1&#34;\n            startLine&#61;&#34;1&#34; textSize&#61;&#34;8&#34;/&gt;\n    &lt;/configuration&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.sign.SignatureService/ExtensionPoints/org.nuxeo.ecm.platform.signature.api.sign.SignatureService--signature",
              "id": "org.nuxeo.ecm.platform.signature.api.sign.SignatureService--signature",
              "label": "signature (org.nuxeo.ecm.platform.signature.api.sign.SignatureService)",
              "name": "signature",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.sign.SignatureService",
          "name": "org.nuxeo.ecm.platform.signature.api.sign.SignatureService",
          "requirements": [],
          "resolutionOrder": 420,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.signature.api.sign.SignatureService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.sign.SignatureService/Services/org.nuxeo.ecm.platform.signature.api.sign.SignatureService",
              "id": "org.nuxeo.ecm.platform.signature.api.sign.SignatureService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 639,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.signature.api.sign.SignatureService\">\n\n  <documentation>\n    The signature service offers digital signing capabilities for pdf documents\n    @version 1.0\n    @author ws@nuxeo.com\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.signature.core.sign.SignatureServiceImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.signature.api.sign.SignatureService\"/>\n  </service>\n\n  <extension-point name=\"signature\">\n    <documentation>\n      @since 5.8\n      @author Vladimir Pasquier (vpasquier@nuxeo.com)\n\n      Signature registration.\n      This registration provides configuration of the signature. For layout, numbers of columns, lines, police size and\n      starting (column,line) point. And finally the textual reason of the signature.\n\n      Example of signature configuration:\n\n      <code>\n        <configuration>\n          <reason>This document signed as an example.\n          </reason>\n          <layout id=\"configExample\" lines=\"5\" columns=\"3\" startLine=\"1\" startColumn=\"1\" textSize=\"8\"/>\n        </configuration>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.signature.core.sign.SignatureDescriptor\"/>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/signature-service-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.signature.core.user.CUserServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The CUserService provides user information that is required for certificate generation.\n    @version 1.0\n    @author ws@nuxeo.com\n  \n",
          "documentationHtml": "<p>\nThe CUserService provides user information that is required for certificate generation.\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.signature.api.user.CUserService",
              "descriptors": [
                "org.nuxeo.ecm.platform.signature.core.user.CUserDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.user.CUserService/ExtensionPoints/org.nuxeo.ecm.platform.signature.api.user.CUserService--cuserdescriptor",
              "id": "org.nuxeo.ecm.platform.signature.api.user.CUserService--cuserdescriptor",
              "label": "cuserdescriptor (org.nuxeo.ecm.platform.signature.api.user.CUserService)",
              "name": "cuserdescriptor",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.user.CUserService",
          "name": "org.nuxeo.ecm.platform.signature.api.user.CUserService",
          "requirements": [],
          "resolutionOrder": 421,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.signature.api.user.CUserService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.api.user.CUserService/Services/org.nuxeo.ecm.platform.signature.api.user.CUserService",
              "id": "org.nuxeo.ecm.platform.signature.api.user.CUserService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 640,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.signature.api.user.CUserService\">\n\n <documentation>\n    The CUserService provides user information that is required for certificate generation.\n    @version 1.0\n    @author ws@nuxeo.com\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.signature.core.user.CUserServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.signature.api.user.CUserService\" />\n  </service>\n\n  <extension-point name=\"cuserdescriptor\">\n    <object class=\"org.nuxeo.ecm.platform.signature.core.user.CUserDescriptor\" />\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/cuser-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.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.core.operations.contrib/Contributions/org.nuxeo.ecm.platform.signature.core.operations.contrib--operations",
              "id": "org.nuxeo.ecm.platform.signature.core.operations.contrib--operations",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.platform.signature.core.operations.SignPDF\"/>\n    <operation class=\"org.nuxeo.ecm.platform.signature.core.operations.SignPDFDocument\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core/org.nuxeo.ecm.platform.signature.core.operations.contrib",
          "name": "org.nuxeo.ecm.platform.signature.core.operations.contrib",
          "requirements": [],
          "resolutionOrder": 422,
          "services": [],
          "startOrder": 374,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.signature.core.operations.contrib\"\n           version=\"1.0\">\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n             point=\"operations\">\n    <operation\n            class=\"org.nuxeo.ecm.platform.signature.core.operations.SignPDF\"/>\n    <operation class=\"org.nuxeo.ecm.platform.signature.core.operations.SignPDFDocument\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/sign-operations-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-signature-core-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.signature/org.nuxeo.ecm.platform.signature.core",
      "id": "org.nuxeo.ecm.platform.signature.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Digital Signature Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.signature.core;singleton:=tr\r\n ue\r\nBundle-Version: 1.0.0\r\nRequire-Bundle:  org.nuxeo.ecm.core,org.nuxeo.ecm.core.api,org.nuxeo.ecm\r\n .platform.signature.api\r\nNuxeo-Require: org.nuxeo.ecm.core,org.nuxeo.ecm.core.schema,org.nuxeo.ec\r\n m.directory,org.nuxeo.ecm.directory.sql\r\nNuxeo-Component: OSGI-INF/schema-contrib.xml,OSGI-INF/directory-contrib.\r\n xml,OSGI-INF/root-service-contrib.xml,OSGI-INF/cert-service-contrib.xml\r\n ,OSGI-INF/signature-service-contrib.xml,OSGI-INF/cuser-service-contrib.\r\n xml,OSGI-INF/sign-operations-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 422,
      "minResolutionOrder": 416,
      "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.ecm.core.schema",
        "org.nuxeo.ecm.directory",
        "org.nuxeo.ecm.directory.sql"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "chemistry-opencmis-client-impl",
      "artifactVersion": "2.0.0",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-bindings",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-impl",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-impl"
        ],
        "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis",
        "id": "grp:org.nuxeo.chemistry.opencmis",
        "name": "org.nuxeo.chemistry.opencmis",
        "parentIds": [],
        "readmes": [],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-impl",
      "components": [],
      "fileName": "chemistry-opencmis-client-impl-2.0.0.jar",
      "groupId": "org.nuxeo.chemistry.opencmis",
      "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis/org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-impl",
      "id": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-impl",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Apache Maven Bundle Plugin\r\nBuilt-By: Kevin.Leturc\r\nBuild-Jdk: 11.0.23\r\nSpecification-Title: OpenCMIS Client Implementation\r\nSpecification-Version: 2.0.0\r\nSpecification-Vendor: Nuxeo\r\nImplementation-URL: http://www.nuxeo.com/en/products/chemistry-opencmis-\r\n client/chemistry-opencmis-client-impl\r\nImplementation-Title: OpenCMIS Client Implementation\r\nImplementation-Vendor: Nuxeo\r\nImplementation-Vendor-Id: org.nuxeo.chemistry.opencmis\r\nImplementation-Version: 2.0.0\r\nX-Apache-SVN-Revision: ${buildNumber}\r\nX-Compile-Source-JDK: 11\r\nX-Compile-Target-JDK: 11\r\nBnd-LastModified: 1717165765049\r\nBundle-Activator: org.apache.chemistry.opencmis.client.osgi.Activator\r\nBundle-Description: Apache Chemistry OpenCMIS is an open source implemen\r\n tation of the OASIS CMIS specification.\r\nBundle-DocURL: http://www.nuxeo.com/en/products/chemistry-opencmis-clien\r\n t/chemistry-opencmis-client-impl\r\nBundle-License: https://www.apache.org/licenses/LICENSE-2.0.txt\r\nBundle-ManifestVersion: 2\r\nBundle-Name: OpenCMIS Client Implementation\r\nBundle-SymbolicName: org.nuxeo.chemistry.opencmis.chemistry-opencmis-cli\r\n ent-impl\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 2.0.0\r\nImport-Package: javax.xml.stream,org.apache.chemistry.opencmis.client;ve\r\n rsion=\"[2.0,3)\",org.apache.chemistry.opencmis.client.api;version=\"[2.0,\r\n 3)\",org.apache.chemistry.opencmis.client.bindings;version=\"[2.0,3)\",org\r\n .apache.chemistry.opencmis.client.bindings.cache;version=\"[2.0,3)\",org.\r\n apache.chemistry.opencmis.client.bindings.spi;version=\"[2.0,3)\",org.apa\r\n che.chemistry.opencmis.commons.data;version=\"[2.0,3)\",org.apache.chemis\r\n try.opencmis.commons.definitions;version=\"[2.0,3)\",org.apache.chemistry\r\n .opencmis.commons.endpoints;version=\"[2.0,3)\",org.apache.chemistry.open\r\n cmis.commons.enums;version=\"[2.0,3)\",org.apache.chemistry.opencmis.comm\r\n ons.exceptions;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.\r\n impl;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.datao\r\n bjects;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.end\r\n points;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.jso\r\n n;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.json.par\r\n ser;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.spi;version\r\n =\"[2.0,3)\",org.osgi.framework;version=\"[1.8,2)\",org.osgi.framework.wiri\r\n ng;version=\"[1.2,2)\",org.slf4j;version=\"[1.7,2)\"\r\nRequire-Capability: osgi.ee;filter:=\"(osgi.ee=UNKNOWN)\"\r\nTool: Bnd-3.3.0.201609221906\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2.0.0"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-storage-mem",
      "artifactVersion": "2025.7.12",
      "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": "2025.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": "2025.7.12"
            }
          ],
          "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": 578,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 590,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.mem\r\nNuxeo-Component: OSGI-INF/mem-repository-service.xml\r\n\r\n",
      "maxResolutionOrder": 578,
      "minResolutionOrder": 578,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-convert-plugins",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.convert.plugins",
      "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.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins/org.nuxeo.ecm.core.convert.plugins/Contributions/org.nuxeo.ecm.core.convert.plugins--converter",
              "id": "org.nuxeo.ecm.core.convert.plugins--converter",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\" name=\"pdf2text\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">pdftotext</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XML2TextConverter\" name=\"xml2text\">\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>application/xml</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.Html2TextConverter\" name=\"html2text\">\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/xhtml</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.MD2TextConverter\" name=\"md2text\">\n      <sourceMimeType>text/x-web-markdown</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XL2TextConverter\" name=\"xl2text\">\n      <sourceMimeType>application/vnd.ms-excel</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XLX2TextConverter\" name=\"xlx2text\">\n      <sourceMimeType>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n       <parameter name=\"MAX_SIZE\">3145728</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.MSOffice2TextConverter\" name=\"msoffice2text\">\n      <sourceMimeType>application/msword</sourceMimeType>\n      <sourceMimeType>application/vnd.ms-powerpoint</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.RTF2TextConverter\" name=\"rtf2text\">\n      <sourceMimeType>application/rtf</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.DOCX2TextConverter\" name=\"docx2text\">\n      <sourceMimeType>application/vnd.openxmlformats-officedocument.wordprocessingml.document</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.PPTX2TextConverter\" name=\"pptx2text\">\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.OOo2TextConverter\" name=\"oo2text\">\n      <sourceMimeType>application/vnd.sun.xml.impress</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress.template</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation-template\n      </sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc.template</sourceMimeType>\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.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.RFC822ToTextConverter\" name=\"rfc822totext\">\n      <destinationMimeType>text/plain</destinationMimeType>\n      <sourceMimeType>message/rfc822</sourceMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.FullTextConverter\" name=\"any2text\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\" name=\"ps2pdf\">\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/eps</sourceMimeType>\n      <sourceMimeType>application/x-eps</sourceMimeType>\n      <sourceMimeType>image/eps</sourceMimeType>\n      <sourceMimeType>image/x-eps</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ps2pdf</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"ps2pdf2text\">\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/eps</sourceMimeType>\n      <sourceMimeType>application/x-eps</sourceMimeType>\n      <sourceMimeType>image/eps</sourceMimeType>\n      <sourceMimeType>image/x-eps</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <conversionSteps>\n        <subconverter>ps2pdf</subconverter>\n        <subconverter>pdf2text</subconverter>\n      </conversionSteps>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins/org.nuxeo.ecm.core.convert.plugins",
          "name": "org.nuxeo.ecm.core.convert.plugins",
          "requirements": [],
          "resolutionOrder": 121,
          "services": [],
          "startOrder": 113,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.convert.plugins\">\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\"\n    point=\"converter\">\n\n    <converter name=\"pdf2text\" class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">pdftotext</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"xml2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XML2TextConverter\">\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>application/xml</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"html2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.Html2TextConverter\">\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/xhtml</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"md2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.MD2TextConverter\">\n      <sourceMimeType>text/x-web-markdown</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"xl2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XL2TextConverter\">\n      <sourceMimeType>application/vnd.ms-excel</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"xlx2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.XLX2TextConverter\">\n      <sourceMimeType>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n       <parameter name=\"MAX_SIZE\">3145728</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"msoffice2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.MSOffice2TextConverter\">\n      <sourceMimeType>application/msword</sourceMimeType>\n      <sourceMimeType>application/vnd.ms-powerpoint</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"rtf2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.RTF2TextConverter\">\n      <sourceMimeType>application/rtf</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"docx2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.DOCX2TextConverter\">\n      <sourceMimeType>application/vnd.openxmlformats-officedocument.wordprocessingml.document</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"pptx2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.PPTX2TextConverter\">\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"oo2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.OOo2TextConverter\">\n      <sourceMimeType>application/vnd.sun.xml.impress</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress.template</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation-template\n      </sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc.template</sourceMimeType>\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.sun.xml.writer</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.writer.template</sourceMimeType>\n      <sourceMimeType>application/vnd.oasis.opendocument.text</sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.text-template\n      </sourceMimeType>\n\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter name=\"rfc822totext\"\n      class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.RFC822ToTextConverter\">\n      <destinationMimeType>text/plain</destinationMimeType>\n      <sourceMimeType>message/rfc822</sourceMimeType>\n    </converter>\n\n    <converter name=\"any2text\" class=\"org.nuxeo.ecm.core.convert.plugins.text.extractors.FullTextConverter\">\n      <sourceMimeType>*</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\" name=\"ps2pdf\">\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/eps</sourceMimeType>\n      <sourceMimeType>application/x-eps</sourceMimeType>\n      <sourceMimeType>image/eps</sourceMimeType>\n      <sourceMimeType>image/x-eps</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">ps2pdf</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"ps2pdf2text\">\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <sourceMimeType>application/eps</sourceMimeType>\n      <sourceMimeType>application/x-eps</sourceMimeType>\n      <sourceMimeType>image/eps</sourceMimeType>\n      <sourceMimeType>image/x-eps</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <conversionSteps>\n        <subconverter>ps2pdf</subconverter>\n        <subconverter>pdf2text</subconverter>\n      </conversionSteps>\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.commandline.executor.service.CommandLineExecutorComponent--command",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins/org.nuxeo.ecm.platform.convert.commandline.pdf2text/Contributions/org.nuxeo.ecm.platform.convert.commandline.pdf2text--command",
              "id": "org.nuxeo.ecm.platform.convert.commandline.pdf2text--command",
              "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": "2025.7.12",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"pdftotext\">\n      <commandLine>pdftotext</commandLine>\n      <parameterString>-enc UTF-8 #{sourceFilePath} #{targetFilePath}</parameterString>\n      <winParameterString>-enc UTF-8 #{sourceFilePath} #{targetFilePath}</winParameterString>\n      <installationDirective>You need to install pdftotext.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ps2pdf\">\n      <commandLine>gs</commandLine>\n      <winCommand>gswin64c</winCommand>\n      <parameterString>-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dEPSCrop -sOutputFile=#{targetFilePath}\n        #{sourceFilePath}</parameterString>\n      <testParameterString>-dNODISPLAY</testParameterString>\n      <installationDirective>You need to install GhostScript.</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins/org.nuxeo.ecm.platform.convert.commandline.pdf2text",
          "name": "org.nuxeo.ecm.platform.convert.commandline.pdf2text",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 261,
          "services": [],
          "startOrder": 249,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.convert.commandline.pdf2text\">\n\n  <require>org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib</require>\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\" point=\"command\">\n\n    <command name=\"pdftotext\" enabled=\"true\">\n      <commandLine>pdftotext</commandLine>\n      <parameterString>-enc UTF-8 #{sourceFilePath} #{targetFilePath}</parameterString>\n      <winParameterString>-enc UTF-8 #{sourceFilePath} #{targetFilePath}</winParameterString>\n      <installationDirective>You need to install pdftotext.</installationDirective>\n    </command>\n\n    <command enabled=\"true\" name=\"ps2pdf\">\n      <commandLine>gs</commandLine>\n      <winCommand>gswin64c</winCommand>\n      <parameterString>-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dEPSCrop -sOutputFile=#{targetFilePath}\n        #{sourceFilePath}</parameterString>\n      <testParameterString>-dNODISPLAY</testParameterString>\n      <installationDirective>You need to install GhostScript.</installationDirective>\n    </command>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/commandline-pdf2text-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-convert-plugins-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.convert/org.nuxeo.ecm.core.convert.plugins",
      "id": "org.nuxeo.ecm.core.convert.plugins",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.core.convert.plugins.text.extractors\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core\r\nBundle-Name: org.nuxeo.ecm.core.convert.plugins\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/convert-service-contrib.xml,OSGI-INF/commandli\r\n ne-pdf2text-contrib.xml\r\nImport-Package: javax.xml.parsers,javax.xml.transform,javax.xml.transfor\r\n m.sax,org.apache.commons.logging,org.apache.poi,org.apache.poi.extracto\r\n r,org.apache.poi.hslf.extractor,org.apache.poi.hssf.usermodel,org.apach\r\n e.poi.hwpf.extractor,org.apache.poi.openxml4j.opc,org.apache.poi.poifs.\r\n filesystem,org.apache.poi.ss.usermodel,org.apache.poi.xssf.usermodel,or\r\n g.apache.xerces.parsers,org.apache.xerces.xni,org.apache.xerces.xni.par\r\n ser,org.apache.xmlbeans,org.cyberneko.html,org.nuxeo.common.utils,org.n\r\n uxeo.ecm.core.api,org.nuxeo.ecm.core.api.blobholder,org.nuxeo.ecm.core.\r\n api.impl.blob,org.nuxeo.ecm.core.convert.api,org.nuxeo.ecm.core.convert\r\n .cache,org.nuxeo.ecm.core.convert.extension,org.nuxeo.runtime.api,org.p\r\n dfbox.pdmodel,org.pdfbox.pdmodel.encryption,org.pdfbox.util,org.xml.sax\r\n ,org.xml.sax.helpers\r\nBundle-SymbolicName: org.nuxeo.ecm.core.convert.plugins;singleton=true\r\n\r\n",
      "maxResolutionOrder": 261,
      "minResolutionOrder": 121,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-resources-rest",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.web.resources.api",
          "org.nuxeo.web.resources.core",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.web.resources.rest",
      "components": [],
      "fileName": "nuxeo-web-resources-rest-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.rest",
      "id": "org.nuxeo.web.resources.rest",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Web Resources REST\r\nBundle-SymbolicName: org.nuxeo.web.resources.rest;singleton:=true\r\nBundle-Localization: plugin\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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-arender-web-ui",
      "artifactVersion": "2025.0.4",
      "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": "2025.7"
      },
      "bundleId": "com.nuxeo.ecm.annotation.arender.web.ui",
      "components": [],
      "fileName": "nuxeo-arender-web-ui-2025.0.4.jar",
      "groupId": "com.nuxeo.arender",
      "hierarchyPath": "/grp:com.nuxeo.arender/grp:com.nuxeo.ecm.annotation.arender/com.nuxeo.ecm.annotation.arender.web.ui",
      "id": "com.nuxeo.ecm.annotation.arender.web.ui",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo ARender Connector Web UI\r\nBundle-SymbolicName: com.nuxeo.ecm.annotation.arender.web.ui;singleton:=\r\n true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [
        "nuxeo-arender"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.0.4"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-osgi",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.osgi",
      "components": [],
      "fileName": "nuxeo-runtime-osgi-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.osgi",
      "id": "org.nuxeo.osgi",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.osgi,org.nuxeo.osgi.application,org.nuxeo.osgi\r\n .application.client,org.nuxeo.osgi.application.loader,org.nuxeo.osgi.se\r\n rvices\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Name: Nuxeo Runtime OSGi Implementation\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.1.qualifier\r\nEclipse-BuddyPolicy: registered\r\nImport-Package: org.apache.commons.logging,org.jboss.deployment;resoluti\r\n on:=optional,org.jboss.logging;resolution:=optional,org.jboss.mx.loadin\r\n g;resolution:=optional,org.jboss.system;resolution:=optional,org.jboss.\r\n system.server;resolution:=optional,org.nuxeo.common,org.nuxeo.common.co\r\n llections,org.nuxeo.common.utils,org.osgi.framework,org.osgi.service.pa\r\n ckageadmin\r\nBundle-SymbolicName: org.nuxeo.osgi;singleton:=true\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-drive-operations",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.drive.core",
          "org.nuxeo.drive.elasticsearch",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.drive.operations",
      "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/grp:org.nuxeo.drive/org.nuxeo.drive.operations/org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation/Contributions/org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation--operations",
              "id": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation--operations",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveGetChangeSummary\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveSetSynchronizationOperation\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveGetTopLevelFolder\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveFileSystemItemExists\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveGetFileSystemItem\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveGetChildren\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveScrollDescendants\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveCreateFolder\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveCreateFile\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveUpdateFile\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveAttachBlob\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveDelete\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveRename\"/>\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveMove\"/>\n    <!-- For test purpose -->\n    <operation class=\"org.nuxeo.drive.operations.test.NuxeoDriveSetupIntegrationTests\"/>\n    <operation class=\"org.nuxeo.drive.operations.test.NuxeoDriveTearDownIntegrationTests\"/>\n    <operation class=\"org.nuxeo.drive.operations.test.NuxeoDriveCreateTestDocuments\"/>\n    <operation class=\"org.nuxeo.drive.operations.test.NuxeoDriveSetActiveFactories\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.operations/org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
          "name": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
          "requirements": [],
          "resolutionOrder": 181,
          "services": [],
          "startOrder": 65,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveGetChangeSummary\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation\" />\n    <operation\n      class=\"org.nuxeo.drive.operations.NuxeoDriveSetSynchronizationOperation\" />\n    <operation\n      class=\"org.nuxeo.drive.operations.NuxeoDriveGetTopLevelFolder\" />\n    <operation\n      class=\"org.nuxeo.drive.operations.NuxeoDriveFileSystemItemExists\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveGetFileSystemItem\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveGetChildren\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveScrollDescendants\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveCreateFolder\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveCreateFile\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveUpdateFile\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveAttachBlob\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveDelete\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveRename\" />\n    <operation class=\"org.nuxeo.drive.operations.NuxeoDriveMove\" />\n    <!-- For test purpose -->\n    <operation\n      class=\"org.nuxeo.drive.operations.test.NuxeoDriveSetupIntegrationTests\" />\n    <operation\n      class=\"org.nuxeo.drive.operations.test.NuxeoDriveTearDownIntegrationTests\" />\n    <operation\n      class=\"org.nuxeo.drive.operations.test.NuxeoDriveCreateTestDocuments\" />\n    <operation\n      class=\"org.nuxeo.drive.operations.test.NuxeoDriveSetActiveFactories\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-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.operations/org.nuxeo.drive.automation.server.bindings/Contributions/org.nuxeo.drive.automation.server.bindings--bindings",
              "id": "org.nuxeo.drive.automation.server.bindings--bindings",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <!-- Protect Nuxeo Drive integration test operations -->\n    <binding name=\"NuxeoDrive.SetupIntegrationTests\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"NuxeoDrive.TearDownIntegrationTests\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"NuxeoDrive.SetVersioningOptions\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"NuxeoDrive.CreateTestDocuments\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"NuxeoDrive.SetActiveFactories\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.operations/org.nuxeo.drive.automation.server.bindings",
          "name": "org.nuxeo.drive.automation.server.bindings",
          "requirements": [],
          "resolutionOrder": 182,
          "services": [],
          "startOrder": 59,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.drive.automation.server.bindings\"\n  version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\"\n    point=\"bindings\">\n    <!-- Protect Nuxeo Drive integration test operations -->\n    <binding name=\"NuxeoDrive.SetupIntegrationTests\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"NuxeoDrive.TearDownIntegrationTests\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"NuxeoDrive.SetVersioningOptions\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"NuxeoDrive.CreateTestDocuments\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"NuxeoDrive.SetActiveFactories\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nuxeodrive-automation-bindings-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-drive-operations-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.operations",
      "id": "org.nuxeo.drive.operations",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Version: 5.7\r\nBundle-Name: org.nuxeo.drive.operations\r\nNuxeo-Component: OSGI-INF/nuxeodrive-operations.xml,OSGI-INF/nuxeodrive-\r\n automation-bindings-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.drive.operations;singleton:=true\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\n\r\n",
      "maxResolutionOrder": 182,
      "minResolutionOrder": 181,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-rendition-publisher",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.rendition.api",
          "org.nuxeo.ecm.platform.rendition.core",
          "org.nuxeo.ecm.platform.rendition.publisher"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.rendition.publisher",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Factory used to publish a Rendition of the given Document.\n    \n",
              "documentationHtml": "<p>\nFactory used to publish a Rendition of the given Document.\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.rendition/org.nuxeo.ecm.platform.rendition.publisher/org.nuxeo.ecm.platform.rendition.publisher/Contributions/org.nuxeo.ecm.platform.rendition.publisher--factory",
              "id": "org.nuxeo.ecm.platform.rendition.publisher--factory",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"factory\" target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n\n    <documentation>\n      Factory used to publish a Rendition of the given Document.\n    </documentation>\n    <publishedDocumentFactory class=\"org.nuxeo.ecm.platform.rendition.publisher.RenditionPublicationFactory\" name=\"RenditionPublication\" validatorsRule=\"CoreValidatorsRule\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      PublicationTree that allows retrieving all the published Rendition documents\n      in addition to the 'standard' proxies for the given document.\n    \n",
              "documentationHtml": "<p>\nPublicationTree that allows retrieving all the published Rendition documents\nin addition to the &#39;standard&#39; proxies for the given document.\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.rendition/org.nuxeo.ecm.platform.rendition.publisher/org.nuxeo.ecm.platform.rendition.publisher/Contributions/org.nuxeo.ecm.platform.rendition.publisher--tree",
              "id": "org.nuxeo.ecm.platform.rendition.publisher--tree",
              "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": "2025.7.12",
              "xml": "<extension point=\"tree\" target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n\n    <documentation>\n      PublicationTree that allows retrieving all the published Rendition documents\n      in addition to the 'standard' proxies for the given document.\n    </documentation>\n    <publicationTree class=\"org.nuxeo.ecm.platform.rendition.publisher.RenditionPublicationCoreTree\" name=\"RenditionPublicationCoreTree\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Override the default PublicationTree used in Nuxeo to use the one handling\n      Rendition documents.\n    \n",
              "documentationHtml": "<p>\nOverride the default PublicationTree used in Nuxeo to use the one handling\nRendition documents.\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.rendition/org.nuxeo.ecm.platform.rendition.publisher/org.nuxeo.ecm.platform.rendition.publisher/Contributions/org.nuxeo.ecm.platform.rendition.publisher--treeInstance",
              "id": "org.nuxeo.ecm.platform.rendition.publisher--treeInstance",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"treeInstance\" target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\">\n\n    <documentation>\n      Override the default PublicationTree used in Nuxeo to use the one handling\n      Rendition documents.\n    </documentation>\n    <publicationTreeConfig factory=\"RenditionPublication\" name=\"DefaultSectionsTree\" title=\"label.publication.tree.local.sections\" tree=\"RenditionPublicationCoreTree\">\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.rendition/org.nuxeo.ecm.platform.rendition.publisher/org.nuxeo.ecm.platform.rendition.publisher",
          "name": "org.nuxeo.ecm.platform.rendition.publisher",
          "requirements": [
            "org.nuxeo.ecm.platform.publisher.task.contrib"
          ],
          "resolutionOrder": 413,
          "services": [],
          "startOrder": 339,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendition.publisher\">\n\n  <require>org.nuxeo.ecm.platform.publisher.task.contrib</require>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"\n    point=\"factory\">\n\n    <documentation>\n      Factory used to publish a Rendition of the given Document.\n    </documentation>\n    <publishedDocumentFactory name=\"RenditionPublication\"\n      class=\"org.nuxeo.ecm.platform.rendition.publisher.RenditionPublicationFactory\"\n      validatorsRule=\"CoreValidatorsRule\" />\n\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"\n    point=\"tree\">\n\n    <documentation>\n      PublicationTree that allows retrieving all the published Rendition documents\n      in addition to the 'standard' proxies for the given document.\n    </documentation>\n    <publicationTree name=\"RenditionPublicationCoreTree\"\n      class=\"org.nuxeo.ecm.platform.rendition.publisher.RenditionPublicationCoreTree\" />\n\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl\"\n    point=\"treeInstance\">\n\n    <documentation>\n      Override the default PublicationTree used in Nuxeo to use the one handling\n      Rendition documents.\n    </documentation>\n    <publicationTreeConfig name=\"DefaultSectionsTree\"\n      tree=\"RenditionPublicationCoreTree\" factory=\"RenditionPublication\"\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/rendition-publisher-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Copies the relations from a replaced proxy to the new\n      proxy.\n    \n",
              "documentationHtml": "<p>\nCopies the relations from a replaced proxy to the new\nproxy.\n</p><p></p>",
              "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.publisher/org.nuxeo.ecm.platform.rendition.publisher.relations.listener/Contributions/org.nuxeo.ecm.platform.rendition.publisher.relations.listener--listener",
              "id": "org.nuxeo.ecm.platform.rendition.publisher.relations.listener--listener",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <documentation>\n      Copies the relations from a replaced proxy to the new\n      proxy.\n    </documentation>\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.relations.core.listener.PublishRelationsListener\" name=\"publishRelationsListener\" postCommit=\"false\" priority=\"50\">\n      <event>renditionProxyPublished</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.publisher/org.nuxeo.ecm.platform.rendition.publisher.relations.listener",
          "name": "org.nuxeo.ecm.platform.rendition.publisher.relations.listener",
          "requirements": [],
          "resolutionOrder": 414,
          "services": [],
          "startOrder": 340,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.rendition.publisher.relations.listener\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <documentation>\n      Copies the relations from a replaced proxy to the new\n      proxy.\n    </documentation>\n\n    <listener name=\"publishRelationsListener\" async=\"false\"\n      postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.relations.core.listener.PublishRelationsListener\"\n      priority=\"50\">\n      <event>renditionProxyPublished</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/rendition-publisher-relations-listener-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-rendition-publisher-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.rendition/org.nuxeo.ecm.platform.rendition.publisher",
      "id": "org.nuxeo.ecm.platform.rendition.publisher",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Platform Rendition Publisher\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.rendition.publisher;singleto\r\n n:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/rendition-publisher-contrib.xml,OSGI-INF/rendi\r\n tion-publisher-relations-listener-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 414,
      "minResolutionOrder": 413,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-mongodb",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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": "2025.7.12"
            }
          ],
          "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"
          ],
          "resolutionOrder": 605,
          "services": [],
          "startOrder": 554,
          "version": "2025.7.12",
          "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\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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo MongoDB Directory\r\nBundle-SymbolicName: org.nuxeo.directory.mongodb;singleton:=true\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/MongoDBDirectoryFactory.xml\r\n\r\n",
      "maxResolutionOrder": 605,
      "minResolutionOrder": 605,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-webengine-invite",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.webengine.base",
          "org.nuxeo.ecm.webengine.core",
          "org.nuxeo.ecm.webengine.invite",
          "org.nuxeo.ecm.webengine.rest"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.webengine",
        "id": "grp:org.nuxeo.ecm.webengine",
        "name": "org.nuxeo.ecm.webengine",
        "parentIds": [],
        "readmes": [],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.webengine.invite",
      "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--openUrl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.invite/org.nuxeo.ecm.user.invite.webengine.auth.contrib/Contributions/org.nuxeo.ecm.user.invite.webengine.auth.contrib--openUrl",
              "id": "org.nuxeo.ecm.user.invite.webengine.auth.contrib--openUrl",
              "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": "2025.7.12",
              "xml": "<extension point=\"openUrl\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <openUrl name=\"RegisterUser_validate\">\n      <grantPattern>/nuxeo/site/userInvitation/validate</grantPattern>\n    </openUrl>\n    <openUrl name=\"RegisterUser_enterpassword\">********<grantPattern>/nuxeo/site/userInvitation/enterpassword/.*</grantPattern>\n    </openUrl>\n    <openUrl name=\"Graphical_Resources\">\n      <grantPattern>/nuxeo/site/skin/invite/.*</grantPattern>\n    </openUrl>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.invite/org.nuxeo.ecm.user.invite.webengine.auth.contrib",
          "name": "org.nuxeo.ecm.user.invite.webengine.auth.contrib",
          "requirements": [],
          "resolutionOrder": 679,
          "services": [],
          "startOrder": 464,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.user.invite.webengine.auth.contrib\">\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n      point=\"openUrl\">\n    <openUrl name=\"RegisterUser_validate\">\n      <grantPattern>${org.nuxeo.ecm.contextPath}/site/userInvitation/validate</grantPattern>\n    </openUrl>\n    <openUrl name=\"RegisterUser_enterpassword\">********<grantPattern>${org.nuxeo.ecm.contextPath}/site/userInvitation/enterpassword/.*</grantPattern>\n    </openUrl>\n    <openUrl name=\"Graphical_Resources\">\n      <grantPattern>${org.nuxeo.ecm.contextPath}/site/skin/invite/.*</grantPattern>\n    </openUrl>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/invite-auth-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-webengine-invite-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.webengine",
      "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.invite",
      "id": "org.nuxeo.ecm.webengine.invite",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo User WebEngine Invite\r\nBundle-SymbolicName: org.nuxeo.ecm.webengine.invite;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\nNuxeo-WebModule: org.nuxeo.ecm.webengine.app.WebEngineModule;name=invite\r\n ;extends=base;headless=true\r\nNuxeo-AllowOverride: true\r\nNuxeo-Component: OSGI-INF/invite-auth-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 679,
      "minResolutionOrder": 679,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-relations-core-listener",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.relations.core.listener",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Deletes existing relations on a document when it is removed.\n    \n",
              "documentationHtml": "<p>\nDeletes existing relations on a document when it is removed.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.core.listener/org.nuxeo.ecm.relations.core.listener/Contributions/org.nuxeo.ecm.relations.core.listener--listener",
              "id": "org.nuxeo.ecm.relations.core.listener--listener",
              "registrationOrder": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <documentation>\n      Deletes existing relations on a document when it is removed.\n    </documentation>\n\n    <!-- NXP-4951: disable this listener for most common use cases -->\n    <!--\n      <listener name=\"publishRelationsListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.relations.core.listener.PublishRelationsListener\"\n      priority=\"-50\">\n      <event>documentProxyPublished</event>\n      </listener>\n    -->\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.relations.core.listener.DeleteRelationsListener\" name=\"deleteRelationsListener\" postCommit=\"false\" priority=\"-40\">\n      <event>documentRemoved</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.core.listener/org.nuxeo.ecm.relations.core.listener",
          "name": "org.nuxeo.ecm.relations.core.listener",
          "requirements": [],
          "resolutionOrder": 395,
          "services": [],
          "startOrder": 445,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.relations.core.listener\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <documentation>\n      Deletes existing relations on a document when it is removed.\n    </documentation>\n\n    <!-- NXP-4951: disable this listener for most common use cases -->\n    <!--\n      <listener name=\"publishRelationsListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.relations.core.listener.PublishRelationsListener\"\n      priority=\"-50\">\n      <event>documentProxyPublished</event>\n      </listener>\n    -->\n\n    <listener name=\"deleteRelationsListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.relations.core.listener.DeleteRelationsListener\"\n      priority=\"-40\">\n      <event>documentRemoved</event>\n    </listener>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/relations-core-listener-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-relations-core-listener-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.core.listener",
      "id": "org.nuxeo.ecm.relations.core.listener",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Relations Core Listener\r\nBundle-SymbolicName: org.nuxeo.ecm.relations.core.listener;singleton:=tr\r\n ue\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: stateful\r\nRequire-Bundle: org.nuxeo.ecm.core,org.nuxeo.ecm.core.event,org.nuxeo.ec\r\n m.relations\r\nNuxeo-Component: OSGI-INF/relations-core-listener-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 395,
      "minResolutionOrder": 395,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core",
        "org.nuxeo.ecm.core.event",
        "org.nuxeo.ecm.relations"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-ldap",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.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": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"healthCheck\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n     <probe enabled=\"true\" name=\"ldapDirectories\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.ldap/org.nuxeo.ecm.directory.ldap.management",
          "name": "org.nuxeo.ecm.directory.ldap.management",
          "requirements": [],
          "resolutionOrder": 301,
          "services": [],
          "startOrder": 176,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.directory.ldap.management\">\n\n <extension\n    target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\"\n    point=\"probes\">\n         <probe name=\"ldapDirectories\"\n                  class=\"org.nuxeo.ecm.directory.ldap.management.LDAPDirectoriesProbe\">\n            <label>LDAP probe</label>\n            <description>Test access on each declared LDAP Directory</description>\n         </probe>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\" point=\"healthCheck\">\n     <probe name=\"ldapDirectories\" enabled=\"true\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/management-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory",
          "declaredStartOrder": null,
          "documentation": "\n    The LDAPDirectoryFactory component provides implementation of the\n    Directory API using an external LDAP server as storage backend,\n    typically to fetch users and groups data check password based\n    authentication.\n\n    @author Olivier Grisel (ogrisel@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe LDAPDirectoryFactory component provides implementation of the\nDirectory API using an external LDAP server as storage backend,\ntypically to fetch users and groups data check password based\nauthentication.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory",
              "descriptors": [
                "org.nuxeo.ecm.directory.ldap.LDAPServerDescriptor"
              ],
              "documentation": "\n      The servers extension point is used to register network connection\n      parameters to a pool of LDAP servers.\n\n      Examples:\n\n      <code>\n    <server name=\"default\">\n        <ldapUrl>ldap://localhost:389</ldapUrl>\n        <ldapUrl>ldap://server2:389</ldapUrl>\n        <ldapUrl>ldaps://server3:389</ldapUrl>\n        <!-- LDAP SRV DNS resolution on _ldap._tcp.example.com -->\n        <ldapUrl>ldap:///dc=example,dc=com</ldapUrl>\n        <!-- LDAP SRV DNS resolution on _gc._tcp.example.com -->\n        <ldapUrl srvPrefix=\"_gc._tcp\">ldap:///dc=example,dc=com</ldapUrl>\n        <connectionTimeout>10000</connectionTimeout>\n        <retries>5</retries>\n        <poolingEnabled>true</poolingEnabled>\n        <poolingConnectionTimeout>60000</poolingConnectionTimeout>\n        <verifyServerCert>true</verifyServerCert>\n        <bindDn>cn=nuxeo5,ou=applications,dc=example,dc=com</bindDn>\n        <bindPassword>changeme</bindPassword>\n    </server>\n</code>\n\n\n      The ldapUrl tags point to server (IP address or DNS name) and\n      ports. If more than one is provided, the Nuxeo EP will use a pool\n      of load balanced connections to each server. They are assumed to\n      be replicated versions of a master server that should belong to\n      the list.\n\n      The connectionTimeout element specifies a connection timeout in milliseconds.\n      The default is 10000.\n\n      The retries element indicates how many times the request will be retried\n      if LDAP server returns a ServiceUnavailableException. The default is 5.\n\n      The poolingEnabled element specifies whether to use LDAP connection pooling.\n      The default is true.\n\n      The poolingTimeout element specifies, in milliseconds, how long a connection\n      may remain in the pool when LDAP connection pooling is enabled.\n      The default is 60000.\n\n      The verifyServerCert element specifies whether, in SSL mode, all certificates\n      should be checked. This should only be disabled when testing with test server\n      having self-signed certificates. The default is true.\n\n      The bindDn and bindPassword credentials are used by Nuxeo EP to\n      access the content of the LDAP servers. It should have the read\n      permission to any entry that is to be used by Nuxeo EP and write\n      right to branches were Nuxeo EP is supposed to create or edit\n      entries.\n\n      For instance, in OpenLDAP you should have ACLs such as:\n\n      <code>\n        access to attrs=\"userPassword\"\n        by dn=\"cn=ldapadmin,dc=example,dc=com\" write\n        by dn=\"cn=nuxeo5,ou=applications,dc=example,dc=com\" write\n        by anonymous auth\n        by self write\n        by * none\n\n        access to dn.base=\"\" by * read\n\n        # nuxeo5 can manage the ou=people branch\n        access to dn.subtree=\"ou=people,dc=example,dc=com\"\n        by dn=\"cn=nuxeo5,ou=applications,dc=example,dc=com\" write\n        by users read\n        by self write\n        by * none\n\n        access to dn.subtree=\"ou=groups,dc=example,dc=com\"\n        by dn=\"cn=nuxeo5,ou=applications,dc=example,dc=com\" write\n        by users read\n        by self write\n        by * none\n\n        # The admin dn has full write access\n        # other\n        access to *\n        by dn=\"cn=ldapadmin,dc=example,dc=com\" write\n        by users read\n        by * none\n      </code>\n\n\n      User authentication is done using a bind method against the user\n      provided login and password from the login form and not the bindDn\n      / bindPassword credentials.\n    \n",
              "documentationHtml": "<p>\nThe servers extension point is used to register network connection\nparameters to a pool of LDAP servers.\n</p><p>\nExamples:\n</p><p>\n</p><pre><code>    &lt;server name&#61;&#34;default&#34;&gt;\n        &lt;ldapUrl&gt;ldap://localhost:389&lt;/ldapUrl&gt;\n        &lt;ldapUrl&gt;ldap://server2:389&lt;/ldapUrl&gt;\n        &lt;ldapUrl&gt;ldaps://server3:389&lt;/ldapUrl&gt;\n        &lt;!-- LDAP SRV DNS resolution on _ldap._tcp.example.com --&gt;\n        &lt;ldapUrl&gt;ldap:///dc&#61;example,dc&#61;com&lt;/ldapUrl&gt;\n        &lt;!-- LDAP SRV DNS resolution on _gc._tcp.example.com --&gt;\n        &lt;ldapUrl srvPrefix&#61;&#34;_gc._tcp&#34;&gt;ldap:///dc&#61;example,dc&#61;com&lt;/ldapUrl&gt;\n        &lt;connectionTimeout&gt;10000&lt;/connectionTimeout&gt;\n        &lt;retries&gt;5&lt;/retries&gt;\n        &lt;poolingEnabled&gt;true&lt;/poolingEnabled&gt;\n        &lt;poolingConnectionTimeout&gt;60000&lt;/poolingConnectionTimeout&gt;\n        &lt;verifyServerCert&gt;true&lt;/verifyServerCert&gt;\n        &lt;bindDn&gt;cn&#61;nuxeo5,ou&#61;applications,dc&#61;example,dc&#61;com&lt;/bindDn&gt;\n        &lt;bindPassword&gt;changeme&lt;/bindPassword&gt;\n    &lt;/server&gt;\n</code></pre><p>\nThe ldapUrl tags point to server (IP address or DNS name) and\nports. If more than one is provided, the Nuxeo EP will use a pool\nof load balanced connections to each server. They are assumed to\nbe replicated versions of a master server that should belong to\nthe list.\n</p><p>\nThe connectionTimeout element specifies a connection timeout in milliseconds.\nThe default is 10000.\n</p><p>\nThe retries element indicates how many times the request will be retried\nif LDAP server returns a ServiceUnavailableException. The default is 5.\n</p><p>\nThe poolingEnabled element specifies whether to use LDAP connection pooling.\nThe default is true.\n</p><p>\nThe poolingTimeout element specifies, in milliseconds, how long a connection\nmay remain in the pool when LDAP connection pooling is enabled.\nThe default is 60000.\n</p><p>\nThe verifyServerCert element specifies whether, in SSL mode, all certificates\nshould be checked. This should only be disabled when testing with test server\nhaving self-signed certificates. The default is true.\n</p><p>\nThe bindDn and bindPassword credentials are used by Nuxeo EP to\naccess the content of the LDAP servers. It should have the read\npermission to any entry that is to be used by Nuxeo EP and write\nright to branches were Nuxeo EP is supposed to create or edit\nentries.\n</p><p>\nFor instance, in OpenLDAP you should have ACLs such as:\n</p><p>\n</p><pre><code>        access to attrs&#61;&#34;userPassword&#34;\n        by dn&#61;&#34;cn&#61;ldapadmin,dc&#61;example,dc&#61;com&#34; write\n        by dn&#61;&#34;cn&#61;nuxeo5,ou&#61;applications,dc&#61;example,dc&#61;com&#34; write\n        by anonymous auth\n        by self write\n        by * none\n\n        access to dn.base&#61;&#34;&#34; by * read\n\n        # nuxeo5 can manage the ou&#61;people branch\n        access to dn.subtree&#61;&#34;ou&#61;people,dc&#61;example,dc&#61;com&#34;\n        by dn&#61;&#34;cn&#61;nuxeo5,ou&#61;applications,dc&#61;example,dc&#61;com&#34; write\n        by users read\n        by self write\n        by * none\n\n        access to dn.subtree&#61;&#34;ou&#61;groups,dc&#61;example,dc&#61;com&#34;\n        by dn&#61;&#34;cn&#61;nuxeo5,ou&#61;applications,dc&#61;example,dc&#61;com&#34; write\n        by users read\n        by self write\n        by * none\n\n        # The admin dn has full write access\n        # other\n        access to *\n        by dn&#61;&#34;cn&#61;ldapadmin,dc&#61;example,dc&#61;com&#34; write\n        by users read\n        by * none\n</code></pre><p>\nUser authentication is done using a bind method against the user\nprovided login and password from the login form and not the bindDn\n/ bindPassword credentials.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.ldap/org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory/ExtensionPoints/org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory--servers",
              "id": "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory--servers",
              "label": "servers (org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory)",
              "name": "servers",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory",
              "descriptors": [
                "org.nuxeo.ecm.directory.ldap.LDAPDirectoryDescriptor"
              ],
              "documentation": "\n      The directories extension point is used to register LDAP filtering\n      parameters to identify which part of the LDAP branches are actually\n      used by Nuxeo EP to fetch its entries.\n\n      Examples:\n\n      <code>\n    <directory name=\"userDirectory\">\n        <server>default</server>\n        <schema>user</schema>\n        <types>\n            <type>system</type>\n        </types>\n        <idField>username</idField>\n        <idCase>unchanged</idCase>\n        <passwordField>password</passwordField>\n        <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\n        <searchBaseDn>ou=people,dc=example,dc=com</searchBaseDn>\n        <searchClass>person</searchClass>\n        <searchFilter>(&amp;(sn=toto*)(myCustomAttribute=somevalue))</searchFilter>\n        <searchScope>onelevel</searchScope>\n        <readOnly>false</readOnly>\n        <cacheTimeout>3600</cacheTimeout>\n        <cacheMaxSize>1000</cacheMaxSize>\n        <creationBaseDn>ou=people,dc=example,dc=com</creationBaseDn>\n        <creationClass>top</creationClass>\n        <creationClass>person</creationClass>\n        <creationClass>organizationalPerson</creationClass>\n        <creationClass>inetOrgPerson</creationClass>\n        <rdnAttribute>uid</rdnAttribute>\n        <querySizeLimit>200</querySizeLimit>\n        <queryTimeLimit>0</queryTimeLimit>\n        <fieldMapping name=\"username\">uid</fieldMapping>\n        <fieldMapping name=\"password\">userPassword</fieldMapping>\n        <fieldMapping name=\"firstName\">givenName</fieldMapping>\n        <fieldMapping name=\"lastName\">sn</fieldMapping>\n        <fieldMapping name=\"company\">o</fieldMapping>\n        <fieldMapping name=\"email\">mail</fieldMapping>\n        <references>\n            <inverseReference directory=\"groupDirectory\"\n                dualReferenceField=\"members\" field=\"groups\"/>\n        </references>\n    </directory>\n    <directory name=\"groupDirectory\">\n        <server>default</server>\n        <schema>group</schema>\n        <idField>groupname</idField>\n        <searchBaseDn>ou=groups,dc=example,dc=com</searchBaseDn>\n        <searchFilter>(|(objectClass=groupOfUniqueNames)(objectClass=groupOfURLs))</searchFilter>\n        <searchScope>subtree</searchScope>\n        <!-- Special entry adaptor that makes entries in the ou=editable branch editable\n          other entries have the readonly flag. This require adding a \"dn\" xs:string field\n          to the group schema.\n          -->\n        <entryAdaptor class=\"org.nuxeo.ecm.directory.impl.WritePolicyEntryAdaptor\">\n            <parameter name=\"fieldName\">dn</parameter>\n            <parameter name=\"regexp\">.*,ou=editable,ou=groups,dc=example,dc=com</parameter>\n        </entryAdaptor>\n        <readOnly>false</readOnly>\n        <cacheTimeout>3600</cacheTimeout>\n        <cacheMaxSize>1000</cacheMaxSize>\n        <creationBaseDn>ou=editable,ou=groups,dc=example,dc=com</creationBaseDn>\n        <creationClass>top</creationClass>\n        <creationClass>groupOfUniqueNames</creationClass>\n        <rdnAttribute>cn</rdnAttribute>\n        <querySizeLimit>200</querySizeLimit>\n        <queryTimeLimit>0</queryTimeLimit>\n        <fieldMapping name=\"groupname\">cn</fieldMapping>\n        <references>\n            <!-- LDAP reference resolve DNs embedded in uniqueMember attributes\n\n              If the target directory has no specific filtering policy, it is most\n              of the time not necessary to enable the 'forceDnConsistencyCheck' policy.\n\n              Enabling this option will fetch each reference entry to ensure its\n              existence in the target directory.\n            -->\n            <ldapReference directory=\"userDirectory\"\n                dynamicAttributeId=\"memberURL\" field=\"members\"\n                forceDnConsistencyCheck=\"false\"\n                staticAttributeId=\"uniqueMember\" staticAttributeIdIsDn=\"true\"/>\n            <ldapReference directory=\"groupDirectory\"\n                dynamicAttributeId=\"memberURL\" field=\"subGroups\"\n                forceDnConsistencyCheck=\"false\" staticAttributeId=\"uniqueMember\"/>\n            <inverseReference directory=\"groupDirectory\"\n                dualReferenceField=\"subGroups\" field=\"parentGroups\"/>\n            <ldapTreeReference directory=\"groupDirectory\"\n                field=\"children\" scope=\"onelevel\"/>\n            <inverseReference directory=\"groupDirectory\"\n                dualReferenceField=\"children\" field=\"parents\"/>\n        </references>\n    </directory>\n</code>\n\n\n      In the previous examples we configured two directories one for the\n      users and one for the groups of users. Each directory uses a\n      single schema which is to be registered as any core document\n      schema and that will be used to build a DocumentModel for each\n      matching entry of the directory.\n\n\n      Nuxeo EP provides group resolution for statically dn-referenced\n      entries (in read and write mode) and for dynamically ldapUrl\n      matched entries (readonly). You may also need to statically\n      reference entries without a dn using the 'staticAttributeIdIsDn'\n      attribute.\n\n      The references tags are used to dynamically build nxs:stringList\n      fields of that schema that are to compute membership relationships\n      between users and groups or between parent groups and sub groups.\n      It can also resole children and parents following the ldap tree\n      structure.\n\n      You have two ways for declaring a dynamic reference in a 'references' tag.\n      You can use 'dynamicAttributeId' to point to an ldap attribute that\n      contains an ldap url.\n\n      <code>\n    <ldapReference directory=\"userDirectory\"\n        dynamicAttributeId=\"memberURL\" field=\"members\"/>\n</code>\n\n\n      Or, you can use a subtag 'dynamicReference' to declare attributes that\n      contain a DN, a filter and a type. This values will be used to selected\n      the references.\n\n      <code>\n    <ldapReference directory=\"userDirectory\" field=\"members\"/>\n    <dynamicReference baseDN=\"ldapAttribute\" filter=\"ldapAttribute\" type=\"subtree/onelevel\"/>\n    <ldapReference/>\n</code>\n\n\n      When using dynamic references, caching is advised since dynamic group\n      resolution can be expensive.\n\n      The element \"idCase\" makes it possible to control the case of the\n      identifier on Nuxeo side. It accepts values \"upper\", \"lower\" or\n      \"unchanged\". It is useful when changing case on the LDAP without affecting\n      Nuxeo (for rights management for instance which is case sensitive for\n      instance).\n\n\n      Dependening on your LDAP Backend implementation, if you have some specific restriction\n      (for example on password, or logins ...), you may want Nuxeo to handle the validation\n      errors of your server on the Nuxeo side.\n\n      Since there error code and message may vary  depending on the LDAP server provider, you\n      may need to provide a custom class that knows how to handle the Exceptions returned by it.\n\n      For this you can specify a class that will be in charge of this task.\n      <code>\n    <ldapExceptionHandler>org.nuxeo.ecm.directory.ldap.DefaultLdapExceptionProcessor</ldapExceptionHandler>\n</code>\n\n      This class should implement org.nuxeo.ecm.directory.ldap.LdapExceptionProcessor and return\n      a RecoverableClientException for any exception that should be displayed to the user.\n\n\n      By default, referrals will be automatically resolved, if you don't want that behavior (since 5.9.4) you can use the followReferrals tag\n\n      <code>\n    <directory name=\"groupDirectory\">\n           ....\n           <followReferrals>false</followReferrals>\n           ...\n        </directory>\n</code>\n",
              "documentationHtml": "<p>\nThe directories extension point is used to register LDAP filtering\nparameters to identify which part of the LDAP branches are actually\nused by Nuxeo EP to fetch its entries.\n</p><p>\nExamples:\n</p><p>\n</p><pre><code>    &lt;directory name&#61;&#34;userDirectory&#34;&gt;\n        &lt;server&gt;default&lt;/server&gt;\n        &lt;schema&gt;user&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;idCase&gt;unchanged&lt;/idCase&gt;\n        &lt;passwordField&gt;password&lt;/passwordField&gt;\n        &lt;passwordHashAlgorithm&gt;SSHA&lt;/passwordHashAlgorithm&gt;\n        &lt;searchBaseDn&gt;ou&#61;people,dc&#61;example,dc&#61;com&lt;/searchBaseDn&gt;\n        &lt;searchClass&gt;person&lt;/searchClass&gt;\n        &lt;searchFilter&gt;(&amp;amp;(sn&#61;toto*)(myCustomAttribute&#61;somevalue))&lt;/searchFilter&gt;\n        &lt;searchScope&gt;onelevel&lt;/searchScope&gt;\n        &lt;readOnly&gt;false&lt;/readOnly&gt;\n        &lt;cacheTimeout&gt;3600&lt;/cacheTimeout&gt;\n        &lt;cacheMaxSize&gt;1000&lt;/cacheMaxSize&gt;\n        &lt;creationBaseDn&gt;ou&#61;people,dc&#61;example,dc&#61;com&lt;/creationBaseDn&gt;\n        &lt;creationClass&gt;top&lt;/creationClass&gt;\n        &lt;creationClass&gt;person&lt;/creationClass&gt;\n        &lt;creationClass&gt;organizationalPerson&lt;/creationClass&gt;\n        &lt;creationClass&gt;inetOrgPerson&lt;/creationClass&gt;\n        &lt;rdnAttribute&gt;uid&lt;/rdnAttribute&gt;\n        &lt;querySizeLimit&gt;200&lt;/querySizeLimit&gt;\n        &lt;queryTimeLimit&gt;0&lt;/queryTimeLimit&gt;\n        &lt;fieldMapping name&#61;&#34;username&#34;&gt;uid&lt;/fieldMapping&gt;\n        &lt;fieldMapping name&#61;&#34;password&#34;&gt;userPassword&lt;/fieldMapping&gt;\n        &lt;fieldMapping name&#61;&#34;firstName&#34;&gt;givenName&lt;/fieldMapping&gt;\n        &lt;fieldMapping name&#61;&#34;lastName&#34;&gt;sn&lt;/fieldMapping&gt;\n        &lt;fieldMapping name&#61;&#34;company&#34;&gt;o&lt;/fieldMapping&gt;\n        &lt;fieldMapping name&#61;&#34;email&#34;&gt;mail&lt;/fieldMapping&gt;\n        &lt;references&gt;\n            &lt;inverseReference directory&#61;&#34;groupDirectory&#34;\n                dualReferenceField&#61;&#34;members&#34; field&#61;&#34;groups&#34;/&gt;\n        &lt;/references&gt;\n    &lt;/directory&gt;\n    &lt;directory name&#61;&#34;groupDirectory&#34;&gt;\n        &lt;server&gt;default&lt;/server&gt;\n        &lt;schema&gt;group&lt;/schema&gt;\n        &lt;idField&gt;groupname&lt;/idField&gt;\n        &lt;searchBaseDn&gt;ou&#61;groups,dc&#61;example,dc&#61;com&lt;/searchBaseDn&gt;\n        &lt;searchFilter&gt;(|(objectClass&#61;groupOfUniqueNames)(objectClass&#61;groupOfURLs))&lt;/searchFilter&gt;\n        &lt;searchScope&gt;subtree&lt;/searchScope&gt;\n        &lt;!-- Special entry adaptor that makes entries in the ou&#61;editable branch editable\n          other entries have the readonly flag. This require adding a &#34;dn&#34; xs:string field\n          to the group schema.\n          --&gt;\n        &lt;entryAdaptor class&#61;&#34;org.nuxeo.ecm.directory.impl.WritePolicyEntryAdaptor&#34;&gt;\n            &lt;parameter name&#61;&#34;fieldName&#34;&gt;dn&lt;/parameter&gt;\n            &lt;parameter name&#61;&#34;regexp&#34;&gt;.*,ou&#61;editable,ou&#61;groups,dc&#61;example,dc&#61;com&lt;/parameter&gt;\n        &lt;/entryAdaptor&gt;\n        &lt;readOnly&gt;false&lt;/readOnly&gt;\n        &lt;cacheTimeout&gt;3600&lt;/cacheTimeout&gt;\n        &lt;cacheMaxSize&gt;1000&lt;/cacheMaxSize&gt;\n        &lt;creationBaseDn&gt;ou&#61;editable,ou&#61;groups,dc&#61;example,dc&#61;com&lt;/creationBaseDn&gt;\n        &lt;creationClass&gt;top&lt;/creationClass&gt;\n        &lt;creationClass&gt;groupOfUniqueNames&lt;/creationClass&gt;\n        &lt;rdnAttribute&gt;cn&lt;/rdnAttribute&gt;\n        &lt;querySizeLimit&gt;200&lt;/querySizeLimit&gt;\n        &lt;queryTimeLimit&gt;0&lt;/queryTimeLimit&gt;\n        &lt;fieldMapping name&#61;&#34;groupname&#34;&gt;cn&lt;/fieldMapping&gt;\n        &lt;references&gt;\n            &lt;!-- LDAP reference resolve DNs embedded in uniqueMember attributes\n\n              If the target directory has no specific filtering policy, it is most\n              of the time not necessary to enable the &#39;forceDnConsistencyCheck&#39; policy.\n\n              Enabling this option will fetch each reference entry to ensure its\n              existence in the target directory.\n            --&gt;\n            &lt;ldapReference directory&#61;&#34;userDirectory&#34;\n                dynamicAttributeId&#61;&#34;memberURL&#34; field&#61;&#34;members&#34;\n                forceDnConsistencyCheck&#61;&#34;false&#34;\n                staticAttributeId&#61;&#34;uniqueMember&#34; staticAttributeIdIsDn&#61;&#34;true&#34;/&gt;\n            &lt;ldapReference directory&#61;&#34;groupDirectory&#34;\n                dynamicAttributeId&#61;&#34;memberURL&#34; field&#61;&#34;subGroups&#34;\n                forceDnConsistencyCheck&#61;&#34;false&#34; staticAttributeId&#61;&#34;uniqueMember&#34;/&gt;\n            &lt;inverseReference directory&#61;&#34;groupDirectory&#34;\n                dualReferenceField&#61;&#34;subGroups&#34; field&#61;&#34;parentGroups&#34;/&gt;\n            &lt;ldapTreeReference directory&#61;&#34;groupDirectory&#34;\n                field&#61;&#34;children&#34; scope&#61;&#34;onelevel&#34;/&gt;\n            &lt;inverseReference directory&#61;&#34;groupDirectory&#34;\n                dualReferenceField&#61;&#34;children&#34; field&#61;&#34;parents&#34;/&gt;\n        &lt;/references&gt;\n    &lt;/directory&gt;\n</code></pre><p>\nIn the previous examples we configured two directories one for the\nusers and one for the groups of users. Each directory uses a\nsingle schema which is to be registered as any core document\nschema and that will be used to build a DocumentModel for each\nmatching entry of the directory.\n</p><p>\nNuxeo EP provides group resolution for statically dn-referenced\nentries (in read and write mode) and for dynamically ldapUrl\nmatched entries (readonly). You may also need to statically\nreference entries without a dn using the &#39;staticAttributeIdIsDn&#39;\nattribute.\n</p><p>\nThe references tags are used to dynamically build nxs:stringList\nfields of that schema that are to compute membership relationships\nbetween users and groups or between parent groups and sub groups.\nIt can also resole children and parents following the ldap tree\nstructure.\n</p><p>\nYou have two ways for declaring a dynamic reference in a &#39;references&#39; tag.\nYou can use &#39;dynamicAttributeId&#39; to point to an ldap attribute that\ncontains an ldap url.\n</p><p>\n</p><pre><code>    &lt;ldapReference directory&#61;&#34;userDirectory&#34;\n        dynamicAttributeId&#61;&#34;memberURL&#34; field&#61;&#34;members&#34;/&gt;\n</code></pre><p>\nOr, you can use a subtag &#39;dynamicReference&#39; to declare attributes that\ncontain a DN, a filter and a type. This values will be used to selected\nthe references.\n</p><p>\n</p><pre><code>    &lt;ldapReference directory&#61;&#34;userDirectory&#34; field&#61;&#34;members&#34;/&gt;\n    &lt;dynamicReference baseDN&#61;&#34;ldapAttribute&#34; filter&#61;&#34;ldapAttribute&#34; type&#61;&#34;subtree/onelevel&#34;/&gt;\n    &lt;ldapReference/&gt;\n</code></pre><p>\nWhen using dynamic references, caching is advised since dynamic group\nresolution can be expensive.\n</p><p>\nThe element &#34;idCase&#34; makes it possible to control the case of the\nidentifier on Nuxeo side. It accepts values &#34;upper&#34;, &#34;lower&#34; or\n&#34;unchanged&#34;. It is useful when changing case on the LDAP without affecting\nNuxeo (for rights management for instance which is case sensitive for\ninstance).\n</p><p>\nDependening on your LDAP Backend implementation, if you have some specific restriction\n(for example on password, or logins ...), you may want Nuxeo to handle the validation\nerrors of your server on the Nuxeo side.\n</p><p>\nSince there error code and message may vary  depending on the LDAP server provider, you\nmay need to provide a custom class that knows how to handle the Exceptions returned by it.\n</p><p>\nFor this you can specify a class that will be in charge of this task.\n</p><p></p><pre><code>    &lt;ldapExceptionHandler&gt;org.nuxeo.ecm.directory.ldap.DefaultLdapExceptionProcessor&lt;/ldapExceptionHandler&gt;\n</code></pre><p>\nThis class should implement org.nuxeo.ecm.directory.ldap.LdapExceptionProcessor and return\na RecoverableClientException for any exception that should be displayed to the user.\n</p><p>\nBy default, referrals will be automatically resolved, if you don&#39;t want that behavior (since 5.9.4) you can use the followReferrals tag\n</p><p>\n</p><pre><code>    &lt;directory name&#61;&#34;groupDirectory&#34;&gt;\n           ....\n           &lt;followReferrals&gt;false&lt;/followReferrals&gt;\n           ...\n        &lt;/directory&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.ldap/org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory/ExtensionPoints/org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory--directories",
              "id": "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory--directories",
              "label": "directories (org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory)",
              "name": "directories",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.ldap/org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory",
          "name": "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory",
          "requirements": [
            "org.nuxeo.ecm.directory.DirectoryServiceImpl"
          ],
          "resolutionOrder": 587,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.ldap/org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory/Services/org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory",
              "id": "org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 598,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory\">\n\n  <require>org.nuxeo.ecm.directory.DirectoryServiceImpl</require>\n\n  <documentation>\n    The LDAPDirectoryFactory component provides implementation of the\n    Directory API using an external LDAP server as storage backend,\n    typically to fetch users and groups data check password based\n    authentication.\n\n    @author Olivier Grisel (ogrisel@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.directory.ldap.LDAPDirectoryFactory\"/>\n  </service>\n\n  <extension-point name=\"servers\">\n    <documentation>\n      The servers extension point is used to register network connection\n      parameters to a pool of LDAP servers.\n\n      Examples:\n\n      <code>\n        <server name=\"default\">\n          <ldapUrl>ldap://localhost:389</ldapUrl>\n          <ldapUrl>ldap://server2:389</ldapUrl>\n          <ldapUrl>ldaps://server3:389</ldapUrl>\n\n          <!-- LDAP SRV DNS resolution on _ldap._tcp.example.com -->\n          <ldapUrl>ldap:///dc=example,dc=com</ldapUrl>\n\n          <!-- LDAP SRV DNS resolution on _gc._tcp.example.com -->\n          <ldapUrl srvPrefix=\"_gc._tcp\">ldap:///dc=example,dc=com</ldapUrl>\n\n          <connectionTimeout>10000</connectionTimeout>\n          <retries>5</retries>\n\n          <poolingEnabled>true</poolingEnabled>\n          <poolingConnectionTimeout>60000</poolingConnectionTimeout>\n          <verifyServerCert>true</verifyServerCert>\n\n          <bindDn>cn=nuxeo5,ou=applications,dc=example,dc=com</bindDn>\n          <bindPassword>********</bindPassword>\n        </server>\n      </code>\n\n      The ldapUrl tags point to server (IP address or DNS name) and\n      ports. If more than one is provided, the Nuxeo EP will use a pool\n      of load balanced connections to each server. They are assumed to\n      be replicated versions of a master server that should belong to\n      the list.\n\n      The connectionTimeout element specifies a connection timeout in milliseconds.\n      The default is 10000.\n\n      The retries element indicates how many times the request will be retried\n      if LDAP server returns a ServiceUnavailableException. The default is 5.\n\n      The poolingEnabled element specifies whether to use LDAP connection pooling.\n      The default is true.\n\n      The poolingTimeout element specifies, in milliseconds, how long a connection\n      may remain in the pool when LDAP connection pooling is enabled.\n      The default is 60000.\n\n      The verifyServerCert element specifies whether, in SSL mode, all certificates\n      should be checked. This should only be disabled when testing with test server\n      having self-signed certificates. The default is true.\n\n      The bindDn and bindPassword credentials are used by Nuxeo EP to\n      access the content of the LDAP servers. It should have the read\n      permission to any entry that is to be used by Nuxeo EP and write\n      right to branches were Nuxeo EP is supposed to create or edit\n      entries.\n\n      For instance, in OpenLDAP you should have ACLs such as:\n\n      <code>\n        access to attrs=\"userPassword\"\n        by dn=\"cn=ldapadmin,dc=example,dc=com\" write\n        by dn=\"cn=nuxeo5,ou=applications,dc=example,dc=com\" write\n        by anonymous auth\n        by self write\n        by * none\n\n        access to dn.base=\"\" by * read\n\n        # nuxeo5 can manage the ou=people branch\n        access to dn.subtree=\"ou=people,dc=example,dc=com\"\n        by dn=\"cn=nuxeo5,ou=applications,dc=example,dc=com\" write\n        by users read\n        by self write\n        by * none\n\n        access to dn.subtree=\"ou=groups,dc=example,dc=com\"\n        by dn=\"cn=nuxeo5,ou=applications,dc=example,dc=com\" write\n        by users read\n        by self write\n        by * none\n\n        # The admin dn has full write access\n        # other\n        access to *\n        by dn=\"cn=ldapadmin,dc=example,dc=com\" write\n        by users read\n        by * none\n      </code>\n\n      User authentication is done using a bind method against the user\n      provided login and password from the login form and not the bindDn\n      / bindPassword credentials.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.directory.ldap.LDAPServerDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"directories\">\n    <documentation>\n      The directories extension point is used to register LDAP filtering\n      parameters to identify which part of the LDAP branches are actually\n      used by Nuxeo EP to fetch its entries.\n\n      Examples:\n\n      <code>\n        <directory name=\"userDirectory\">\n          <server>default</server>\n          <schema>user</schema>\n          <types>\n            <type>system</type>\n          </types>\n          <idField>username</idField>\n          <idCase>unchanged</idCase>\n          <passwordField>password</passwordField>\n          <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\n          <searchBaseDn>ou=people,dc=example,dc=com</searchBaseDn>\n          <searchClass>person</searchClass>\n          <searchFilter>(&amp;(sn=toto*)(myCustomAttribute=somevalue))</searchFilter>\n          <searchScope>onelevel</searchScope>\n\n          <readOnly>false</readOnly>\n\n          <cacheTimeout>3600</cacheTimeout>\n          <cacheMaxSize>1000</cacheMaxSize>\n\n          <creationBaseDn>ou=people,dc=example,dc=com</creationBaseDn>\n          <creationClass>top</creationClass>\n          <creationClass>person</creationClass>\n          <creationClass>organizationalPerson</creationClass>\n          <creationClass>inetOrgPerson</creationClass>\n          <rdnAttribute>uid</rdnAttribute>\n\n          <querySizeLimit>200</querySizeLimit>\n          <queryTimeLimit>0</queryTimeLimit>\n\n          <fieldMapping name=\"username\">uid</fieldMapping>\n          <fieldMapping name=\"password\">********</fieldMapping>\n          <fieldMapping name=\"firstName\">givenName</fieldMapping>\n          <fieldMapping name=\"lastName\">sn</fieldMapping>\n          <fieldMapping name=\"company\">o</fieldMapping>\n          <fieldMapping name=\"email\">mail</fieldMapping>\n\n          <references>\n            <inverseReference field=\"groups\" directory=\"groupDirectory\" dualReferenceField=\"members\"/>\n          </references>\n        </directory>\n\n        <directory name=\"groupDirectory\">\n          <server>default</server>\n          <schema>group</schema>\n          <idField>groupname</idField>\n          <searchBaseDn>ou=groups,dc=example,dc=com</searchBaseDn>\n          <searchFilter>(|(objectClass=groupOfUniqueNames)(objectClass=groupOfURLs))</searchFilter>\n          <searchScope>subtree</searchScope>\n\n          <!-- Special entry adaptor that makes entries in the ou=editable branch editable\n          other entries have the readonly flag. This require adding a \"dn\" xs:string field\n          to the group schema.\n          -->\n        <entryAdaptor class=\"org.nuxeo.ecm.directory.impl.WritePolicyEntryAdaptor\">\n          <parameter name=\"fieldName\">dn</parameter>\n          <parameter name=\"regexp\">.*,ou=editable,ou=groups,dc=example,dc=com</parameter>\n        </entryAdaptor>\n\n          <readOnly>false</readOnly>\n\n          <cacheTimeout>3600</cacheTimeout>\n          <cacheMaxSize>1000</cacheMaxSize>\n\n          <creationBaseDn>ou=editable,ou=groups,dc=example,dc=com</creationBaseDn>\n          <creationClass>top</creationClass>\n          <creationClass>groupOfUniqueNames</creationClass>\n          <rdnAttribute>cn</rdnAttribute>\n\n          <querySizeLimit>200</querySizeLimit>\n          <queryTimeLimit>0</queryTimeLimit>\n\n          <fieldMapping name=\"groupname\">cn</fieldMapping>\n\n          <references>\n            <!-- LDAP reference resolve DNs embedded in uniqueMember attributes\n\n              If the target directory has no specific filtering policy, it is most\n              of the time not necessary to enable the 'forceDnConsistencyCheck' policy.\n\n              Enabling this option will fetch each reference entry to ensure its\n              existence in the target directory.\n            -->\n            <ldapReference field=\"members\" directory=\"userDirectory\" forceDnConsistencyCheck=\"false\" staticAttributeIdIsDn=\"true\" staticAttributeId=\"uniqueMember\" dynamicAttributeId=\"memberURL\"/>\n\n            <ldapReference field=\"subGroups\" directory=\"groupDirectory\" forceDnConsistencyCheck=\"false\" staticAttributeId=\"uniqueMember\" dynamicAttributeId=\"memberURL\"/>\n\n            <inverseReference field=\"parentGroups\" directory=\"groupDirectory\" dualReferenceField=\"subGroups\"/>\n\n            <ldapTreeReference field=\"children\" directory=\"groupDirectory\" scope=\"onelevel\"/>\n            <inverseReference field=\"parents\" directory=\"groupDirectory\" dualReferenceField=\"children\"/>\n\n          </references>\n\n        </directory>\n      </code>\n\n      In the previous examples we configured two directories one for the\n      users and one for the groups of users. Each directory uses a\n      single schema which is to be registered as any core document\n      schema and that will be used to build a DocumentModel for each\n      matching entry of the directory.\n\n\n      Nuxeo EP provides group resolution for statically dn-referenced\n      entries (in read and write mode) and for dynamically ldapUrl\n      matched entries (readonly). You may also need to statically\n      reference entries without a dn using the 'staticAttributeIdIsDn'\n      attribute.\n\n      The references tags are used to dynamically build nxs:stringList\n      fields of that schema that are to compute membership relationships\n      between users and groups or between parent groups and sub groups.\n      It can also resole children and parents following the ldap tree\n      structure.\n\n      You have two ways for declaring a dynamic reference in a 'references' tag.\n      You can use 'dynamicAttributeId' to point to an ldap attribute that\n      contains an ldap url.\n\n      <code>\n      <ldapReference field=\"members\" directory=\"userDirectory\" dynamicAttributeId=\"memberURL\"/>\n      </code>\n\n      Or, you can use a subtag 'dynamicReference' to declare attributes that\n      contain a DN, a filter and a type. This values will be used to selected\n      the references.\n\n      <code>\n      <ldapReference field=\"members\" directory=\"userDirectory\"/>\n         <dynamicReference filter=\"ldapAttribute\" type=\"subtree/onelevel\" baseDN=\"ldapAttribute\"/>\n      <ldapReference/>\n      </code>\n\n      When using dynamic references, caching is advised since dynamic group\n      resolution can be expensive.\n\n      The element \"idCase\" makes it possible to control the case of the\n      identifier on Nuxeo side. It accepts values \"upper\", \"lower\" or\n      \"unchanged\". It is useful when changing case on the LDAP without affecting\n      Nuxeo (for rights management for instance which is case sensitive for\n      instance).\n\n\n      Dependening on your LDAP Backend implementation, if you have some specific restriction\n      (for example on password, or logins ...), you may want Nuxeo to handle the validation\n      errors of your server on the Nuxeo side.\n\n      Since there error code and message may vary  depending on the LDAP server provider, you\n      may need to provide a custom class that knows how to handle the Exceptions returned by it.\n\n      For this you can specify a class that will be in charge of this task.\n      <code>\n        <ldapExceptionHandler>org.nuxeo.ecm.directory.ldap.DefaultLdapExceptionProcessor</ldapExceptionHandler>\n      </code>\n      This class should implement org.nuxeo.ecm.directory.ldap.LdapExceptionProcessor and return\n      a RecoverableClientException for any exception that should be displayed to the user.\n\n\n      By default, referrals will be automatically resolved, if you don't want that behavior (since 5.9.4) you can use the followReferrals tag\n\n      <code>\n        <directory name=\"groupDirectory\">\n           ....\n           <followReferrals>false</followReferrals>\n           ...\n        </directory>\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.directory.ldap.LDAPDirectoryDescriptor\"/>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/LDAPDirectoryFactory.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-directory-ldap-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.ldap",
      "id": "org.nuxeo.ecm.directory.ldap",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.directory.ldap,org.nuxeo.ecm.directory.lda\r\n p.dns,org.nuxeo.ecm.directory.ldap.filter\r\nPrivate-Package: org.nuxeo.ecm.directory.ldap.dns,org.nuxeo.ecm.director\r\n y.ldap.filter\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Localization: bundle\r\nBundle-Name: Nuxeo ECM LDAP Directory\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/LDAPDirectoryFactory.xml,OSGI-INF/management-c\r\n ontrib.xml\r\nImport-Package: javax.naming,javax.naming.directory,org.apache.commons.l\r\n ang,org.apache.commons.logging,org.apache.directory.server.core.configu\r\n ration,org.apache.directory.server.core.jndi,org.apache.directory.serve\r\n r.core.partition,org.apache.directory.shared.ldap.filter,org.apache.dir\r\n ectory.shared.ldap.name,org.apache.directory.shared.ldap.schema,org.nux\r\n eo.common.utils,org.nuxeo.common.xmap,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.impl,org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.core.mana\r\n gement.statuses,org.nuxeo.ecm.core.schema,org.nuxeo.ecm.core.schema.typ\r\n es,org.nuxeo.ecm.core.utils,org.nuxeo.osgi,org.nuxeo.runtime,org.nuxeo.\r\n runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.directory.ldap;singleton:=true\r\nOriginally-Created-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nRequire-Bundle: org.nuxeo.ecm.directory\r\n\r\n",
      "maxResolutionOrder": 587,
      "minResolutionOrder": 301,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.directory"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-automation-io",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.automation.core",
          "org.nuxeo.ecm.automation.features",
          "org.nuxeo.ecm.automation.io",
          "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": "2025.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.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": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <marshaller>\n      <reader>org.nuxeo.ecm.automation.io.rest.operations.JsonRequestReader</reader>\n      <reader>org.nuxeo.ecm.automation.io.rest.operations.UrlEncodedFormRequestReader</reader>\n      <reader>org.nuxeo.ecm.automation.io.rest.documents.BusinessAdapterReader</reader>\n      <writer>org.nuxeo.ecm.automation.io.rest.operations.JsonAutomationInfoWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.JsonLoginInfoWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.operations.JsonOperationWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.operations.JsonHtmlOperationWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.JsonTreeWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.JsonAdapterWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.JsonRecordSetWriter</writer>\n      <!-- delegates marshalling to nuxeo-core-io MarshallerRegistry service -->\n      <writer>org.nuxeo.ecm.webengine.rest.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": [],
          "resolutionOrder": 54,
          "services": [],
          "startOrder": 80,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.automation.server.marshallers\">\n  <!-- this is needed by JsonOperationWriter -->\n  <extension point=\"marshallers\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <marshaller>\n      <reader>org.nuxeo.ecm.automation.io.rest.operations.JsonRequestReader</reader>\n      <reader>org.nuxeo.ecm.automation.io.rest.operations.UrlEncodedFormRequestReader</reader>\n      <reader>org.nuxeo.ecm.automation.io.rest.documents.BusinessAdapterReader</reader>\n      <writer>org.nuxeo.ecm.automation.io.rest.operations.JsonAutomationInfoWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.JsonLoginInfoWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.operations.JsonOperationWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.operations.JsonHtmlOperationWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.JsonTreeWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.JsonAdapterWriter</writer>\n      <writer>org.nuxeo.ecm.automation.io.rest.JsonRecordSetWriter</writer>\n      <!-- delegates marshalling to nuxeo-core-io MarshallerRegistry service -->\n      <writer>org.nuxeo.ecm.webengine.rest.coreiodelegate.CoreIODelegate</writer>\n    </marshaller>\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/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.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": "2025.7.12",
              "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": 55,
          "services": [],
          "startOrder": 76,
          "version": "2025.7.12",
          "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": "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": "2025.7.12"
            }
          ],
          "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": 677,
          "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": "2025.7.12"
            }
          ],
          "startOrder": 557,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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-Version: 5.7.2.qualifier\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": 677,
      "minResolutionOrder": 54,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-template-rendering-jxls",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.template.manager",
          "org.nuxeo.template.manager.api",
          "org.nuxeo.template.manager.jxls",
          "org.nuxeo.template.manager.rest",
          "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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
            "encoding": "UTF-8",
            "length": 3342,
            "mimeType": "text/plain",
            "name": "ReadMe.md"
          }
        ],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.template.manager.jxls",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "JXLS template processor  @author Thierry Delprat (td@nuxeo.com)\n",
              "documentationHtml": "<p>\nJXLS template processor  &#64;author Thierry Delprat (td&#64;nuxeo.com)</p>",
              "extensionPoint": "org.nuxeo.template.service.TemplateProcessorComponent--processor",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.jxls/org.nuxeo.template.service.jxlsContrib/Contributions/org.nuxeo.template.service.jxlsContrib--processor",
              "id": "org.nuxeo.template.service.jxlsContrib--processor",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"processor\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>JXLS template processor  @author Thierry Delprat (td@nuxeo.com)</documentation>\n\n    <templateProcessor class=\"org.nuxeo.template.processors.jxls.JXLSTemplateProcessor\" default=\"false\" label=\"JXLS Processor\" name=\"JXLSProcessor\">\n      <supportedMimeType>application/vnd.ms-excel</supportedMimeType>\n      <supportedExtension>xls</supportedExtension>\n    </templateProcessor>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.jxls/org.nuxeo.template.service.jxlsContrib",
          "name": "org.nuxeo.template.service.jxlsContrib",
          "requirements": [
            "org.nuxeo.template.service.defaultContrib"
          ],
          "resolutionOrder": 642,
          "services": [],
          "startOrder": 520,
          "version": "2025.7.12",
          "xmlFileContent": "<component\n  name=\"org.nuxeo.template.service.jxlsContrib\">\n\n  <require>org.nuxeo.template.service.defaultContrib</require>\n\n    <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"processor\">\n\n    <documentation>JXLS template processor  @author Thierry Delprat (td@nuxeo.com)</documentation>\n\n    <templateProcessor name=\"JXLSProcessor\" label=\"JXLS Processor\" default=\"false\" class=\"org.nuxeo.template.processors.jxls.JXLSTemplateProcessor\">\n      <supportedMimeType>application/vnd.ms-excel</supportedMimeType>\n      <supportedExtension>xls</supportedExtension>\n    </templateProcessor>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/templateprocessor-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-template-rendering-jxls-2025.7.12.jar",
      "groupId": "org.nuxeo.template.rendering",
      "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.jxls",
      "id": "org.nuxeo.template.manager.jxls",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM Document template JXLS plugin\r\nBundle-SymbolicName: org.nuxeo.template.manager.jxls;singleton:=true\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/templateprocessor-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 642,
      "minResolutionOrder": 642,
      "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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
        "encoding": "UTF-8",
        "length": 3342,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "readme": {
        "blobProviderId": "default",
        "content": "This modules contains [JXLS http://jxls.sourceforge.net/] plugins of nuxexo-template-rendering module.\n\n## TemplateProcessor\n\nJXLSTemplateProcessor provides an implemantation of the TemplateProcessor that uses JXLS as an engine.\n\n## Supported formats\n\nThis template processor supports Microsoft Excel files.\n\n## Supported features\n\n - merge fields\n - loops on fields\n\n## Templating format\n\nSee [JXLS samples http://jxls.sourceforge.net/samples/tagsample.html].\n",
        "digest": "ae9b79afd03a247a3b66cead946138d6",
        "encoding": "UTF-8",
        "length": 461,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-task-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.task.api",
          "org.nuxeo.ecm.platform.task.automation",
          "org.nuxeo.ecm.platform.task.core"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.task.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.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.plateform.task.type/Contributions/org.nuxeo.ecm.plateform.task.type--schema",
              "id": "org.nuxeo.ecm.plateform.task.type--schema",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <schema name=\"task\" prefix=\"nt\" src=\"schemas/task.xsd\"/>\n\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.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.plateform.task.type/Contributions/org.nuxeo.ecm.plateform.task.type--doctype",
              "id": "org.nuxeo.ecm.plateform.task.type--doctype",
              "registrationOrder": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"Task\" perDocumentQuery=\"false\">\n      <schema name=\"task\"/>\n    </facet>\n\n    <doctype extends=\"Folder\" name=\"TaskRoot\">\n      <facet name=\"HiddenInNavigation\"/>\n      <facet name=\"SuperSpace\"/>\n    </doctype>\n\n    <doctype extends=\"Document\" name=\"TaskDoc\">\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <facet name=\"Task\"/>\n      <facet name=\"HiddenInNavigation\"/>\n      <prefetch>task</prefetch>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.plateform.task.type",
          "name": "org.nuxeo.ecm.plateform.task.type",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 441,
          "services": [],
          "startOrder": 221,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"org.nuxeo.ecm.plateform.task.type\"\n  version=\"1.0\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n\n    <schema name=\"task\" src=\"schemas/task.xsd\"\n      prefix=\"nt\" />\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n\n    <facet name=\"Task\" perDocumentQuery=\"false\">\n      <schema name=\"task\" />\n    </facet>\n\n    <doctype name=\"TaskRoot\" extends=\"Folder\">\n      <facet name=\"HiddenInNavigation\" />\n      <facet name=\"SuperSpace\" />\n    </doctype>\n\n    <doctype name=\"TaskDoc\" extends=\"Document\">\n      <schema name=\"common\" />\n      <schema name=\"dublincore\" />\n      <facet name=\"Task\" />\n      <facet name=\"HiddenInNavigation\" />\n      <prefetch>task</prefetch>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/task-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.task.core.service.TaskServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n\n    The TaskService provides necessary API to handle Task documents.\n    @author\n    <a href=\"mailto:ldoguin@nuxeo.com\">Laurent Doguin</a>\n",
          "documentationHtml": "<p>\nThe TaskService provides necessary API to handle Task documents.\n</p><p>\n<a href=\"mailto:ldoguin&#64;nuxeo.com\">Laurent Doguin</a></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.task.core.TaskService",
              "descriptors": [
                "org.nuxeo.ecm.platform.task.TaskProviderDescriptor"
              ],
              "documentation": "\n      This extension can be used to add task providers. a task provider must implement the TaskProvider interface.\n    \n",
              "documentationHtml": "<p>\nThis extension can be used to add task providers. a task provider must implement the TaskProvider interface.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.core.TaskService/ExtensionPoints/org.nuxeo.ecm.platform.task.core.TaskService--taskProvider",
              "id": "org.nuxeo.ecm.platform.task.core.TaskService--taskProvider",
              "label": "taskProvider (org.nuxeo.ecm.platform.task.core.TaskService)",
              "name": "taskProvider",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.task.core.TaskService--taskProvider",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.core.TaskService/Contributions/org.nuxeo.ecm.platform.task.core.TaskService--taskProvider",
              "id": "org.nuxeo.ecm.platform.task.core.TaskService--taskProvider",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.task.core.TaskService",
                "name": "org.nuxeo.ecm.platform.task.core.TaskService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"taskProvider\" target=\"org.nuxeo.ecm.platform.task.core.TaskService\">\n    <taskProvider class=\"org.nuxeo.ecm.platform.task.core.service.DocumentTaskProvider\" id=\"documentTaskProvider\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.core.TaskService",
          "name": "org.nuxeo.ecm.platform.task.core.TaskService",
          "requirements": [],
          "resolutionOrder": 442,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.task.core.TaskService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.core.TaskService/Services/org.nuxeo.ecm.platform.task.TaskService",
              "id": "org.nuxeo.ecm.platform.task.TaskService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 642,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.task.core.TaskService\">\n\n  <documentation>\n    The TaskService provides necessary API to handle Task documents.\n    @author\n    <a href=\"mailto:ldoguin@nuxeo.com\">Laurent Doguin</a>\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.task.core.service.TaskServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.task.TaskService\" />\n  </service>\n\n  <extension-point name=\"taskProvider\">\n    <documentation>\n      This extension can be used to add task providers. a task provider must implement the TaskProvider interface.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.task.TaskProviderDescriptor\"/>\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.platform.task.core.TaskService\"\n    point=\"taskProvider\">\n    <taskProvider class=\"org.nuxeo.ecm.platform.task.core.service.DocumentTaskProvider\"\n      id=\"documentTaskProvider\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/TaskService.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--factoryBinding",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.contentTemplate/Contributions/org.nuxeo.ecm.platform.task.contentTemplate--factoryBinding",
              "id": "org.nuxeo.ecm.platform.task.contentTemplate--factoryBinding",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "name": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"factoryBinding\" target=\"org.nuxeo.ecm.platform.content.template.service.ContentTemplateService\">\n\n    <factoryBinding append=\"true\" factoryName=\"SimpleTemplateRootFactory\" name=\"TasksRootFactory\" targetType=\"Root\">\n      <template>\n        <templateItem id=\"task-root\" title=\"Task\" typeName=\"TaskRoot\">\n          <acl>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"Administrator\"/>\n            <ace granted=\"true\" permission=\"Everything\" principal=\"administrators\"/>\n            <ace granted=\"false\" permission=\"Everything\" principal=\"Everyone\"/>\n          </acl>\n        </templateItem>\n      </template>\n    </factoryBinding>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.contentTemplate",
          "name": "org.nuxeo.ecm.platform.task.contentTemplate",
          "requirements": [
            "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService.defaultContrib"
          ],
          "resolutionOrder": 443,
          "services": [],
          "startOrder": 384,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.task.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=\"TasksRootFactory\" factoryName=\"SimpleTemplateRootFactory\"\n      targetType=\"Root\" append=\"true\">\n      <template>\n        <templateItem typeName=\"TaskRoot\" id=\"task-root\" title=\"Task\" >\n          <acl>\n            <ace principal=\"Administrator\" permission=\"Everything\"\n              granted=\"true\" />\n            <ace principal=\"administrators\" 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/task-content-template-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.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.core.listeners/Contributions/org.nuxeo.ecm.platform.task.core.listeners--listener",
              "id": "org.nuxeo.ecm.platform.task.core.listeners--listener",
              "registrationOrder": 37,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\t\t<listener async=\"false\" class=\"org.nuxeo.ecm.platform.task.core.listener.DeleteTaskForDeletedDocumentListener\" name=\"removeProcessForDeletedDocument\" postCommit=\"false\">\n\t\t\t<event>aboutToRemove</event>\n\t\t</listener>\n\t</extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.core.listeners",
          "name": "org.nuxeo.ecm.platform.task.core.listeners",
          "requirements": [],
          "resolutionOrder": 444,
          "services": [],
          "startOrder": 385,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.task.core.listeners\">\n\n\t<extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n\t\tpoint=\"listener\">\n\t\t<listener async=\"false\" postCommit=\"false\"\n\t\t\tclass=\"org.nuxeo.ecm.platform.task.core.listener.DeleteTaskForDeletedDocumentListener\"\n\t\t\tname=\"removeProcessForDeletedDocument\">\n\t\t\t<event>aboutToRemove</event>\n\t\t</listener>\n\t</extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/task-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.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.adapterContrib/Contributions/org.nuxeo.ecm.platform.task.adapterContrib--adapters",
              "id": "org.nuxeo.ecm.platform.task.adapterContrib--adapters",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n\n    <adapter class=\"org.nuxeo.ecm.platform.task.Task\" factory=\"org.nuxeo.ecm.platform.task.TaskAdapterFactory\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.adapterContrib",
          "name": "org.nuxeo.ecm.platform.task.adapterContrib",
          "requirements": [],
          "resolutionOrder": 445,
          "services": [],
          "startOrder": 383,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.task.adapterContrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n\n    <adapter class=\"org.nuxeo.ecm.platform.task.Task\"\n      factory=\"org.nuxeo.ecm.platform.task.TaskAdapterFactory\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/task-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.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.lifecycle/Contributions/org.nuxeo.ecm.platform.task.lifecycle--lifecycle",
              "id": "org.nuxeo.ecm.platform.task.lifecycle--lifecycle",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n\n    <lifecycle defaultInitial=\"opened\" name=\"task\">\n      <transitions>\n        <transition destinationState=\"ended\" name=\"end\">\n          <description>End the task</description>\n        </transition>\n        <transition destinationState=\"cancelled\" name=\"cancel\">\n          <description>Cancel the task</description>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"Task is open.\" name=\"opened\">\n          <transitions>\n            <transition>end</transition>\n            <transition>cancel</transition>\n          </transitions>\n        </state>\n        <state description=\"task has been ended\" name=\"ended\">\n        </state>\n        <state description=\"Task is cancelled\" name=\"cancelled\">\n        </state>\n      </states>\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.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.lifecycle/Contributions/org.nuxeo.ecm.platform.task.lifecycle--types",
              "id": "org.nuxeo.ecm.platform.task.lifecycle--types",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"TaskDoc\">task</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.lifecycle",
          "name": "org.nuxeo.ecm.platform.task.lifecycle",
          "requirements": [],
          "resolutionOrder": 446,
          "services": [],
          "startOrder": 387,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.task.lifecycle\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"lifecycle\">\n\n    <lifecycle name=\"task\" defaultInitial=\"opened\">\n      <transitions>\n        <transition name=\"end\" destinationState=\"ended\">\n          <description>End the task</description>\n        </transition>\n        <transition name=\"cancel\" destinationState=\"cancelled\">\n          <description>Cancel the task</description>\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"opened\" description=\"Task is open.\">\n          <transitions>\n            <transition>end</transition>\n            <transition>cancel</transition>\n          </transitions>\n        </state>\n        <state name=\"ended\" description=\"task has been ended\">\n        </state>\n        <state name=\"cancelled\" description=\"Task is cancelled\">\n        </state>\n      </states>\n    </lifecycle>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"TaskDoc\">task</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/task-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.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.core.pageproviders/Contributions/org.nuxeo.ecm.platform.task.core.pageproviders--providers",
              "id": "org.nuxeo.ecm.platform.task.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": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:actors/* IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_TARGET_DOCUMENT\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:targetDocumentId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_TARGET_DOCUMENT_AND_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:targetDocumentId = ? AND nt:actors/* IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_TARGET_DOCUMENTS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND (nt:targetDocumentId = ? OR nt:targetDocumentsIds/* IN (?))\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND (nt:targetDocumentId = ? OR nt:targetDocumentsIds/* IN (?)) AND\n        nt:actors/* IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_PROCESS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:processId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_PROCESS_AND_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:processId = ? AND nt:actors/* IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_PROCESS_AND_NODE\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:processId = ? AND nt:task_variables/*/key = 'nodeId' AND\n        nt:task_variables/*/value = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS_OR_DELEGATED_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND (nt:targetDocumentId = ? OR nt:targetDocumentsIds/* IN (?)) AND\n        (nt:actors/* IN ? OR nt:delegatedActors/* IN ?)\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_ACTORS_OR_DELEGATED_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND (nt:actors/* IN ? OR nt:delegatedActors/* IN ?)\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.task/org.nuxeo.ecm.platform.task.core/org.nuxeo.ecm.platform.task.core.pageproviders",
          "name": "org.nuxeo.ecm.platform.task.core.pageproviders",
          "requirements": [],
          "resolutionOrder": 447,
          "services": [],
          "startOrder": 386,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.task.core.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:actors/* IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_TARGET_DOCUMENT\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:targetDocumentId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_TARGET_DOCUMENT_AND_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:targetDocumentId = ? AND nt:actors/* IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_TARGET_DOCUMENTS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND (nt:targetDocumentId = ? OR nt:targetDocumentsIds/* IN (?))\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND (nt:targetDocumentId = ? OR nt:targetDocumentsIds/* IN (?)) AND\n        nt:actors/* IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_PROCESS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:processId = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_PROCESS_AND_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:processId = ? AND nt:actors/* IN ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"GET_TASKS_FOR_PROCESS_AND_NODE\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:processId = ? AND nt:task_variables/*/key = 'nodeId' AND\n        nt:task_variables/*/value = ?\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider\n      name=\"GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS_OR_DELEGATED_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND (nt:targetDocumentId = ? OR nt:targetDocumentsIds/* IN (?)) AND\n        (nt:actors/* IN ? OR nt:delegatedActors/* IN ?)\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider\n      name=\"GET_TASKS_FOR_ACTORS_OR_DELEGATED_ACTORS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND (nt:actors/* IN ? OR nt:delegatedActors/* IN ?)\n      </pattern>\n      <pageSize>0</pageSize>\n      <maxPageSize>0</maxPageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/task-pageprovider-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-task-core-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.task/org.nuxeo.ecm.platform.task.core",
      "id": "org.nuxeo.ecm.platform.task.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM JBPM\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.task.core;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web,stateful\r\nNuxeo-Component: OSGI-INF/task-core-types-contrib.xml, OSGI-INF/TaskServ\r\n ice.xml, OSGI-INF/task-content-template-contrib.xml, OSGI-INF/task-list\r\n ener-contrib.xml, OSGI-INF/task-adapter-contrib.xml, OSGI-INF/task-life\r\n cycle-contrib.xml, OSGI-INF/task-pageprovider-contrib.xml\r\nRequire-Bundle: org.nuxeo.ecm.core.api, org.nuxeo.ecm.platform.task.api,\r\n  org.nuxeo.ecm.platform.usermanager, org.nuxeo.ecm.platform.query.api\r\n\r\n",
      "maxResolutionOrder": 447,
      "minResolutionOrder": 441,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.platform.task.api",
        "org.nuxeo.ecm.platform.usermanager",
        "org.nuxeo.ecm.platform.query.api"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-comment-rest-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.comment",
          "org.nuxeo.ecm.platform.comment.api",
          "org.nuxeo.ecm.platform.comment.restapi",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.comment.restapi",
      "components": [],
      "fileName": "nuxeo-platform-comment-rest-api-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.restapi",
      "id": "org.nuxeo.ecm.platform.comment.restapi",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: nuxeo-platform-comment-rest-api\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.comment.restapi;singleton:=t\r\n rue\r\nFragment-Host: org.nuxeo.ecm.platform.restapi.server\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login-token-rest",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.restapi.server.login.tokenauth",
      "components": [],
      "fileName": "nuxeo-platform-login-token-rest-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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\nBundle-Version: 1.0.0\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-storage-mongodb",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.mongodb",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property to disable the fact that on MongoDB a LIKE match anchors its search\n      (like in SQL databases), i.e., absent wildcards, it does not match in the middle of a string.\n\n      When true, does not match in the middle of a string.\n      When false, works as if there was a % on each side of the LIKE expression.\n\n      @since 10.3\n    \n",
              "documentationHtml": "<p>\nProperty to disable the fact that on MongoDB a LIKE match anchors its search\n(like in SQL databases), i.e., absent wildcards, it does not match in the middle of a string.\n</p><p>\nWhen true, does not match in the middle of a string.\nWhen false, works as if there was a % on each side of the LIKE expression.\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.storage/org.nuxeo.ecm.core.storage.mongodb/org.nuxeo.ecm.core.storage.mongodb.configuration/Contributions/org.nuxeo.ecm.core.storage.mongodb.configuration--configuration",
              "id": "org.nuxeo.ecm.core.storage.mongodb.configuration--configuration",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property to disable the fact that on MongoDB a LIKE match anchors its search\n      (like in SQL databases), i.e., absent wildcards, it does not match in the middle of a string.\n\n      When true, does not match in the middle of a string.\n      When false, works as if there was a % on each side of the LIKE expression.\n\n      @since 10.3\n    </documentation>\n    <!-- default is true for 10.3 and later -->\n    <property name=\"nuxeo.mongodb.like.anchored\">true</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property to disable the cursor timeout on the GC markReferencedBlobs query.\n\n      @since 2021.14\n    \n",
              "documentationHtml": "<p>\nProperty to disable the cursor timeout on the GC markReferencedBlobs query.\n</p><p>\n&#64;since 2021.14\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mongodb/org.nuxeo.ecm.core.storage.mongodb.configuration/Contributions/org.nuxeo.ecm.core.storage.mongodb.configuration--configuration1",
              "id": "org.nuxeo.ecm.core.storage.mongodb.configuration--configuration1",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property to disable the cursor timeout on the GC markReferencedBlobs query.\n\n      @since 2021.14\n    </documentation>\n    <property name=\"nuxeo.mongodb.gc.noCursorTimeout\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mongodb/org.nuxeo.ecm.core.storage.mongodb.configuration",
          "name": "org.nuxeo.ecm.core.storage.mongodb.configuration",
          "requirements": [],
          "resolutionOrder": 155,
          "services": [],
          "startOrder": 154,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.mongodb.configuration\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property to disable the fact that on MongoDB a LIKE match anchors its search\n      (like in SQL databases), i.e., absent wildcards, it does not match in the middle of a string.\n\n      When true, does not match in the middle of a string.\n      When false, works as if there was a % on each side of the LIKE expression.\n\n      @since 10.3\n    </documentation>\n    <!-- default is true for 10.3 and later -->\n    <property name=\"nuxeo.mongodb.like.anchored\">true</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property to disable the cursor timeout on the GC markReferencedBlobs query.\n\n      @since 2021.14\n    </documentation>\n    <property name=\"nuxeo.mongodb.gc.noCursorTimeout\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/mongodb-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.core.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mongodb/org.nuxeo.ecm.core.storage.mongodb.scroll.config/Contributions/org.nuxeo.ecm.core.storage.mongodb.scroll.config--scroll",
              "id": "org.nuxeo.ecm.core.storage.mongodb.scroll.config--scroll",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.ecm.core.storage.mongodb.blob.GridFSBlobScroll\" name=\"gridFSBlobScroll\" type=\"generic\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mongodb/org.nuxeo.ecm.core.storage.mongodb.scroll.config",
          "name": "org.nuxeo.ecm.core.storage.mongodb.scroll.config",
          "requirements": [
            "org.nuxeo.ecm.core.scroll.service"
          ],
          "resolutionOrder": 156,
          "services": [],
          "startOrder": 155,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.mongodb.scroll.config\" version=\"1.0.0\">\n\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=\"gridFSBlobScroll\" class=\"org.nuxeo.ecm.core.storage.mongodb.blob.GridFSBlobScroll\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/mongodb-scroll-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService",
          "declaredStartOrder": null,
          "documentation": "\n    Manages MongoDB repositories.\n  \n",
          "documentationHtml": "<p>\nManages MongoDB repositories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService",
              "descriptors": [
                "org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryDescriptor"
              ],
              "documentation": "\n      Extension points to register MongoDB repositories. The repository will ask for a MongoDB access to\n      MongoDBConnectionService with id 'repository/[repositoryName]'.\n\n      Example:\n      <code>\n    <repository isDefault=\"true\" label=\"MongoDB Repository\" name=\"default\">\n        <fulltext disabled=\"false\"/>\n    </repository>\n</code>\n",
              "documentationHtml": "<p>\nExtension points to register MongoDB repositories. The repository will ask for a MongoDB access to\nMongoDBConnectionService with id &#39;repository/[repositoryName]&#39;.\n</p><p>\nExample:\n</p><p></p><pre><code>    &lt;repository isDefault&#61;&#34;true&#34; label&#61;&#34;MongoDB 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.mongodb/org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService/ExtensionPoints/org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService--repository",
              "id": "org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService--repository",
              "label": "repository (org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService)",
              "name": "repository",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mongodb/org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService",
          "name": "org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService",
          "requirements": [
            "org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService"
          ],
          "resolutionOrder": 579,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mongodb/org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService/Services/org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService",
              "id": "org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 591,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.storage.dbs.DBSRepositoryService</require>\n\n  <documentation>\n    Manages MongoDB repositories.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryService\" />\n  </service>\n\n  <extension-point name=\"repository\">\n    <documentation>\n      Extension points to register MongoDB repositories. The repository will ask for a MongoDB access to\n      MongoDBConnectionService with id 'repository/[repositoryName]'.\n\n      Example:\n      <code>\n        <repository name=\"default\" label=\"MongoDB Repository\" isDefault=\"true\">\n          <fulltext disabled=\"false\" />\n        </repository>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.storage.mongodb.MongoDBRepositoryDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/mongodb-repository-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-storage-mongodb-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.mongodb",
      "id": "org.nuxeo.ecm.core.storage.mongodb",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.mongodb\r\nNuxeo-Component: OSGI-INF/mongodb-repository-service.xml,OSGI-INF/mongod\r\n b-configuration-properties.xml,OSGI-INF/mongodb-scroll-config.xml\r\n\r\n",
      "maxResolutionOrder": 579,
      "minResolutionOrder": 155,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.blob.BlobManager--configuration",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/default-blob-provider-config/Contributions/default-blob-provider-config--configuration",
              "id": "default-blob-provider-config--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.blob.BlobManager",
                "name": "org.nuxeo.ecm.core.blob.BlobManager",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.ecm.core.blob.BlobManager\">\n    <blobprovider name=\"default\">\n      <class>org.nuxeo.ecm.core.blob.LocalBlobProvider</class>\n      <property name=\"path\">/var/lib/nuxeo/binaries</property>\n      <property name=\"key\"/>\n    </blobprovider>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/default-blob-provider-config",
          "name": "default-blob-provider-config",
          "requirements": [],
          "resolutionOrder": 0,
          "services": [],
          "startOrder": 19,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"default-blob-provider-config\">\n\n  <extension target=\"org.nuxeo.ecm.core.blob.BlobManager\" point=\"configuration\">\n    <blobprovider name=\"default\">\n      <class>org.nuxeo.ecm.core.blob.LocalBlobProvider</class>\n      <property name=\"path\">/var/lib/nuxeo/binaries</property>\n      <property name=\"key\"></property>\n    </blobprovider>\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/blob-provider-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.cache.CacheService--caches",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.core.cache.config/Contributions/org.nuxeo.ecm.core.cache.config--caches",
              "id": "org.nuxeo.ecm.core.cache.config--caches",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"caches\" target=\"org.nuxeo.ecm.core.cache.CacheService\">\n    <cache name=\"default-cache\">\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"maxSize\">10000</option>\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"user-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"user-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"group-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"group-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"digestauth-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"digestauth-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"ldap-user-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"ldap-user-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"ldap-group-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"ldap-group-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.core.cache.config",
          "name": "org.nuxeo.ecm.core.cache.config",
          "requirements": [],
          "resolutionOrder": 1,
          "services": [],
          "startOrder": 110,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.cache.config\">\n\n  <extension target=\"org.nuxeo.ecm.core.cache.CacheService\"\n    point=\"caches\">\n    <cache name=\"default-cache\">\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"maxSize\">10000</option>\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"user-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"user-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"group-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"group-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"digestauth-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"digestauth-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"ldap-user-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"ldap-user-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"ldap-group-entry-cache\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n    <cache name=\"ldap-group-entry-cache-without-references\">\n      <option name=\"maxSize\">10000</option>\n      <ttl>20</ttl><!-- minutes -->\n      <option name=\"concurrencyLevel\">500</option>\n    </cache>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/cache-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.cluster.ClusterService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/cluster-config/Contributions/cluster-config--configuration",
              "id": "cluster-config--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.cluster.ClusterService",
                "name": "org.nuxeo.runtime.cluster.ClusterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.cluster.ClusterService\">\n    <clusterNode enabled=\"\" id=\"\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/cluster-config",
          "name": "cluster-config",
          "requirements": [],
          "resolutionOrder": 2,
          "services": [],
          "startOrder": 15,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"cluster-config\">\n\n  <extension target=\"org.nuxeo.runtime.cluster.ClusterService\" point=\"configuration\">\n    <clusterNode id=\"\" enabled=\"\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/cluster-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.ui.web.cors.config",
          "name": "org.nuxeo.ecm.platform.ui.web.cors.config",
          "requirements": [],
          "resolutionOrder": 3,
          "services": [],
          "startOrder": 407,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.cors.config\">\n\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/cors-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.ui.web.cors.dev",
          "name": "org.nuxeo.ecm.platform.ui.web.cors.dev",
          "requirements": [],
          "resolutionOrder": 4,
          "services": [],
          "startOrder": 408,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ui.web.cors.dev\">\n\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/cors-dev-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.datasource--datasources",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.datasource.server.contrib/Contributions/org.nuxeo.runtime.datasource.server.contrib--datasources",
              "id": "org.nuxeo.runtime.datasource.server.contrib--datasources",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.datasource",
                "name": "org.nuxeo.runtime.datasource",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"datasources\" target=\"org.nuxeo.runtime.datasource\">\n    <datasource accessToUnderlyingConnectionAllowed=\"true\" cacheState=\"false\" driverClassName=\"org.h2.Driver\" maxTotal=\"100\" maxWaitMillis=\"1000\" minTotal=\"5\" name=\"jdbc/nuxeo\" password=\"********\" url=\"jdbc:h2:/var/lib/nuxeo/h2/nuxeo;DB_CLOSE_ON_EXIT=false;MODE=LEGACY\" username=\"sa\" validationQuery=\"\">********</datasource>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.datasource.server.contrib",
          "name": "org.nuxeo.runtime.datasource.server.contrib",
          "requirements": [],
          "resolutionOrder": 5,
          "services": [],
          "startOrder": 508,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.runtime.datasource.server.contrib\">\n\n  <extension target=\"org.nuxeo.runtime.datasource\" point=\"datasources\">\n    <datasource name=\"jdbc/nuxeo\" driverClassName=\"org.h2.Driver\" url=\"jdbc:h2:${nuxeo.data.dir}/h2/nuxeo;DB_CLOSE_ON_EXIT=false;MODE=LEGACY\" username=\"sa\" password=\"********\" maxTotal=\"100\" minTotal=\"5\" maxWaitMillis=\"1000\" validationQuery=\"\" cacheState=\"false\" accessToUnderlyingConnectionAllowed=\"true\">********</datasource>\n  </extension>\n</component>",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/datasources-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.directory.ldap.storage.users",
          "name": "org.nuxeo.ecm.directory.ldap.storage.users",
          "requirements": [],
          "resolutionOrder": 6,
          "services": [],
          "startOrder": 177,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.directory.ldap.storage.users\">\n\n<!-- Using default configuration from default-directory-bundle.xml -->\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/default-ldap-users-directory-bundle.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.datasource--datasources",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/default-repository-config/Contributions/default-repository-config--datasources",
              "id": "default-repository-config--datasources",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.datasource",
                "name": "org.nuxeo.runtime.datasource",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"datasources\" target=\"org.nuxeo.runtime.datasource\">\n    <link global=\"jdbc/nuxeo\" name=\"jdbc/repository_default\" type=\"javax.sql.DataSource\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.storage.sql.RepositoryService--repository",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/default-repository-config/Contributions/default-repository-config--repository",
              "id": "default-repository-config--repository",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.storage.sql.RepositoryService",
                "name": "org.nuxeo.ecm.core.storage.sql.RepositoryService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"repository\" target=\"org.nuxeo.ecm.core.storage.sql.RepositoryService\">\n    <!-- it will lookup for \"repository_default\" datasource -->\n    <repository label=\"label.default.repository\" name=\"default\">\n      <pool blockingTimeoutMillis=\"100\" maxPoolSize=\"20\" minPoolSize=\"0\"/>\n      <noDDL>false</noDDL>\n      <ddlMode>execute</ddlMode>\n      <aclOptimizations enabled=\"true\" readAclMaxSize=\"0\"/>\n      <pathOptimizations enabled=\"true\"/>\n      <idType>varchar</idType>\n      <changeTokenEnabled>true</changeTokenEnabled>\n      <indexing>\n        <!-- for H2 -->\n        <fulltext disabled=\"false\" searchDisabled=\"true\" storedInBlob=\"false\">\n          <index name=\"default\">\n            <!-- all props implied -->\n          </index>\n        </fulltext>\n      </indexing>\n      <usersSeparator key=\",\"/>\n    </repository>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/default-repository-config",
          "name": "default-repository-config",
          "requirements": [],
          "resolutionOrder": 7,
          "services": [],
          "startOrder": 20,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"default-repository-config\">\n\n  <extension target=\"org.nuxeo.runtime.datasource\" point=\"datasources\">\n    <link name=\"jdbc/repository_default\" global=\"jdbc/nuxeo\" type=\"javax.sql.DataSource\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.storage.sql.RepositoryService\" point=\"repository\">\n    <!-- it will lookup for \"repository_default\" datasource -->\n    <repository name=\"default\" label=\"label.default.repository\">\n      <pool minPoolSize=\"0\" maxPoolSize=\"20\"\n        blockingTimeoutMillis=\"100\" />\n      <noDDL>false</noDDL>\n      <ddlMode>execute</ddlMode>\n      <aclOptimizations enabled=\"true\" readAclMaxSize=\"0\"/>\n      <pathOptimizations enabled=\"true\"/>\n      <idType>varchar</idType>\n      <changeTokenEnabled>true</changeTokenEnabled>\n      <indexing>\n        <!-- for H2 -->\n        <fulltext disabled=\"false\"\n                  storedInBlob=\"false\"\n                  searchDisabled=\"true\">\n          <index name=\"default\">\n            <!-- all props implied -->\n          </index>\n        </fulltext>\n      </indexing>\n      <usersSeparator key=\",\" />\n    </repository>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/default-repository-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.mail.MailServiceComponent--senders",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.mail.sender.default.config/Contributions/org.nuxeo.mail.sender.default.config--senders",
              "id": "org.nuxeo.mail.sender.default.config--senders",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.mail.MailServiceComponent",
                "name": "org.nuxeo.mail.MailServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"senders\" target=\"org.nuxeo.mail.MailServiceComponent\">\n\n    <sender class=\"org.nuxeo.mail.SMTPMailSender\" name=\"default\">\n      <property name=\"mail.from\">noreply@nuxeo.com</property>\n      <property name=\"mail.transport.protocol\">smtp</property>\n      <property name=\"mail.smtp.host\">localhost</property>\n      <property name=\"mail.smtp.port\">25</property>\n    </sender>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.mail.sender.default.config",
          "name": "org.nuxeo.mail.sender.default.config",
          "requirements": [],
          "resolutionOrder": 8,
          "services": [],
          "startOrder": 474,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.mail.sender.default.config\">\n\n  <extension target=\"org.nuxeo.mail.MailServiceComponent\" point=\"senders\">\n\n    <sender name=\"default\" class=\"org.nuxeo.mail.SMTPMailSender\">\n      <property name=\"mail.from\">noreply@nuxeo.com</property>\n      <property name=\"mail.transport.protocol\">smtp</property>\n      <property name=\"mail.smtp.host\">localhost</property>\n      <property name=\"mail.smtp.port\">25</property>\n    </sender>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/default-smtp-sender-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.hsts.config",
          "name": "org.nuxeo.hsts.config",
          "requirements": [],
          "resolutionOrder": 9,
          "services": [],
          "startOrder": 469,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.hsts.config\">\n\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/hsts-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.jwt.JWTService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.jwt.config/Contributions/org.nuxeo.ecm.jwt.config--configuration",
              "id": "org.nuxeo.ecm.jwt.config--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.jwt.JWTService",
                "name": "org.nuxeo.ecm.jwt.JWTService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"configuration\" target=\"org.nuxeo.ecm.jwt.JWTService\">\n    <configuration>\n      <defaultTTL>3600</defaultTTL>\n      <secret>********</secret>\n    </configuration>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.jwt.config",
          "name": "org.nuxeo.ecm.jwt.config",
          "requirements": [],
          "resolutionOrder": 10,
          "services": [],
          "startOrder": 189,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.jwt.config\">\n\n  <extension target=\"org.nuxeo.ecm.jwt.JWTService\" point=\"configuration\">\n    <configuration>\n      <defaultTTL>3600</defaultTTL>\n      <secret>********</secret>\n    </configuration>\n  </extension>\n\n</component>",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/jwt-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.kafka.defaultConfig",
          "name": "org.nuxeo.kafka.defaultConfig",
          "requirements": [],
          "resolutionOrder": 11,
          "services": [],
          "startOrder": 471,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.kafka.defaultConfig\">\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/kafka-config.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.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.digestauth.config/Contributions/org.nuxeo.ecm.platform.digestauth.config--directories",
              "id": "org.nuxeo.ecm.platform.digestauth.config--directories",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"digestauth\">\n      <schema>digestauth</schema>\n      <idField>username</idField>\n      <passwordField>password</passwordField>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.usermanager.UserService--userManager",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.digestauth.config/Contributions/org.nuxeo.ecm.platform.digestauth.config--userManager",
              "id": "org.nuxeo.ecm.platform.digestauth.config--userManager",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.usermanager.UserService",
                "name": "org.nuxeo.ecm.platform.usermanager.UserService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"userManager\" target=\"org.nuxeo.ecm.platform.usermanager.UserService\">\n    <userManager>\n      <digestAuthDirectory>digestauth</digestAuthDirectory>\n      <digestAuthRealm>NUXEO</digestAuthRealm>\n      <userCacheName>default-cache</userCacheName>\n    </userManager>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.digestauth.config",
          "name": "org.nuxeo.ecm.platform.digestauth.config",
          "requirements": [],
          "resolutionOrder": 12,
          "services": [],
          "startOrder": 254,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.digestauth.config\">\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"digestauth\" extends=\"template-directory\">\n      <schema>digestauth</schema>\n      <idField>username</idField>\n      <passwordField>password</passwordField>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.usermanager.UserService\" point=\"userManager\">\n    <userManager>\n      <digestAuthDirectory>digestauth</digestAuthDirectory>\n      <digestAuthRealm>NUXEO</digestAuthRealm>\n      <userCacheName>default-cache</userCacheName>\n    </userManager>\n  </extension>\n\n</component>",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/login-digest-config.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.runtime/org.nuxeo.runtime/org.nuxeo.ecm.directory.storage/Contributions/org.nuxeo.ecm.directory.storage--directories",
              "id": "org.nuxeo.ecm.directory.storage--directories",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-user\" name=\"userDirectory\">\n\n      <schema>user</schema>\n\n      <types>\n        <type>system</type>\n      </types>\n\n      <idField>username</idField>\n      <passwordField>password</passwordField>\n      <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\n      <autoincrementIdField>false</autoincrementIdField>\n      <dataFile>users.csv</dataFile>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n      <querySizeLimit>50</querySizeLimit>\n\n      <!-- comment <cache* /> tags to disable the cache -->\n      <cacheEntryName>user-entry-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>user-entry-cache-without-references</cacheEntryWithoutReferencesName>\n\n      <references>\n        <inverseReference directory=\"groupDirectory\" dualReferenceField=\"members\" field=\"groups\"/>\n      </references>\n\n    </directory>\n\n    <directory extends=\"template-group\" name=\"groupDirectory\">\n\n      <schema>group</schema>\n      <types>\n        <type>system</type>\n      </types>\n      <idField>groupname</idField>\n      <dataFile>groups.csv</dataFile>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n      <autoincrementIdField>false</autoincrementIdField>\n\n      <!-- comment <cache* /> tags to disable the cache -->\n      <cacheEntryName>group-entry-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>group-entry-cache-without-references</cacheEntryWithoutReferencesName>\n\n      <references>\n        <reference dataFile=\"user2group.csv\" directory=\"userDirectory\" field=\"members\" name=\"user2group\" source=\"groupId\" target=\"userId\"/>\n        <!-- Warning ! From Nuxeo 5.3.1, a wrong setting has been fixed. See\n        http://jira.nuxeo.org/browse/NXP-4401 . Nuxeo upgrades would need a fix in the\n        database (inverting parentGroupId and childGroupId in the group2group)  -->\n        <reference directory=\"groupDirectory\" field=\"subGroups\" name=\"group2group\" source=\"parentGroupId\" target=\"childGroupId\"/>\n        <inverseReference directory=\"groupDirectory\" dualReferenceField=\"subGroups\" field=\"parentGroups\"/>\n      </references>\n\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"digestauth\">\n      <schema>digestauth</schema>\n      <idField>username</idField>\n      <passwordField>password</passwordField>\n      <types>\n        <type>system</type>\n      </types>\n      <cacheEntryName>digestauth-entry-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>digestauth-entry-cache-without-references</cacheEntryWithoutReferencesName>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.directory.storage",
          "name": "org.nuxeo.ecm.directory.storage",
          "requirements": [
            "org.nuxeo.ecm.platform.digestauth.config"
          ],
          "resolutionOrder": 13,
          "services": [],
          "startOrder": 182,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.directory.storage\">\n\n  <require>org.nuxeo.ecm.platform.digestauth.config</require>\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"userDirectory\" extends=\"template-user\">\n\n      <schema>user</schema>\n\n      <types>\n        <type>system</type>\n      </types>\n\n      <idField>username</idField>\n      <passwordField>password</passwordField>\n      <passwordHashAlgorithm>SSHA</passwordHashAlgorithm>\n      <autoincrementIdField>false</autoincrementIdField>\n      <dataFile>users.csv</dataFile>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n      <querySizeLimit>50</querySizeLimit>\n\n      <!-- comment <cache* /> tags to disable the cache -->\n      <cacheEntryName>user-entry-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>user-entry-cache-without-references</cacheEntryWithoutReferencesName>\n\n      <references>\n        <inverseReference field=\"groups\" directory=\"groupDirectory\" dualReferenceField=\"members\"/>\n      </references>\n\n    </directory>\n\n    <directory name=\"groupDirectory\" extends=\"template-group\">\n\n      <schema>group</schema>\n      <types>\n        <type>system</type>\n      </types>\n      <idField>groupname</idField>\n      <dataFile>groups.csv</dataFile>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n      <autoincrementIdField>false</autoincrementIdField>\n\n      <!-- comment <cache* /> tags to disable the cache -->\n      <cacheEntryName>group-entry-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>group-entry-cache-without-references</cacheEntryWithoutReferencesName>\n\n      <references>\n        <reference field=\"members\" directory=\"userDirectory\" name=\"user2group\" source=\"groupId\" target=\"userId\" dataFile=\"user2group.csv\"/>\n        <!-- Warning ! From Nuxeo 5.3.1, a wrong setting has been fixed. See\n        http://jira.nuxeo.org/browse/NXP-4401 . Nuxeo upgrades would need a fix in the\n        database (inverting parentGroupId and childGroupId in the group2group)  -->\n        <reference field=\"subGroups\" directory=\"groupDirectory\" name=\"group2group\" source=\"parentGroupId\" target=\"childGroupId\"/>\n        <inverseReference field=\"parentGroups\" directory=\"groupDirectory\" dualReferenceField=\"subGroups\"/>\n      </references>\n\n    </directory>\n\n    <directory name=\"digestauth\" extends=\"template-directory\">\n      <schema>digestauth</schema>\n      <idField>username</idField>\n      <passwordField>password</passwordField>\n      <types>\n        <type>system</type>\n      </types>\n      <cacheEntryName>digestauth-entry-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>digestauth-entry-cache-without-references</cacheEntryWithoutReferencesName>\n    </directory>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/default-directories-bundle.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.management.ServerLocator--locators",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.management.ServerLocatorContrib/Contributions/org.nuxeo.runtime.management.ServerLocatorContrib--locators",
              "id": "org.nuxeo.runtime.management.ServerLocatorContrib--locators",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.management.ServerLocator",
                "name": "org.nuxeo.runtime.management.ServerLocator",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"locators\" target=\"org.nuxeo.runtime.management.ServerLocator\">\n    <locator default=\"true\" domain=\"jboss\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.management.ServerLocatorContrib",
          "name": "org.nuxeo.runtime.management.ServerLocatorContrib",
          "requirements": [],
          "resolutionOrder": 14,
          "services": [],
          "startOrder": 509,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.management.ServerLocatorContrib\">\n\n  <!-- nuxeo beans are published by default in the platform mbean server,\n       uncomment one of the following configuration if you want to use\n       another place-->\n\n  <!-- use jboss mbean server as default  -->\n  <extension target=\"org.nuxeo.runtime.management.ServerLocator\"\n    point=\"locators\">\n    <locator domain=\"jboss\" default=\"true\" />\n  </extension>\n\n  <!-- use a dedicated mbean server bound\n       server URL can be found in the server log at line \"Started a mbean server : ...\"\n  <extension target=\"org.nuxeo.runtime.management.ServerLocator\"\n    point=\"locators\">\n    <locator domain=\"org.nuxeo\" exist=\"false\" rmiPort=\"2100\"/>\n  </extension> -->\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/management-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.metrics.MetricsService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.metrics.default.contrib/Contributions/org.nuxeo.runtime.metrics.default.contrib--configuration",
              "id": "org.nuxeo.runtime.metrics.default.contrib--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.metrics.MetricsService",
                "name": "org.nuxeo.runtime.metrics.MetricsService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.metrics.MetricsService\">\n    <configuration enabled=\"true\">\n      <instrument enabled=\"true\" name=\"jvm\"/>\n      <instrument enabled=\"true\" name=\"log4j\"/>\n      <instrument enabled=\"true\" name=\"tomcat\"/>\n      <filter name=\"default\">\n        <allow>\n          <prefix>nuxeo.cache.default-cache.</prefix>\n          <prefix>nuxeo.cache.user-entry-cache.</prefix>\n          <prefix>nuxeo.cache.group-entry-cache.</prefix>\n          <prefix>nuxeo.directories.directory.userDirectory</prefix>\n          <prefix>nuxeo.directories.directory.groupDirectory</prefix>\n        </allow>\n        <deny>\n          <prefix>nuxeo.cache</prefix>\n          <prefix>nuxeo.directories</prefix>\n          <prefix>nuxeo.ActionService</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.trace</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.debug</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.info</prefix>\n          <prefix>org.nuxeo.ecm.core.management.standby.StandbyComponent</prefix>\n          <!-- Timer expansion to remove -->\n          <expansion>stddev</expansion>\n          <expansion>p75</expansion>\n          <expansion>p98</expansion>\n          <expansion>p999</expansion>\n          <expansion>m5_rate</expansion>\n          <expansion>m15_rate</expansion>\n          <expansion>mean_rate</expansion>\n        </deny>\n      </filter>\n      <filter name=\"minimal\">\n        <allow>\n          <prefix>jvm.threads</prefix>\n          <prefix>jvm.memory.heap</prefix>\n          <prefix>jvm.memory.total</prefix>\n          <prefix>jvm.garbage.G1_Old_Generation.time</prefix>\n          <prefix>jvm.garbage.G1_Young_Generation.time</prefix>\n        </allow>\n        <deny>\n          <prefix>jvm.</prefix>\n          <prefix>nuxeo.cache</prefix>\n          <prefix>nuxeo.work.queue</prefix>\n          <prefix>nuxeo.directories</prefix>\n          <prefix>nuxeo.ActionService</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.trace</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.info</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.debug</prefix>\n          <prefix>org.nuxeo.ecm.core.management.standby.StandbyComponent</prefix>\n          <!-- Timer expansion to remove -->\n          <expansion>stddev</expansion>\n          <expansion>min</expansion>\n          <expansion>p50</expansion>\n          <expansion>p75</expansion>\n          <expansion>p95</expansion>\n          <expansion>p98</expansion>\n          <expansion>p999</expansion>\n          <expansion>m5_rate</expansion>\n          <expansion>m15_rate</expansion>\n          <expansion>mean_rate</expansion>\n        </deny>\n      </filter>\n    </configuration>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.metrics.MetricsService--reporter",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.metrics.default.contrib/Contributions/org.nuxeo.runtime.metrics.default.contrib--reporter",
              "id": "org.nuxeo.runtime.metrics.default.contrib--reporter",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.metrics.MetricsService",
                "name": "org.nuxeo.runtime.metrics.MetricsService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"reporter\" target=\"org.nuxeo.runtime.metrics.MetricsService\">\n    <reporter class=\"org.nuxeo.runtime.metrics.reporter.JmxReporter\" enabled=\"true\" name=\"jmx\"/>\n\n    <reporter class=\"org.nuxeo.runtime.metrics.reporter.GraphiteReporter\" enabled=\"false\" name=\"graphite\" pollInterval=\"30\">\n      <option name=\"prefix\"/>\n      <option name=\"udp\">false</option>\n      <option name=\"host\">graphite</option>\n      <option name=\"port\">2003</option>\n    </reporter>\n\n    <reporter class=\"org.nuxeo.runtime.metrics.reporter.DatadogReporter\" enabled=\"false\" name=\"datadog\" pollInterval=\"60\">\n      <option name=\"hostname\"/>\n      <option name=\"apiKey\">********</option>\n      <option name=\"udp\">false</option>\n      <option name=\"host\">localhost</option>\n      <option name=\"port\">8125</option>\n      <option name=\"tags\">nuxeo</option>\n      <option name=\"emptyTimerAsCount\">false</option>\n    </reporter>\n\n    <reporter class=\"org.nuxeo.runtime.metrics.reporter.PrometheusReporter\" enabled=\"false\" name=\"prometheus\">\n      <option name=\"port\">9090</option>\n    </reporter>\n\n    <reporter class=\"org.nuxeo.runtime.metrics.reporter.JaegerReporter\" enabled=\"false\" name=\"jaeger\">\n      <option name=\"url\"/>\n      <option name=\"timeout\">10s</option>\n      <option name=\"maxAttributes\">128</option>\n      <option name=\"maxAnnotations\">128</option>\n      <option name=\"samplerProbability\">0</option>\n    </reporter>\n\n    <reporter class=\"org.nuxeo.runtime.metrics.reporter.ZipkinReporter\" enabled=\"false\" name=\"zipkin\">\n      <option name=\"url\"/>\n      <option name=\"timeout\">10s</option>\n      <option name=\"maxAttributes\">128</option>\n      <option name=\"maxAnnotations\">128</option>\n      <option name=\"samplerProbability\">0</option>\n    </reporter>\n\n    <reporter class=\"org.nuxeo.runtime.metrics.reporter.ZPageReporter\" enabled=\"false\" name=\"zpage\">\n      <option name=\"port\">8887</option>\n    </reporter>\n\n    <reporter class=\"org.nuxeo.runtime.metrics.reporter.DatadogTraceReporter\" enabled=\"false\" name=\"datadogTrace\">\n      <option name=\"url\">http://localhost:8126/v0.3/traces</option>\n      <option name=\"service\">nuxeo</option>\n      <option name=\"timeout\">10s</option>\n      <option name=\"maxAttributes\">128</option>\n      <option name=\"maxAnnotations\">128</option>\n      <option name=\"samplerProbability\">0</option>\n    </reporter>\n\n    <reporter class=\"org.nuxeo.runtime.stream.StreamMetricsNuxeoReporter\" enabled=\"true\" name=\"stream\" pollInterval=\"60\">\n    </reporter>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.metrics.default.contrib/Contributions/org.nuxeo.runtime.metrics.default.contrib--configuration1",
              "id": "org.nuxeo.runtime.metrics.default.contrib--configuration1",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <property name=\"metrics.streams.interval\">60s</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.metrics.default.contrib",
          "name": "org.nuxeo.runtime.metrics.default.contrib",
          "requirements": [],
          "resolutionOrder": 15,
          "services": [],
          "startOrder": 510,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.runtime.metrics.default.contrib\">\n\n  <extension target=\"org.nuxeo.runtime.metrics.MetricsService\" point=\"configuration\">\n    <configuration enabled=\"true\">\n      <instrument name=\"jvm\" enabled=\"true\"/>\n      <instrument name=\"log4j\" enabled=\"true\"/>\n      <instrument name=\"tomcat\" enabled=\"true\"/>\n      <filter name=\"default\">\n        <allow>\n          <prefix>nuxeo.cache.default-cache.</prefix>\n          <prefix>nuxeo.cache.user-entry-cache.</prefix>\n          <prefix>nuxeo.cache.group-entry-cache.</prefix>\n          <prefix>nuxeo.directories.directory.userDirectory</prefix>\n          <prefix>nuxeo.directories.directory.groupDirectory</prefix>\n        </allow>\n        <deny>\n          <prefix>nuxeo.cache</prefix>\n          <prefix>nuxeo.directories</prefix>\n          <prefix>nuxeo.ActionService</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.trace</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.debug</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.info</prefix>\n          <prefix>org.nuxeo.ecm.core.management.standby.StandbyComponent</prefix>\n          <!-- Timer expansion to remove -->\n          <expansion>stddev</expansion>\n          <expansion>p75</expansion>\n          <expansion>p98</expansion>\n          <expansion>p999</expansion>\n          <expansion>m5_rate</expansion>\n          <expansion>m15_rate</expansion>\n          <expansion>mean_rate</expansion>\n        </deny>\n      </filter>\n      <filter name=\"minimal\">\n        <allow>\n          <prefix>jvm.threads</prefix>\n          <prefix>jvm.memory.heap</prefix>\n          <prefix>jvm.memory.total</prefix>\n          <prefix>jvm.garbage.G1_Old_Generation.time</prefix>\n          <prefix>jvm.garbage.G1_Young_Generation.time</prefix>\n        </allow>\n        <deny>\n          <prefix>jvm.</prefix>\n          <prefix>nuxeo.cache</prefix>\n          <prefix>nuxeo.work.queue</prefix>\n          <prefix>nuxeo.directories</prefix>\n          <prefix>nuxeo.ActionService</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.trace</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.info</prefix>\n          <prefix>org.apache.logging.log4j.core.Appender.debug</prefix>\n          <prefix>org.nuxeo.ecm.core.management.standby.StandbyComponent</prefix>\n          <!-- Timer expansion to remove -->\n          <expansion>stddev</expansion>\n          <expansion>min</expansion>\n          <expansion>p50</expansion>\n          <expansion>p75</expansion>\n          <expansion>p95</expansion>\n          <expansion>p98</expansion>\n          <expansion>p999</expansion>\n          <expansion>m5_rate</expansion>\n          <expansion>m15_rate</expansion>\n          <expansion>mean_rate</expansion>\n        </deny>\n      </filter>\n    </configuration>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.metrics.MetricsService\" point=\"reporter\">\n    <reporter enabled=\"true\" name=\"jmx\" class=\"org.nuxeo.runtime.metrics.reporter.JmxReporter\"/>\n\n    <reporter enabled=\"false\" name=\"graphite\" pollInterval=\"30\" class=\"org.nuxeo.runtime.metrics.reporter.GraphiteReporter\">\n      <option name=\"prefix\"/>\n      <option name=\"udp\">false</option>\n      <option name=\"host\">graphite</option>\n      <option name=\"port\">2003</option>\n    </reporter>\n\n    <reporter enabled=\"false\" name=\"datadog\" pollInterval=\"60\" class=\"org.nuxeo.runtime.metrics.reporter.DatadogReporter\">\n      <option name=\"hostname\"/>\n      <option name=\"apiKey\">********</option>\n      <option name=\"udp\">false</option>\n      <option name=\"host\">localhost</option>\n      <option name=\"port\">8125</option>\n      <option name=\"tags\">nuxeo</option>\n      <option name=\"emptyTimerAsCount\">false</option>\n    </reporter>\n\n    <reporter enabled=\"false\" name=\"prometheus\" class=\"org.nuxeo.runtime.metrics.reporter.PrometheusReporter\">\n      <option name=\"port\">9090</option>\n    </reporter>\n\n    <reporter enabled=\"false\" name=\"jaeger\" class=\"org.nuxeo.runtime.metrics.reporter.JaegerReporter\">\n      <option name=\"url\"/>\n      <option name=\"timeout\">10s</option>\n      <option name=\"maxAttributes\">128</option>\n      <option name=\"maxAnnotations\">128</option>\n      <option name=\"samplerProbability\">0</option>\n    </reporter>\n\n    <reporter enabled=\"false\" name=\"zipkin\" class=\"org.nuxeo.runtime.metrics.reporter.ZipkinReporter\">\n      <option name=\"url\"/>\n      <option name=\"timeout\">10s</option>\n      <option name=\"maxAttributes\">128</option>\n      <option name=\"maxAnnotations\">128</option>\n      <option name=\"samplerProbability\">0</option>\n    </reporter>\n\n    <reporter enabled=\"false\" name=\"zpage\" class=\"org.nuxeo.runtime.metrics.reporter.ZPageReporter\">\n      <option name=\"port\">8887</option>\n    </reporter>\n\n    <reporter enabled=\"false\" name=\"datadogTrace\" class=\"org.nuxeo.runtime.metrics.reporter.DatadogTraceReporter\">\n      <option name=\"url\">http://localhost:8126/v0.3/traces</option>\n      <option name=\"service\">nuxeo</option>\n      <option name=\"timeout\">10s</option>\n      <option name=\"maxAttributes\">128</option>\n      <option name=\"maxAnnotations\">128</option>\n      <option name=\"samplerProbability\">0</option>\n    </reporter>\n\n    <reporter enabled=\"true\" name=\"stream\" pollInterval=\"60\" class=\"org.nuxeo.runtime.stream.StreamMetricsNuxeoReporter\">\n    </reporter>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <property name=\"metrics.streams.interval\">60s</property>\n  </extension>\n\n</component>",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/metrics-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.ec.notification.service.NotificationService--generalSettings",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.ear.config.notification/Contributions/org.nuxeo.ecm.platform.ear.config.notification--generalSettings",
              "id": "org.nuxeo.ecm.platform.ear.config.notification--generalSettings",
              "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": "2025.7.12",
              "xml": "<extension point=\"generalSettings\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n    <settings>\n      <serverPrefix>http://localhost:8080/nuxeo/</serverPrefix>\n      <eMailSubjectPrefix>[Nuxeo] </eMailSubjectPrefix>\n      <mailSessionJndiName>java:comp/env/Mail</mailSessionJndiName>\n    </settings>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.ear.config.notification",
          "name": "org.nuxeo.ecm.platform.ear.config.notification",
          "requirements": [],
          "resolutionOrder": 16,
          "services": [],
          "startOrder": 257,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.ear.config.notification\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n    point=\"generalSettings\">\n    <settings>\n      <serverPrefix>http://localhost:8080/nuxeo/</serverPrefix>\n      <eMailSubjectPrefix>[Nuxeo] </eMailSubjectPrefix>\n      <mailSessionJndiName>java:comp/env/Mail</mailSessionJndiName>\n    </settings>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/notification-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.scheduler.core.service.SchedulerRegistryService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.mail.scheduler.config/Contributions/org.nuxeo.ecm.platform.mail.scheduler.config--schedule",
              "id": "org.nuxeo.ecm.platform.mail.scheduler.config--schedule",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "name": "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\">\n\n    <schedule id=\"mailReceivedSchedule\">\n      <eventId>MailReceivedEvent</eventId>\n      <eventCategory>default</eventCategory>\n      <!-- every half hour of every day -->\n      <cronExpression>0 0/30 * * * ?</cronExpression>\n    </schedule>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.mail.scheduler.config",
          "name": "org.nuxeo.ecm.platform.mail.scheduler.config",
          "requirements": [],
          "resolutionOrder": 17,
          "services": [],
          "startOrder": 284,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.scheduler.config\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService\"\n    point=\"schedule\">\n\n    <schedule id=\"mailReceivedSchedule\">\n      <eventId>MailReceivedEvent</eventId>\n      <eventCategory>default</eventCategory>\n      <!-- every half hour of every day -->\n      <cronExpression>0 0/30 * * * ?</cronExpression>\n    </schedule>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/nxmail-scheduler-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.search.client.repository--searchClient",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.core.search.client.repository.contrib/Contributions/org.nuxeo.ecm.core.search.client.repository.contrib--searchClient",
              "id": "org.nuxeo.ecm.core.search.client.repository.contrib--searchClient",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.search.client.repository",
                "name": "org.nuxeo.ecm.core.search.client.repository",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"searchClient\" target=\"org.nuxeo.ecm.core.search.client.repository\">\n    <searchClient name=\"repository\" repository=\"default\" searchIndex=\"repository\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.search--searchIndex",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.core.search.client.repository.contrib/Contributions/org.nuxeo.ecm.core.search.client.repository.contrib--searchIndex",
              "id": "org.nuxeo.ecm.core.search.client.repository.contrib--searchIndex",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.search",
                "name": "org.nuxeo.ecm.core.search",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"searchIndex\" target=\"org.nuxeo.ecm.core.search\">\n    <searchIndex default=\"true\" name=\"repository\" repository=\"default\" searchClient=\"repository\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.core.search.client.repository.contrib",
          "name": "org.nuxeo.ecm.core.search.client.repository.contrib",
          "requirements": [],
          "resolutionOrder": 18,
          "services": [],
          "startOrder": 141,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.search.client.repository.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.search.client.repository\" point=\"searchClient\">\n    <searchClient name=\"repository\" searchIndex=\"repository\" repository=\"default\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.search\" point=\"searchIndex\">\n    <searchIndex name=\"repository\" searchClient=\"repository\" repository=\"default\" default=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/repository-search-client-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--replacers",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.query.api.PageProviderservice.replacers.defaultConfig/Contributions/org.nuxeo.ecm.platform.query.api.PageProviderservice.replacers.defaultConfig--replacers",
              "id": "org.nuxeo.ecm.platform.query.api.PageProviderservice.replacers.defaultConfig--replacers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"replacers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n    <replacer withClass=\"org.nuxeo.ecm.platform.query.nxql.SearchServicePageProvider\">\n      <provider>default_search</provider>\n      <provider>default_document_suggestion</provider>\n      <provider>DEFAULT_DOCUMENT_SUGGESTION</provider>\n      <provider>advanced_document_content</provider>\n      <provider>domain_documents</provider>\n      <provider>expired_search</provider>\n      <provider>default_trash_search</provider>\n      <provider>REST_API_SEARCH_ADAPTER</provider>\n      <provider>all_collections</provider>\n      <provider>simple_search</provider>\n      <provider>document_content</provider>\n      <provider>section_content</provider>\n      <provider>document_trash_content</provider>\n      <provider>orderable_document_content</provider>\n      <provider>document_picker</provider>\n      <provider>GET_TASKS_FOR_ACTORS</provider>\n      <provider>GET_TASKS_FOR_ACTORS_OR_DELEGATED_ACTORS</provider>\n      <provider>GET_TASKS_FOR_PROCESS</provider>\n      <provider>GET_TASKS_FOR_PROCESS_AND_ACTORS</provider>\n      <provider>GET_TASKS_FOR_PROCESS_AND_NODE</provider>\n      <provider>GET_TASKS_FOR_TARGET_DOCUMENT</provider>\n      <provider>GET_TASKS_FOR_TARGET_DOCUMENTS</provider>\n      <provider>GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS</provider>\n      <provider>GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS_OR_DELEGATED_ACTORS</provider>\n    </replacer>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.platform.query.api.PageProviderservice.replacers.defaultConfig",
          "name": "org.nuxeo.ecm.platform.query.api.PageProviderservice.replacers.defaultConfig",
          "requirements": [],
          "resolutionOrder": 19,
          "services": [],
          "startOrder": 330,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.query.api.PageProviderservice.replacers.defaultConfig\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"replacers\">\n    <replacer withClass=\"org.nuxeo.ecm.platform.query.nxql.SearchServicePageProvider\">\n      <provider>default_search</provider>\n      <provider>default_document_suggestion</provider>\n      <provider>DEFAULT_DOCUMENT_SUGGESTION</provider>\n      <provider>advanced_document_content</provider>\n      <provider>domain_documents</provider>\n      <provider>expired_search</provider>\n      <provider>default_trash_search</provider>\n      <provider>REST_API_SEARCH_ADAPTER</provider>\n      <provider>all_collections</provider>\n      <provider>simple_search</provider>\n      <provider>document_content</provider>\n      <provider>section_content</provider>\n      <provider>document_trash_content</provider>\n      <provider>orderable_document_content</provider>\n      <provider>document_picker</provider>\n      <provider>GET_TASKS_FOR_ACTORS</provider>\n      <provider>GET_TASKS_FOR_ACTORS_OR_DELEGATED_ACTORS</provider>\n      <provider>GET_TASKS_FOR_PROCESS</provider>\n      <provider>GET_TASKS_FOR_PROCESS_AND_ACTORS</provider>\n      <provider>GET_TASKS_FOR_PROCESS_AND_NODE</provider>\n      <provider>GET_TASKS_FOR_TARGET_DOCUMENT</provider>\n      <provider>GET_TASKS_FOR_TARGET_DOCUMENTS</provider>\n      <provider>GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS</provider>\n      <provider>GET_TASKS_FOR_TARGET_DOCUMENTS_AND_ACTORS_OR_DELEGATED_ACTORS</provider>\n    </replacer>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/search-classreplacer-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.datasource--datasources",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.sql.kvstore/Contributions/org.nuxeo.sql.kvstore--datasources",
              "id": "org.nuxeo.sql.kvstore--datasources",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.datasource",
                "name": "org.nuxeo.runtime.datasource",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"datasources\" target=\"org.nuxeo.runtime.datasource\">\n    <link global=\"jdbc/nuxeo\" name=\"jdbc/keyvaluestore\" type=\"javax.sql.DataSource\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.kv.KeyValueService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.sql.kvstore/Contributions/org.nuxeo.sql.kvstore--configuration",
              "id": "org.nuxeo.sql.kvstore--configuration",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.kv.KeyValueService",
                "name": "org.nuxeo.runtime.kv.KeyValueService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.kv.KeyValueService\">\n    <store class=\"org.nuxeo.ecm.core.storage.sql.kv.SQLKeyValueStore\" name=\"default\">\n      <property name=\"datasource\">jdbc/keyvaluestore</property>\n      <property name=\"table\">kv</property>\n    </store>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.sql.kvstore",
          "name": "org.nuxeo.sql.kvstore",
          "requirements": [],
          "resolutionOrder": 20,
          "services": [],
          "startOrder": 514,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.sql.kvstore\">\n\n  <extension target=\"org.nuxeo.runtime.datasource\" point=\"datasources\">\n    <link name=\"jdbc/keyvaluestore\" global=\"jdbc/nuxeo\" type=\"javax.sql.DataSource\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.kv.KeyValueService\" point=\"configuration\">\n    <store name=\"default\" class=\"org.nuxeo.ecm.core.storage.sql.kv.SQLKeyValueStore\">\n      <property name=\"datasource\">jdbc/keyvaluestore</property>\n      <property name=\"table\">kv</property>\n    </store>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/sql-kvstore-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.transientstore.TransientStorageComponent--store",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.core.transient.store.config/Contributions/org.nuxeo.ecm.core.transient.store.config--store",
              "id": "org.nuxeo.ecm.core.transient.store.config--store",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "name": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"store\" target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\">\n\n        <store class=\"org.nuxeo.ecm.core.transientstore.keyvalueblob.KeyValueBlobTransientStore\" name=\"default\">\n      <targetMaxSizeMB>-1</targetMaxSizeMB>\n      <absoluteMaxSizeMB>-1</absoluteMaxSizeMB>\n      <firstLevelTTL>4320</firstLevelTTL>\n      <secondLevelTTL>10</secondLevelTTL>\n    </store>\n\n    <store name=\"authorizationRequestStore\">\n      <firstLevelTTL>10</firstLevelTTL>\n      <secondLevelTTL>0</secondLevelTTL>\n    </store>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.core.transient.store.config",
          "name": "org.nuxeo.ecm.core.transient.store.config",
          "requirements": [],
          "resolutionOrder": 21,
          "services": [],
          "startOrder": 162,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.transient.store.config\">\n\n  <extension target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\"\n    point=\"store\">\n\n        <store name=\"default\" class=\"org.nuxeo.ecm.core.transientstore.keyvalueblob.KeyValueBlobTransientStore\">\n      <targetMaxSizeMB>-1</targetMaxSizeMB>\n      <absoluteMaxSizeMB>-1</absoluteMaxSizeMB>\n      <firstLevelTTL>4320</firstLevelTTL>\n      <secondLevelTTL>10</secondLevelTTL>\n    </store>\n\n    <store name=\"authorizationRequestStore\">\n      <firstLevelTTL>10</firstLevelTTL>\n      <secondLevelTTL>0</secondLevelTTL>\n    </store>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/transient-store-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.uidgen.UIDGeneratorService--sequencers",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.uidsequencer.config/Contributions/org.nuxeo.uidsequencer.config--sequencers",
              "id": "org.nuxeo.uidsequencer.config--sequencers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
                "name": "org.nuxeo.ecm.core.uidgen.UIDGeneratorService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"sequencers\" target=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorService\">\n    <sequencer class=\"org.nuxeo.ecm.core.uidgen.KeyValueStoreUIDSequencer\" name=\"default\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.uidsequencer.config",
          "name": "org.nuxeo.uidsequencer.config",
          "requirements": [],
          "resolutionOrder": 22,
          "services": [],
          "startOrder": 523,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.uidsequencer.config\">\n\n  <extension target=\"org.nuxeo.ecm.core.uidgen.UIDGeneratorService\" point=\"sequencers\">\n    <sequencer name=\"default\" class=\"org.nuxeo.ecm.core.uidgen.KeyValueStoreUIDSequencer\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/uidsequencer-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.services.event.EventService",
          "declaredStartOrder": null,
          "documentation": "\n  An event notification service. Notifications are grouped by topics.\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nAn event notification service. Notifications are grouped by topics.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.EventService",
              "descriptors": [
                "org.nuxeo.runtime.services.event.ListenerDescriptor"
              ],
              "documentation": "Enable clients to register event listeners to one or more topics\n",
              "documentationHtml": "<p>\nEnable clients to register event listeners to one or more topics</p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.EventService/ExtensionPoints/org.nuxeo.runtime.EventService--listeners",
              "id": "org.nuxeo.runtime.EventService--listeners",
              "label": "listeners (org.nuxeo.runtime.EventService)",
              "name": "listeners",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.EventService",
          "name": "org.nuxeo.runtime.EventService",
          "requirements": [],
          "resolutionOrder": 23,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.EventService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.EventService/Services/org.nuxeo.runtime.services.event.EventService",
              "id": "org.nuxeo.runtime.services.event.EventService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 663,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.runtime.EventService\" version=\"1.0\">\n  <documentation>\n  An event notification service. Notifications are grouped by topics.\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.services.event.EventService\"/>\n\n  <service>\n\t  <provide interface=\"org.nuxeo.runtime.services.event.EventService\" />\n  </service>\n\n\n  <extension-point name=\"listeners\">\n    <documentation>Enable clients to register event listeners to one or more topics</documentation>\n    <object class=\"org.nuxeo.runtime.services.event.ListenerDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/EventService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.RuntimeComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.RuntimeComponent",
          "name": "org.nuxeo.runtime.RuntimeComponent",
          "requirements": [],
          "resolutionOrder": 24,
          "services": [],
          "startOrder": 666,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.RuntimeComponent\" version=\"1.0\">\n  <implementation class=\"org.nuxeo.runtime.RuntimeComponent\"/>\n</component>\n",
          "xmlFileName": "/OSGI-INF/RuntimeComponent.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.services.resource.ResourceService",
          "declaredStartOrder": null,
          "documentation": "\n  An event notification service. Notifications are grouped by topics.\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nAn event notification service. Notifications are grouped by topics.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.services.resource.ResourceService",
              "descriptors": [
                "org.nuxeo.runtime.services.resource.ResourceDescriptor"
              ],
              "documentation": "Enable clients to register resources contained in their bundle under a name\n",
              "documentationHtml": "<p>\nEnable clients to register resources contained in their bundle under a name</p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.services.resource.ResourceService/ExtensionPoints/org.nuxeo.runtime.services.resource.ResourceService--resources",
              "id": "org.nuxeo.runtime.services.resource.ResourceService--resources",
              "label": "resources (org.nuxeo.runtime.services.resource.ResourceService)",
              "name": "resources",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.services.resource.ResourceService",
          "name": "org.nuxeo.runtime.services.resource.ResourceService",
          "requirements": [],
          "resolutionOrder": 25,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.services.resource.ResourceService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.services.resource.ResourceService/Services/org.nuxeo.runtime.services.resource.ResourceService",
              "id": "org.nuxeo.runtime.services.resource.ResourceService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 674,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.runtime.services.resource.ResourceService\" version=\"1.0\">\n  <documentation>\n  An event notification service. Notifications are grouped by topics.\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.services.resource.ResourceService\"/>\n\n  <service>\n\t  <provide interface=\"org.nuxeo.runtime.services.resource.ResourceService\" />\n  </service>\n\n\n  <extension-point name=\"resources\">\n    <documentation>Enable clients to register resources contained in their bundle under a name</documentation>\n    <object class=\"org.nuxeo.runtime.services.resource.ResourceDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/ResourceService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.api.login.LoginComponent",
          "declaredStartOrder": null,
          "documentation": "\n  The login component is defining the login infrastructure\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe login component is defining the login infrastructure\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.LoginComponent",
          "name": "org.nuxeo.runtime.LoginComponent",
          "requirements": [],
          "resolutionOrder": 26,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.LoginComponent",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.LoginComponent/Services/org.nuxeo.runtime.api.login.LoginService",
              "id": "org.nuxeo.runtime.api.login.LoginService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 665,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.runtime.LoginComponent\" version=\"1.0\">\n  <documentation>\n  The login component is defining the login infrastructure\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.api.login.LoginComponent\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.api.login.LoginService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/LoginComponent.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.api.login.LoginAsComponent",
          "declaredStartOrder": null,
          "documentation": "\n    The LoginAs component provides the service that allows to login\n    in the system as the given user without\n    checking the password\n  \n",
          "documentationHtml": "<p>\nThe LoginAs component provides the service that allows to login\nin the system as the given user without\nchecking the password\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.LoginAsComponent",
              "descriptors": [
                "org.nuxeo.runtime.api.login.LoginAsDescriptor"
              ],
              "documentation": "\n      The extension point to define the implementation of the service provided by the component\n    \n",
              "documentationHtml": "<p>\nThe extension point to define the implementation of the service provided by the component\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.LoginAsComponent/ExtensionPoints/org.nuxeo.runtime.LoginAsComponent--implementation",
              "id": "org.nuxeo.runtime.LoginAsComponent--implementation",
              "label": "implementation (org.nuxeo.runtime.LoginAsComponent)",
              "name": "implementation",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.LoginAsComponent",
          "name": "org.nuxeo.runtime.LoginAsComponent",
          "requirements": [],
          "resolutionOrder": 27,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.LoginAsComponent",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.LoginAsComponent/Services/org.nuxeo.runtime.api.login.LoginAs",
              "id": "org.nuxeo.runtime.api.login.LoginAs",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 664,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.runtime.LoginAsComponent\" version=\"1.0\">\n\n  <documentation>\n    The LoginAs component provides the service that allows to login\n    in the system as the given user without\n    checking the password\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.api.login.LoginAsComponent\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.api.login.LoginAs\"/>\n  </service>\n\n  <extension-point name=\"implementation\">\n    <documentation>\n      The extension point to define the implementation of the service provided by the component\n    </documentation>\n    <object class=\"org.nuxeo.runtime.api.login.LoginAsDescriptor\"/>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/LoginAsComponent.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.model.persistence.ContributionPersistenceComponent",
          "declaredStartOrder": null,
          "documentation": "\n  Manage (install and persist) external contributions.\n\n  The default contribution storage is implemented using the file system.\n  To change the storage implementation you must contribute to the extension point storage.\n\n  Note that you should contribute only one storage implementation.\n  Contributing multiple implementation may lead to inconsistent states (changing the storage on the fly).\n\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nManage (install and persist) external contributions.\n</p><p>\nThe default contribution storage is implemented using the file system.\nTo change the storage implementation you must contribute to the extension point storage.\n</p><p>\nNote that you should contribute only one storage implementation.\nContributing multiple implementation may lead to inconsistent states (changing the storage on the fly).\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.model.persistence",
              "descriptors": [
                "org.nuxeo.runtime.model.persistence.ContributionStorageDescriptor"
              ],
              "documentation": "\n    A class specifying the storage implementation to use. This class must implement the\n    org.nuxeo.runtime.model.persistence.ContributionStorage interface.\n    \n",
              "documentationHtml": "<p>\nA class specifying the storage implementation to use. This class must implement the\norg.nuxeo.runtime.model.persistence.ContributionStorage interface.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.model.persistence/ExtensionPoints/org.nuxeo.runtime.model.persistence--listeners",
              "id": "org.nuxeo.runtime.model.persistence--listeners",
              "label": "listeners (org.nuxeo.runtime.model.persistence)",
              "name": "listeners",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.model.persistence",
          "name": "org.nuxeo.runtime.model.persistence",
          "requirements": [],
          "resolutionOrder": 28,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.model.persistence",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.model.persistence/Services/org.nuxeo.runtime.model.persistence.ContributionPersistenceManager",
              "id": "org.nuxeo.runtime.model.persistence.ContributionPersistenceManager",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 672,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.runtime.model.persistence\" version=\"1.0\">\n  <documentation>\n  Manage (install and persist) external contributions.\n\n  The default contribution storage is implemented using the file system.\n  To change the storage implementation you must contribute to the extension point storage.\n\n  Note that you should contribute only one storage implementation.\n  Contributing multiple implementation may lead to inconsistent states (changing the storage on the fly).\n\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.model.persistence.ContributionPersistenceComponent\"/>\n\n  <service>\n\t  <provide interface=\"org.nuxeo.runtime.model.persistence.ContributionPersistenceManager\" />\n  </service>\n\n  <extension-point name=\"listeners\">\n    <documentation>\n    A class specifying the storage implementation to use. This class must implement the\n    org.nuxeo.runtime.model.persistence.ContributionStorage interface.\n    </documentation>\n    <object class=\"org.nuxeo.runtime.model.persistence.ContributionStorageDescriptor\"/>\n  </extension-point>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/ContributionPersistence.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.trackers.files.FileEventTracker",
          "declaredStartOrder": 2147483647,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.trackers.files",
              "descriptors": [
                "org.nuxeo.runtime.trackers.files.FileEventTracker.EnableThreadsTracking"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.trackers.files/ExtensionPoints/org.nuxeo.runtime.trackers.files--configs",
              "id": "org.nuxeo.runtime.trackers.files--configs",
              "label": "configs (org.nuxeo.runtime.trackers.files)",
              "name": "configs",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.trackers.files",
          "name": "org.nuxeo.runtime.trackers.files",
          "requirements": [
            "org.nuxeo.runtime.EventService"
          ],
          "resolutionOrder": 29,
          "services": [],
          "startOrder": 680,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.trackers.files\">\n\n\t<require>org.nuxeo.runtime.EventService</require>\n\n\t<implementation class=\"org.nuxeo.runtime.trackers.files.FileEventTracker\" />\n\n\t<extension-point name=\"configs\">\n\t\t<object class=\"org.nuxeo.runtime.trackers.files.FileEventTracker$EnableThreadsTracking\" />\n\t</extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/FileEventTracker.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.services.config.ConfigurationServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The ConfigurationService service holds application configuration properties that are used at runtime. This\n    service should not include properties that are needed at startup.\n\n    @since 7.4\n  \n",
          "documentationHtml": "<p>\nThe ConfigurationService service holds application configuration properties that are used at runtime. This\nservice should not include properties that are needed at startup.\n</p><p>\n&#64;since 7.4\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.ConfigurationService",
              "descriptors": [
                "org.nuxeo.runtime.services.config.ConfigurationPropertyDescriptor"
              ],
              "documentation": "\n      The configuration extension point allows to define named properties.\n\n      Properties can be marked as list and if defined many times, values will be appended as comma separated values.\n\n      You can override existing list property with the override attribute.\n\n      Example:\n\n      <code>\n    <property name=\"nuxeo.jsf.enableDoubleClickShield\">true</property>\n    <property name=\"nuxeo.jsf.useAjaxTabs\">false</property>\n    <property list=\"true\" name=\"nuxeo.list.value\">foo</property>\n    <property name=\"nuxeo.list.value\">bar</property>\n    <property name=\"nuxeo.list.value\" override=\"true\">I'd like to make sure value is not foo,bar anymore</property>\n</code>\n",
              "documentationHtml": "<p>\nThe configuration extension point allows to define named properties.\n</p><p>\nProperties can be marked as list and if defined many times, values will be appended as comma separated values.\n</p><p>\nYou can override existing list property with the override attribute.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;property name&#61;&#34;nuxeo.jsf.enableDoubleClickShield&#34;&gt;true&lt;/property&gt;\n    &lt;property name&#61;&#34;nuxeo.jsf.useAjaxTabs&#34;&gt;false&lt;/property&gt;\n    &lt;property list&#61;&#34;true&#34; name&#61;&#34;nuxeo.list.value&#34;&gt;foo&lt;/property&gt;\n    &lt;property name&#61;&#34;nuxeo.list.value&#34;&gt;bar&lt;/property&gt;\n    &lt;property name&#61;&#34;nuxeo.list.value&#34; override&#61;&#34;true&#34;&gt;I&#39;d like to make sure value is not foo,bar anymore&lt;/property&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.ConfigurationService/ExtensionPoints/org.nuxeo.runtime.ConfigurationService--configuration",
              "id": "org.nuxeo.runtime.ConfigurationService--configuration",
              "label": "configuration (org.nuxeo.runtime.ConfigurationService)",
              "name": "configuration",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.ConfigurationService",
          "name": "org.nuxeo.runtime.ConfigurationService",
          "requirements": [],
          "resolutionOrder": 30,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.ConfigurationService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.ConfigurationService/Services/org.nuxeo.runtime.services.config.ConfigurationService",
              "id": "org.nuxeo.runtime.services.config.ConfigurationService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 662,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.ConfigurationService\">\n\n  <documentation>\n    The ConfigurationService service holds application configuration properties that are used at runtime. This\n    service should not include properties that are needed at startup.\n\n    @since 7.4\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.runtime.services.config.ConfigurationServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.services.config.ConfigurationService\" />\n  </service>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      The configuration extension point allows to define named properties.\n\n      Properties can be marked as list and if defined many times, values will be appended as comma separated values.\n\n      You can override existing list property with the override attribute.\n\n      Example:\n\n      <code>\n        <property name=\"nuxeo.jsf.enableDoubleClickShield\">true</property>\n        <property name=\"nuxeo.jsf.useAjaxTabs\">false</property>\n\n        <property name=\"nuxeo.list.value\" list=\"true\">foo</property>\n        <property name=\"nuxeo.list.value\">bar</property>\n        <property name=\"nuxeo.list.value\" override=\"true\">I'd like to make sure value is not foo,bar anymore</property>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.runtime.services.config.ConfigurationPropertyDescriptor\" />\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/ConfigurationService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.capabilities.CapabilitiesServiceImpl",
          "declaredStartOrder": -2000,
          "documentation": "\n    The Capabilities service allows registration of the capabilities.\n  \n",
          "documentationHtml": "<p>\nThe Capabilities service allows registration of the capabilities.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.capabilities.CapabilitiesService",
          "name": "org.nuxeo.runtime.capabilities.CapabilitiesService",
          "requirements": [],
          "resolutionOrder": 31,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.capabilities.CapabilitiesService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.capabilities.CapabilitiesService/Services/org.nuxeo.runtime.capabilities.CapabilitiesService",
              "id": "org.nuxeo.runtime.capabilities.CapabilitiesService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 0,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.capabilities.CapabilitiesService\" version=\"1.0\">\n\n  <documentation>\n    The Capabilities service allows registration of the capabilities.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.capabilities.CapabilitiesService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.runtime.capabilities.CapabilitiesServiceImpl\" />\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/capabilities-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.datasource--datasources",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.template.directory.sql/Contributions/org.nuxeo.template.directory.sql--datasources",
              "id": "org.nuxeo.template.directory.sql--datasources",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.datasource",
                "name": "org.nuxeo.runtime.datasource",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"datasources\" target=\"org.nuxeo.runtime.datasource\">\n    <link global=\"jdbc/nuxeo\" name=\"jdbc/nxsqldirectory\" type=\"javax.sql.DataSource\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.sql.SQLDirectoryFactory--directories",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.template.directory.sql/Contributions/org.nuxeo.template.directory.sql--directories",
              "id": "org.nuxeo.template.directory.sql--directories",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.sql.SQLDirectoryFactory",
                "name": "org.nuxeo.ecm.directory.sql.SQLDirectoryFactory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.sql.SQLDirectoryFactory\">\n\n    <directory name=\"template-directory\" template=\"true\">\n      <dataSource>java:/nxsqldirectory</dataSource>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"template-user\" template=\"true\">\n      <table>users</table>\n      <computeMultiTenantId>false</computeMultiTenantId>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"template-group\" template=\"true\">\n      <table>groups</table>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.template.directory.sql",
          "name": "org.nuxeo.template.directory.sql",
          "requirements": [
            "org.nuxeo.ecm.directories"
          ],
          "resolutionOrder": 292,
          "services": [],
          "startOrder": 517,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.template.directory.sql\">\n\n  <extension target=\"org.nuxeo.runtime.datasource\" point=\"datasources\">\n    <link name=\"jdbc/nxsqldirectory\" global=\"jdbc/nuxeo\" type=\"javax.sql.DataSource\" />\n  </extension>\n\n  <require>org.nuxeo.ecm.directories</require>\n  <extension target=\"org.nuxeo.ecm.directory.sql.SQLDirectoryFactory\" point=\"directories\">\n\n    <directory name=\"template-directory\" template=\"true\">\n      <dataSource>java:/nxsqldirectory</dataSource>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n    </directory>\n\n    <directory name=\"template-user\" template=\"true\" extends=\"template-directory\">\n      <table>users</table>\n      <computeMultiTenantId>false</computeMultiTenantId>\n    </directory>\n\n    <directory name=\"template-group\" template=\"true\" extends=\"template-directory\">\n      <table>groups</table>\n    </directory>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/sql-template-directory-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.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.core.work.config.default/Contributions/org.nuxeo.ecm.core.work.config.default--queues",
              "id": "org.nuxeo.ecm.core.work.config.default--queues",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"common\">\n      <name>Common Shared Queue for Nuxeo Works</name>\n      <maxThreads>4</maxThreads>\n      <category>aceStatusUpdatedListener</category>\n      <category>binary_metadata_work</category>\n      <category>blobManagerDeleteMarkedBlobsListener</category>\n      <category>checkedInCommentListener</category>\n      <category>cleanOpenTasksOnWorkflowDone</category>\n      <category>ConversionWork</category>\n      <category>CounterListener</category>\n      <category>deleteRoutingTaskListener</category>\n      <category>docRemovedCommentListener</category>\n      <category>documenttemplate-type-binding</category>\n      <category>findRetentionExpired</category>\n      <category>fulltextExtractor</category>\n      <category>notificationListener</category>\n      <category>nuxeoDriveGroupUpdateListener</category>\n      <category>nuxeoDriveVirtualEventLoggerListener</category>\n      <category>opchainpclistener</category>\n      <category>orphanVersionRemoverListener</category>\n      <category>permissionNotificationListener</category>\n      <category>removeDocumentRoutesForDeletedDocument</category>\n      <category>removeTasksForDeletedDocumentRoute</category>\n      <category>storedRenditionsCleanup</category>\n      <category>taggedVersionListener</category>\n      <category>triggerEsclationRules</category>\n      <category>unicityListener</category>\n      <category>UserProfileImporterWork</category>\n      <category>wopiDiscoveryRefreshListener</category>\n      <category>wopiLocksExpiration</category>\n      <category>workflowInstancesCleanup</category>\n    </queue>\n    <queue id=\"updateThumbListener\">\n      <maxThreads>4</maxThreads>\n      <category>updateThumbListener</category>\n    </queue>\n    <queue id=\"raclupdate\">\n      <name>Queue for DBS Read ACL update Works</name>\n      <maxThreads>4</maxThreads>\n      <category>security</category>\n    </queue>\n    <queue id=\"pictureViewsGeneration\">\n      <maxThreads>2</maxThreads>\n      <category>pictureViewsGenerationListener</category>\n      <category>pictureViewsGeneration</category>\n    </queue>\n    <queue id=\"videoConversion\">\n      <maxThreads>2</maxThreads>\n      <category>videoConversion</category>\n      <category>videoInfo</category>\n      <category>videoStoryboard</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.ecm.core.work.config.default",
          "name": "org.nuxeo.ecm.core.work.config.default",
          "requirements": [
            "org.nuxeo.ecm.collections.workmanager",
            "org.nuxeo.ecm.platform.picture.workmanager",
            "org.nuxeo.ecm.platform.video.workmanager",
            "org.nuxeo.ecm.automation.core.impl.workmanager",
            "org.nuxeo.ecm.core.work.config"
          ],
          "resolutionOrder": 493,
          "services": [],
          "startOrder": 168,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.work.config.default\" version=\"1.0\">\n  <require>org.nuxeo.ecm.core.work.config</require>\n  <require>org.nuxeo.ecm.automation.core.impl.workmanager</require>\n  <require>org.nuxeo.ecm.collections.workmanager</require>\n  <require>org.nuxeo.ecm.platform.picture.workmanager</require>\n  <require>org.nuxeo.ecm.platform.video.workmanager</require>\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"common\">\n      <name>Common Shared Queue for Nuxeo Works</name>\n      <maxThreads>4</maxThreads>\n      <category>aceStatusUpdatedListener</category>\n      <category>binary_metadata_work</category>\n      <category>blobManagerDeleteMarkedBlobsListener</category>\n      <category>checkedInCommentListener</category>\n      <category>cleanOpenTasksOnWorkflowDone</category>\n      <category>ConversionWork</category>\n      <category>CounterListener</category>\n      <category>deleteRoutingTaskListener</category>\n      <category>docRemovedCommentListener</category>\n      <category>documenttemplate-type-binding</category>\n      <category>findRetentionExpired</category>\n      <category>fulltextExtractor</category>\n      <category>notificationListener</category>\n      <category>nuxeoDriveGroupUpdateListener</category>\n      <category>nuxeoDriveVirtualEventLoggerListener</category>\n      <category>opchainpclistener</category>\n      <category>orphanVersionRemoverListener</category>\n      <category>permissionNotificationListener</category>\n      <category>removeDocumentRoutesForDeletedDocument</category>\n      <category>removeTasksForDeletedDocumentRoute</category>\n      <category>storedRenditionsCleanup</category>\n      <category>taggedVersionListener</category>\n      <category>triggerEsclationRules</category>\n      <category>unicityListener</category>\n      <category>UserProfileImporterWork</category>\n      <category>wopiDiscoveryRefreshListener</category>\n      <category>wopiLocksExpiration</category>\n      <category>workflowInstancesCleanup</category>\n    </queue>\n    <queue id=\"updateThumbListener\">\n      <maxThreads>4</maxThreads>\n      <category>updateThumbListener</category>\n    </queue>\n    <queue id=\"raclupdate\">\n      <name>Queue for DBS Read ACL update Works</name>\n      <maxThreads>4</maxThreads>\n      <category>security</category>\n    </queue>\n    <queue id=\"pictureViewsGeneration\">\n      <maxThreads>2</maxThreads>\n      <category>pictureViewsGenerationListener</category>\n      <category>pictureViewsGeneration</category>\n    </queue>\n    <queue id=\"videoConversion\">\n      <maxThreads>2</maxThreads>\n      <category>videoConversion</category>\n      <category>videoInfo</category>\n      <category>videoStoryboard</category>\n    </queue>\n  </extension>\n</component>\n\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/workmanager-queue-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--logConfig",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.stream.defaultConfig/Contributions/org.nuxeo.stream.defaultConfig--logConfig",
              "id": "org.nuxeo.stream.defaultConfig--logConfig",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"logConfig\" target=\"org.nuxeo.runtime.stream.service\">\n    <logConfig default=\"true\" name=\"default\" type=\"mem\">\n    </logConfig>\n    <logConfig name=\"bulk\" type=\"mem\">\n      <log name=\"bulk/command\" size=\"2\"/>\n      <log name=\"bulk/status\" size=\"2\"/>\n      <log name=\"bulk/done\" size=\"1\"/>\n      <match name=\"bulk/\"/>\n    </logConfig>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--logConfig",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.stream.defaultConfig/Contributions/org.nuxeo.stream.defaultConfig--logConfig1",
              "id": "org.nuxeo.stream.defaultConfig--logConfig1",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"logConfig\" target=\"org.nuxeo.runtime.stream.service\">\n     <logConfig name=\"audit\" type=\"mem\">\n       <match name=\"audit/\"/>\n     </logConfig>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--logConfig",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.stream.defaultConfig/Contributions/org.nuxeo.stream.defaultConfig--logConfig2",
              "id": "org.nuxeo.stream.defaultConfig--logConfig2",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"logConfig\" target=\"org.nuxeo.runtime.stream.service\">\n     <logConfig name=\"pubsub\" type=\"mem\">\n       <option name=\"retention\">4h</option>\n       <log name=\"pubsub/pubsub\" size=\"1\"/>\n       <match name=\"pubsub/\"/>\n     </logConfig>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.pubsub.PubSubService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.stream.defaultConfig/Contributions/org.nuxeo.stream.defaultConfig--configuration",
              "id": "org.nuxeo.stream.defaultConfig--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.pubsub.PubSubService",
                "name": "org.nuxeo.runtime.pubsub.PubSubService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.pubsub.PubSubService\">\n    <provider class=\"org.nuxeo.runtime.pubsub.StreamPubSubProvider\">\n      <option name=\"logName\">pubsub/pubsub</option>\n      <option name=\"codec\">avro</option>\n    </provider>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.stream.defaultConfig",
          "name": "org.nuxeo.stream.defaultConfig",
          "requirements": [
            "org.nuxeo.audit.service.AuditComponent",
            "org.nuxeo.runtime.stream.service",
            "org.nuxeo.ecm.core.bulk.config"
          ],
          "resolutionOrder": 612,
          "services": [],
          "startOrder": 515,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.stream.defaultConfig\">\n    <require>org.nuxeo.runtime.stream.service</require>\n  <require>org.nuxeo.ecm.core.bulk.config</require>\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"logConfig\">\n    <logConfig name=\"default\" type=\"mem\" default=\"true\">\n    </logConfig>\n    <logConfig name=\"bulk\" type=\"mem\">\n      <log name=\"bulk/command\" size=\"2\" />\n      <log name=\"bulk/status\" size=\"2\" />\n      <log name=\"bulk/done\" size=\"1\" />\n      <match name=\"bulk/\" />\n    </logConfig>\n  </extension>\n  <require>org.nuxeo.audit.service.AuditComponent</require>\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"logConfig\">\n     <logConfig name=\"audit\" type=\"mem\">\n       <match name=\"audit/\" />\n     </logConfig>\n  </extension>\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"logConfig\">\n     <logConfig name=\"pubsub\" type=\"mem\">\n       <option name=\"retention\">4h</option>\n       <log name=\"pubsub/pubsub\" size=\"1\" />\n       <match name=\"pubsub/\" />\n     </logConfig>\n  </extension>\n  <extension target=\"org.nuxeo.runtime.pubsub.PubSubService\" point=\"configuration\">\n    <provider class=\"org.nuxeo.runtime.pubsub.StreamPubSubProvider\">\n      <option name=\"logName\">pubsub/pubsub</option>\n      <option name=\"codec\">avro</option>\n    </provider>\n  </extension>\n</component>\n",
          "xmlFileName": "/opt/nuxeo/server/nxserver/config/stream-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime/org.nuxeo.runtime.started",
          "name": "org.nuxeo.runtime.started",
          "requirements": [],
          "resolutionOrder": 681,
          "services": [],
          "startOrder": 511,
          "version": "2025.7.12",
          "xmlFileContent": "",
          "xmlFileName": "",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-runtime-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime",
      "id": "org.nuxeo.runtime",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtim\r\n e.api.login,org.nuxeo.runtime.deploy,org.nuxeo.runtime.expression,org.n\r\n uxeo.runtime.model,org.nuxeo.runtime.model.impl,org.nuxeo.runtime.model\r\n .persistence,org.nuxeo.runtime.model.persistence.fs,org.nuxeo.runtime.o\r\n sgi,org.nuxeo.runtime.service,org.nuxeo.runtime.service.sample,org.nuxe\r\n o.runtime.services.adapter,org.nuxeo.runtime.services.adapter.extension\r\n ,org.nuxeo.runtime.services.deployment,org.nuxeo.runtime.services.event\r\n ,org.nuxeo.runtime.services.resource,org.nuxeo.runtime.services.streami\r\n ng,org.nuxeo.runtime.transaction,org.nuxeo.runtime.util\r\nPrivate-Package: .\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Name: Nuxeo Eclipse Runtime\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nEclipse-BuddyPolicy: registered\r\nNuxeo-Component: OSGI-INF/EventService.xml,OSGI-INF/RuntimeComponent.xml\r\n ,OSGI-INF/ResourceService.xml,OSGI-INF/LoginComponent.xml,OSGI-INF/Logi\r\n nAsComponent.xml,OSGI-INF/ContributionPersistence.xml,OSGI-INF/FileEven\r\n tTracker.xml,OSGI-INF/FileEventTrackerConfig.xml,OSGI-INF/Configuration\r\n Service.xml,OSGI-INF/capabilities-service.xml\r\nBundle-Activator: org.nuxeo.runtime.osgi.OSGiRuntimeActivator\r\nImport-Package: javax.management,javax.naming,javax.naming.spi,javax.sec\r\n urity.auth,javax.security.auth.callback,javax.security.auth.login,javax\r\n .security.auth.spi,javax.sql,javax.xml.parsers,org.apache.commons.io,or\r\n g.apache.commons.jexl;resolution:=optional,org.apache.commons.logging,o\r\n rg.nuxeo.common,org.nuxeo.common.collections,org.nuxeo.common.logging,o\r\n rg.nuxeo.common.utils,org.nuxeo.common.xmap,org.nuxeo.common.xmap.annot\r\n ation,org.osgi.framework,org.osgi.service.packageadmin,org.w3c.dom,org.\r\n w3c.dom.ranges\r\nBundle-SymbolicName: org.nuxeo.runtime;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 681,
      "minResolutionOrder": 0,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-drive-rest-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.drive.core",
          "org.nuxeo.drive.elasticsearch",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.drive.rest.api",
      "components": [],
      "fileName": "nuxeo-drive-rest-api-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm",
      "hierarchyPath": "/grp:org.nuxeo.ecm/grp:org.nuxeo.drive/org.nuxeo.drive.rest.api",
      "id": "org.nuxeo.drive.rest.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: nuxeo-drive-rest-api\r\nBundle-SymbolicName: org.nuxeo.drive.rest.api;singleton:=true\r\nFragment-Host: org.nuxeo.ecm.platform.restapi.server\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-comment-workflow",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.comment",
          "org.nuxeo.ecm.platform.comment.api",
          "org.nuxeo.ecm.platform.comment.restapi",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.comment.workflow",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.workflow/org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationService",
          "name": "org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationService",
          "requirements": [],
          "resolutionOrder": 275,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.workflow/org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationService/Services/org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationService",
              "id": "org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 243,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationService\"\n version=\"1.0\">\n\n <service>\n  <provide\n   interface=\"org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationService\" />\n </service>\n\n <implementation\n  class=\"org.nuxeo.ecm.platform.comment.workflow.services.CommentsModerationServiceImpl\" />\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comments-moderation-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.ec.notification.service.NotificationService--notifications",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.workflow/org.nuxeo.ecm.platform.comment.workflow.notification.service.NotificationContrib/Contributions/org.nuxeo.ecm.platform.comment.workflow.notification.service.NotificationContrib--notifications",
              "id": "org.nuxeo.ecm.platform.comment.workflow.notification.service.NotificationContrib--notifications",
              "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": "2025.7.12",
              "xml": "<extension point=\"notifications\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n\n    <notification autoSubscribed=\"false\" availableIn=\"Workspace\" channel=\"email\" enabled=\"true\" label=\"notifications.name.CommentPublication\" name=\"CommentPublication\" subject=\"Comment published\" template=\"comment\">\n      <event name=\"commentPublished\"/>\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.workflow/org.nuxeo.ecm.platform.comment.workflow.notification.service.NotificationContrib/Contributions/org.nuxeo.ecm.platform.comment.workflow.notification.service.NotificationContrib--templates",
              "id": "org.nuxeo.ecm.platform.comment.workflow.notification.service.NotificationContrib--templates",
              "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": "2025.7.12",
              "xml": "<extension point=\"templates\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n\n    <template name=\"comment\" src=\"templates/comment.ftl\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.workflow/org.nuxeo.ecm.platform.comment.workflow.notification.service.NotificationContrib",
          "name": "org.nuxeo.ecm.platform.comment.workflow.notification.service.NotificationContrib",
          "requirements": [],
          "resolutionOrder": 276,
          "services": [],
          "startOrder": 240,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component\n    name=\"org.nuxeo.ecm.platform.comment.workflow.notification.service.NotificationContrib\">\n\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\"\n      point=\"notifications\">\n\n    <notification name=\"CommentPublication\" channel=\"email\" enabled=\"true\" availableIn=\"Workspace\"\n      autoSubscribed=\"false\" template=\"comment\" subject=\"Comment published\" label=\"notifications.name.CommentPublication\">\n      <event name=\"commentPublished\"/>\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=\"comment\" src=\"templates/comment.ftl\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/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.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.workflow/org.nuxeo.ecm.platform.comment.workflow.operation.contrib/Contributions/org.nuxeo.ecm.platform.comment.workflow.operation.contrib--operations",
              "id": "org.nuxeo.ecm.platform.comment.workflow.operation.contrib--operations",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.platform.comment.workflow.ModerateCommentOperation\"/>\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.comment/org.nuxeo.ecm.platform.comment.workflow/org.nuxeo.ecm.platform.comment.workflow.operation.contrib/Contributions/org.nuxeo.ecm.platform.comment.workflow.operation.contrib--chains",
              "id": "org.nuxeo.ecm.platform.comment.workflow.operation.contrib--chains",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <chain id=\"acceptComment\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Comment.Moderate\">\n        <param name=\"accept\" type=\"boolean\">true</param>\n      </operation>\n    </chain>\n\n    <chain id=\"rejectComment\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Comment.Moderate\">\n        <param name=\"accept\" type=\"boolean\">false</param>\n      </operation>\n    </chain>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.workflow/org.nuxeo.ecm.platform.comment.workflow.operation.contrib",
          "name": "org.nuxeo.ecm.platform.comment.workflow.operation.contrib",
          "requirements": [],
          "resolutionOrder": 277,
          "services": [],
          "startOrder": 241,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.workflow.operation.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.platform.comment.workflow.ModerateCommentOperation\" />\n  </extension>\n\n  <extension point=\"chains\"\n    target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <chain id=\"acceptComment\">\n      <operation id=\"Context.FetchDocument\" />\n      <operation id=\"Comment.Moderate\">\n        <param type=\"boolean\" name=\"accept\">true</param>\n      </operation>\n    </chain>\n\n    <chain id=\"rejectComment\">\n      <operation id=\"Context.FetchDocument\" />\n      <operation id=\"Comment.Moderate\">\n        <param type=\"boolean\" name=\"accept\">false</param>\n      </operation>\n    </chain>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/comment-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.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.workflow/org.nuxeo.ecm.platform.comment.workflow.pageprovider/Contributions/org.nuxeo.ecm.platform.comment.workflow.pageprovider--providers",
              "id": "org.nuxeo.ecm.platform.comment.workflow.pageprovider--providers",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"GET_COMMENT_MODERATION_TASKS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:targetDocumentId = ? AND nt:actors/* IN (?) AND\n        nt:task_variables/*/key = 'commentId' AND nt:task_variables/*/value = ?\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.workflow/org.nuxeo.ecm.platform.comment.workflow.pageprovider",
          "name": "org.nuxeo.ecm.platform.comment.workflow.pageprovider",
          "requirements": [],
          "resolutionOrder": 278,
          "services": [],
          "startOrder": 242,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.comment.workflow.pageprovider\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"GET_COMMENT_MODERATION_TASKS\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Task' AND\n        ecm:currentLifeCycleState\n        NOT IN ('ended', 'cancelled') AND ecm:isProxy =\n        0 AND nt:targetDocumentId = ? AND nt:actors/* IN (?) AND\n        nt:task_variables/*/key = 'commentId' AND nt:task_variables/*/value = ?\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
        }
      ],
      "fileName": "nuxeo-platform-comment-workflow-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.comment/org.nuxeo.ecm.platform.comment.workflow",
      "id": "org.nuxeo.ecm.platform.comment.workflow",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM Comment Workflow implementation\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.comment.workflow;singleton=t\r\n rue\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: core,stateful\r\nNuxeo-Component: OSGI-INF/comments-moderation-service.xml,OSGI-INF/notif\r\n ication-contrib.xml,OSGI-INF/comment-operation-contrib.xml,OSGI-INF/com\r\n ment-pageprovider-contrib.xml\r\nRequire-Bundle: org.nuxeo.ecm.platform.comment.api, org.nuxeo.ecm.core.a\r\n pi\r\n\r\n",
      "maxResolutionOrder": 278,
      "minResolutionOrder": 275,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.comment.api",
        "org.nuxeo.ecm.core.api"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-template-rendering-rest",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.template.manager",
          "org.nuxeo.template.manager.api",
          "org.nuxeo.template.manager.jxls",
          "org.nuxeo.template.manager.rest",
          "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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
            "encoding": "UTF-8",
            "length": 3342,
            "mimeType": "text/plain",
            "name": "ReadMe.md"
          }
        ],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.template.manager.rest",
      "components": [
        {
          "@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.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.rest/org.nuxeo.platform.TemplateSources.rest.doctypes/Contributions/org.nuxeo.platform.TemplateSources.rest.doctypes--doctype",
              "id": "org.nuxeo.platform.TemplateSources.rest.doctypes--doctype",
              "registrationOrder": 41,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Document\" name=\"WebTemplateSource\">\n      <schema name=\"common\"/>\n      <schema name=\"note\"/>\n      <schema name=\"files\"/>\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 append=\"true\" name=\"Folder\">\n      <subtypes>\n        <type>WebTemplateSource</type>\n      </subtypes>\n    </doctype>\n    <doctype append=\"true\" name=\"Workspace\">\n      <subtypes>\n        <type>WebTemplateSource</type>\n      </subtypes>\n    </doctype>\n    <doctype append=\"true\" name=\"TemplateRoot\">\n      <subtypes>\n        <type>WebTemplateSource</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.rest/org.nuxeo.platform.TemplateSources.rest.doctypes",
          "name": "org.nuxeo.platform.TemplateSources.rest.doctypes",
          "requirements": [
            "org.nuxeo.platform.TemplateSources.doctypes"
          ],
          "resolutionOrder": 643,
          "services": [],
          "startOrder": 488,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.rest.doctypes\">\n\n  <require>org.nuxeo.platform.TemplateSources.doctypes</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"WebTemplateSource\" extends=\"Document\">\n      <schema name=\"common\"/>\n      <schema name=\"note\"/>\n      <schema name=\"files\"/>\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=\"Folder\" append=\"true\">\n      <subtypes>\n        <type>WebTemplateSource</type>\n      </subtypes>\n    </doctype>\n    <doctype name=\"Workspace\" append=\"true\">\n      <subtypes>\n        <type>WebTemplateSource</type>\n      </subtypes>\n    </doctype>\n    <doctype name=\"TemplateRoot\" append=\"true\">\n      <subtypes>\n        <type>WebTemplateSource</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.rest/org.nuxeo.platform.TemplateSources.rest.types.contrib/Contributions/org.nuxeo.platform.TemplateSources.rest.types.contrib--types",
              "id": "org.nuxeo.platform.TemplateSources.rest.types.contrib--types",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type coretype=\"WebTemplateSource\" id=\"WebTemplateSource\">\n      <label>WebTemplateSource</label>\n      <icon>/icons/webtemplate.png</icon>\n      <bigIcon>/icons/webtemplate_100.png</bigIcon>\n      <default-view>view_documents</default-view>\n      <category>SimpleDocument</category>\n    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.rest/org.nuxeo.platform.TemplateSources.rest.types.contrib",
          "name": "org.nuxeo.platform.TemplateSources.rest.types.contrib",
          "requirements": [],
          "resolutionOrder": 644,
          "services": [],
          "startOrder": 489,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.rest.types.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\"\n    point=\"types\">\n\n    <type id=\"WebTemplateSource\" coretype=\"WebTemplateSource\">\n      <label>WebTemplateSource</label>\n      <icon>/icons/webtemplate.png</icon>\n      <bigIcon>/icons/webtemplate_100.png</bigIcon>\n      <default-view>view_documents</default-view>\n      <category>SimpleDocument</category>\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.rest/org.nuxeo.platform.TemplateSources.jxrs.lifecycle.contrib/Contributions/org.nuxeo.platform.TemplateSources.jxrs.lifecycle.contrib--types",
              "id": "org.nuxeo.platform.TemplateSources.jxrs.lifecycle.contrib--types",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"WebTemplateSource\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.rest/org.nuxeo.platform.TemplateSources.jxrs.lifecycle.contrib",
          "name": "org.nuxeo.platform.TemplateSources.jxrs.lifecycle.contrib",
          "requirements": [
            "org.nuxeo.platform.TemplateSources.lifecycle.contrib"
          ],
          "resolutionOrder": 645,
          "services": [],
          "startOrder": 481,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.platform.TemplateSources.jxrs.lifecycle.contrib\">\n\n  <require>org.nuxeo.platform.TemplateSources.lifecycle.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"WebTemplateSource\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/life-cycle-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "Adds helper function to manage REST resources urls\n      <ul>\n    <li>rest.getResourceUrl(resourceName)</li>\n</ul>\n",
              "documentationHtml": "<p>\nAdds helper function to manage REST resources urls\n</p><ul><li>rest.getResourceUrl(resourceName)</li></ul>",
              "extensionPoint": "org.nuxeo.template.service.TemplateProcessorComponent--contextExtension",
              "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.rest/org.nuxeo.template.service.rest.contrib/Contributions/org.nuxeo.template.service.rest.contrib--contextExtension",
              "id": "org.nuxeo.template.service.rest.contrib--contextExtension",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"contextExtension\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>Adds helper function to manage REST resources urls\n      <ul>\n        <li>rest.getResourceUrl(resourceName)</li>\n      </ul>\n    </documentation>\n\n    <contextFactory class=\"org.nuxeo.template.rest.context.ExtensionFactory\" name=\"rest\">\n    </contextFactory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.rest/org.nuxeo.template.service.rest.contrib",
          "name": "org.nuxeo.template.service.rest.contrib",
          "requirements": [
            "org.nuxeo.template.service.defaultContrib"
          ],
          "resolutionOrder": 646,
          "services": [],
          "startOrder": 521,
          "version": "2025.7.12",
          "xmlFileContent": "<component\n  name=\"org.nuxeo.template.service.rest.contrib\">\n\n  <require>org.nuxeo.template.service.defaultContrib</require>\n\n  <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"contextExtension\">\n\n    <documentation>Adds helper function to manage REST resources urls\n      <ul>\n        <li>rest.getResourceUrl(resourceName)</li>\n      </ul>\n    </documentation>\n\n    <contextFactory name=\"rest\" class=\"org.nuxeo.template.rest.context.ExtensionFactory\">\n    </contextFactory>\n\n  </extension>\n\n\n </component>",
          "xmlFileName": "/OSGI-INF/templateprocessor-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-template-rendering-rest-2025.7.12.jar",
      "groupId": "org.nuxeo.template.rendering",
      "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.rest",
      "id": "org.nuxeo.template.manager.rest",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM Document template Manager REST Binding\r\nBundle-SymbolicName: org.nuxeo.template.manager.rest;singleton:=true\r\nBundle-Version: 1.0.0\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-contrib.\r\n xml\r\nNuxeo-WebModule: org.nuxeo.template.rest.RestTemplatesApplication;name=D\r\n ocumentTemplates\r\n\r\n",
      "maxResolutionOrder": 646,
      "minResolutionOrder": 643,
      "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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
        "encoding": "UTF-8",
        "length": 3342,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-dmk-adaptor",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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": "2025.7.12"
            }
          ],
          "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": "2025.7.12",
              "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": 166,
          "services": [],
          "startOrder": 555,
          "version": "2025.7.12",
          "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-2025.7.12.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\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: dmk-adaptor\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 5.7.0.qualifier\r\nBundle-SymbolicName: org.nuxeo.dmk-adaptor\r\nNuxeo-Component: OSGI-INF/dmk-adaptor.xml\r\n\r\n",
      "maxResolutionOrder": 166,
      "minResolutionOrder": 166,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-cache",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.cache",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.cache.CacheServiceImpl",
          "declaredStartOrder": 95,
          "documentation": "\n    Service providing a unified cache management system.\n  \n",
          "documentationHtml": "<p>\nService providing a unified cache management system.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.cache.CacheService",
              "descriptors": [
                "org.nuxeo.ecm.core.cache.CacheDescriptor"
              ],
              "documentation": "\n      Extension Point to define a new cache .\n      <cache\n    class=\"org.nuxeo.ecm.core.cache.InMemoryCacheImpl\" name=\"newCache\">\n    <ttl>20</ttl>\n    <option name=\"maxSize\">10</option>\n    <option name=\"concurrencyLevel\">10</option>\n</cache>\n\n      The class attribute may specify a class that implements the CacheManagement interface.\n      The default implementation 'org.nuxeo.ecm.core.cache.InMemoryCacheImpl'\n      is based on Google Guava.\n      <p/>\n\n      The max size set the max number of elements contained in the cache\n      <p/>\n\n      The Time To Live define in minutes the time before the cache will be\n      destroyed\n      <p/>\n\n      The concurrency level, number of thread that can access at the same time\n      the cache\n    \n",
              "documentationHtml": "<p>\nExtension Point to define a new cache .\n\n20\n<select><option>10</option><option>10</option></select><li><p>\nThe class attribute may specify a class that implements the CacheManagement interface.\nThe default implementation &#39;org.nuxeo.ecm.core.cache.InMemoryCacheImpl&#39;\nis based on Google Guava.\n</p><p>\nThe max size set the max number of elements contained in the cache\n</p><p>\nThe Time To Live define in minutes the time before the cache will be\ndestroyed\n</p><p>\nThe concurrency level, number of thread that can access at the same time\nthe cache\n</p><p></p></li></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.cache/org.nuxeo.ecm.core.cache.CacheService/ExtensionPoints/org.nuxeo.ecm.core.cache.CacheService--caches",
              "id": "org.nuxeo.ecm.core.cache.CacheService--caches",
              "label": "caches (org.nuxeo.ecm.core.cache.CacheService)",
              "name": "caches",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.cache/org.nuxeo.ecm.core.cache.CacheService",
          "name": "org.nuxeo.ecm.core.cache.CacheService",
          "requirements": [],
          "resolutionOrder": 116,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.cache.CacheService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.cache/org.nuxeo.ecm.core.cache.CacheService/Services/org.nuxeo.ecm.core.cache.CacheService",
              "id": "org.nuxeo.ecm.core.cache.CacheService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 535,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.cache.CacheService\">\n\n  <documentation>\n    Service providing a unified cache management system.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.cache.CacheServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.cache.CacheService\" />\n  </service>\n\n  <extension-point name=\"caches\">\n\n    <documentation>\n      Extension Point to define a new cache .\n      <cache name=\"newCache\" class=\"org.nuxeo.ecm.core.cache.InMemoryCacheImpl\">\n        <ttl>20</ttl>\n        <option name=\"maxSize\">10</option>\n        <option name=\"concurrencyLevel\">10</option>\n      </cache>\n      The class attribute may specify a class that implements the CacheManagement interface.\n      The default implementation 'org.nuxeo.ecm.core.cache.InMemoryCacheImpl'\n      is based on Google Guava.\n      <p />\n      The max size set the max number of elements contained in the cache\n      <p />\n      The Time To Live define in minutes the time before the cache will be\n      destroyed\n      <p />\n      The concurrency level, number of thread that can access at the same time\n      the cache\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.cache.CacheDescriptor\" />\n\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/CacheService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
          "declaredStartOrder": null,
          "documentation": "\n    Provide a way to manage TransientStores where temporary data can be stored by key.\n   \n",
          "documentationHtml": "<p>\nProvide a way to manage TransientStores where temporary data can be stored by key.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.transientstore.api.TransientStoreConfig"
              ],
              "documentation": "\n    Allow to declare a transient store inside Nuxeo.\n    The store is identified by a name and the descriptor has several parameters :\n\n     <code>\n    <store name=\"microStore\">\n        <!--  a store that can not store anything  -->\n        <targetMaxSizeMB>0</targetMaxSizeMB>\n        <absoluteMaxSizeMB>0</absoluteMaxSizeMB>\n    </store>\n</code>\n\n\n     The store tag supports 2 attributes:\n     <ul>\n    <li>name, that is used to identify the store</li>\n    <li>class, that should reference an implementation of the TransientStoreProvider interface (will default to SimpleTransientStore))</li>\n</ul>\n\n\n     Nested configuration elements are :\n     <ul>\n    <li>targetMaxSizeMB : target size that ideally should never be exceeded</li>\n    <li>absoluteMaxSizeMB : size that must never be exceeded</li>\n    <li>firstLevelTTL : TTL in minutes of the first level cache</li>\n    <li>secondLevelTTL : TTL in minutes of the first level cache</li>\n</ul>\n",
              "documentationHtml": "<p>\nAllow to declare a transient store inside Nuxeo.\nThe store is identified by a name and the descriptor has several parameters :\n</p><p>\n</p><pre><code>    &lt;store name&#61;&#34;microStore&#34;&gt;\n        &lt;!--  a store that can not store anything  --&gt;\n        &lt;targetMaxSizeMB&gt;0&lt;/targetMaxSizeMB&gt;\n        &lt;absoluteMaxSizeMB&gt;0&lt;/absoluteMaxSizeMB&gt;\n    &lt;/store&gt;\n</code></pre><p>\nThe store tag supports 2 attributes:\n</p><ul><li>name, that is used to identify the store</li><li>class, that should reference an implementation of the TransientStoreProvider interface (will default to SimpleTransientStore))</li></ul>\n<p>\nNested configuration elements are :\n</p><ul><li>targetMaxSizeMB : target size that ideally should never be exceeded</li><li>absoluteMaxSizeMB : size that must never be exceeded</li><li>firstLevelTTL : TTL in minutes of the first level cache</li><li>secondLevelTTL : TTL in minutes of the first level cache</li></ul>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.cache/org.nuxeo.ecm.core.transientstore.TransientStorageComponent/ExtensionPoints/org.nuxeo.ecm.core.transientstore.TransientStorageComponent--store",
              "id": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent--store",
              "label": "store (org.nuxeo.ecm.core.transientstore.TransientStorageComponent)",
              "name": "store",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scheduler.SchedulerService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.cache/org.nuxeo.ecm.core.transientstore.TransientStorageComponent/Contributions/org.nuxeo.ecm.core.transientstore.TransientStorageComponent--schedule",
              "id": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent--schedule",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scheduler.SchedulerService",
                "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\">\n    <schedule id=\"transientStoreGC\">\n      <eventId>transientStoreGCStart</eventId>\n      <eventCategory>default</eventCategory>\n      <!-- cleanup 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.cache/org.nuxeo.ecm.core.transientstore.TransientStorageComponent/Contributions/org.nuxeo.ecm.core.transientstore.TransientStorageComponent--listener",
              "id": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent--listener",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.ecm.core.transientstore.TransientStorageGCTrigger\" name=\"transientStoreGCTrigger\" postCommit=\"false\">\n      <event>transientStoreGCStart</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.cache/org.nuxeo.ecm.core.transientstore.TransientStorageComponent/Contributions/org.nuxeo.ecm.core.transientstore.TransientStorageComponent--queues",
              "id": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent--queues",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"transientStorageGC\">\n      <name>Queue to run Transient Storage Garbage Collection Work</name>\n      <maxThreads>1</maxThreads>\n      <category>transientStorageGC</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.cache/org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
          "name": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
          "requirements": [],
          "resolutionOrder": 117,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.cache/org.nuxeo.ecm.core.transientstore.TransientStorageComponent/Services/org.nuxeo.ecm.core.transientstore.api.TransientStoreService",
              "id": "org.nuxeo.ecm.core.transientstore.api.TransientStoreService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 594,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\">\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.transientstore.api.TransientStoreService\" />\n  </service>\n\n   <documentation>\n    Provide a way to manage TransientStores where temporary data can be stored by key.\n   </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\" />\n\n  <extension-point name=\"store\">\n\n    <documentation>\n    Allow to declare a transient store inside Nuxeo.\n    The store is identified by a name and the descriptor has several parameters :\n\n     <code>\n       <store name=\"microStore\">\n          <!--  a store that can not store anything  -->\n          <targetMaxSizeMB>0</targetMaxSizeMB>\n          <absoluteMaxSizeMB>0</absoluteMaxSizeMB>\n       </store>\n     </code>\n\n     The store tag supports 2 attributes:\n     <ul>\n         <li>name, that is used to identify the store</li>\n         <li>class, that should reference an implementation of the TransientStoreProvider interface (will default to SimpleTransientStore))</li>\n     </ul>\n\n     Nested configuration elements are :\n     <ul>\n         <li>targetMaxSizeMB : target size that ideally should never be exceeded</li>\n         <li>absoluteMaxSizeMB : size that must never be exceeded</li>\n         <li>firstLevelTTL : TTL in minutes of the first level cache</li>\n         <li>secondLevelTTL : TTL in minutes of the first level cache</li>\n     </ul>\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.transientstore.api.TransientStoreConfig\"/>\n\n  </extension-point>\n\n  <extension\n    target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\"\n    point=\"schedule\">\n    <schedule id=\"transientStoreGC\">\n      <eventId>transientStoreGCStart</eventId>\n      <eventCategory>default</eventCategory>\n      <!-- cleanup every 15 minutes -->\n      <cronExpression>0 0/15 * * * ?</cronExpression>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"transientStoreGCTrigger\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.core.transientstore.TransientStorageGCTrigger\">\n      <event>transientStoreGCStart</event>\n    </listener>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"transientStorageGC\">\n      <name>Queue to run Transient Storage Garbage Collection Work</name>\n      <maxThreads>${nuxeo.work.queue.transientStorageGC.threads:=1}</maxThreads>\n      <category>transientStorageGC</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/transientstore-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-cache-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.cache",
      "id": "org.nuxeo.ecm.core.cache",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.ecm.core.cache\r\nNuxeo-Component: OSGI-INF/CacheService.xml,OSGI-INF/transientstore-servi\r\n ce.xml\r\n\r\n",
      "maxResolutionOrder": 117,
      "minResolutionOrder": 116,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-search-rest-api",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.restapi.server.search",
      "components": [],
      "fileName": "nuxeo-search-rest-api-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.restapi/org.nuxeo.ecm.platform.restapi.server.search",
      "id": "org.nuxeo.ecm.platform.restapi.server.search",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: nuxeo-search-rest-api\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.restapi.server.search;single\r\n ton:=true\r\nFragment-Host: org.nuxeo.ecm.platform.restapi.server\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-relations-default-config",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.relations.default.config",
      "components": [
        {
          "@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.relations/org.nuxeo.ecm.relations.default.config/org.nuxeo.ecm.directories.relations.web/Contributions/org.nuxeo.ecm.directories.relations.web--directories",
              "id": "org.nuxeo.ecm.directories.relations.web--directories",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"predicates\">\n      <schema>vocabulary</schema>\n      <idField>id</idField>\n      <table>relation_predicates</table>\n      <dataFile>directories/relation_predicates.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"inverse_predicates\">\n      <schema>vocabulary</schema>\n      <idField>id</idField>\n      <table>relation_inverse_predicates</table>\n      <dataFile>directories/relation_inverse_predicates.csv</dataFile>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.default.config/org.nuxeo.ecm.directories.relations.web",
          "name": "org.nuxeo.ecm.directories.relations.web",
          "requirements": [],
          "resolutionOrder": 396,
          "services": [],
          "startOrder": 174,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.directories.relations.web\">\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"predicates\" extends=\"template-directory\">\n      <schema>vocabulary</schema>\n      <idField>id</idField>\n      <table>relation_predicates</table>\n      <dataFile>directories/relation_predicates.csv</dataFile>\n    </directory>\n\n    <directory name=\"inverse_predicates\" extends=\"template-directory\">\n      <schema>vocabulary</schema>\n      <idField>id</idField>\n      <table>relation_inverse_predicates</table>\n      <dataFile>directories/relation_inverse_predicates.csv</dataFile>\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.relations.services.RelationService--graphs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.default.config/org.nuxeo.ecm.platform.relations.default.graph/Contributions/org.nuxeo.ecm.platform.relations.default.graph--graphs",
              "id": "org.nuxeo.ecm.platform.relations.default.graph--graphs",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.relations.services.RelationService",
                "name": "org.nuxeo.ecm.platform.relations.services.RelationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"graphs\" target=\"org.nuxeo.ecm.platform.relations.services.RelationService\">\n    <graph name=\"default\" type=\"core\">\n      <option name=\"doctype\">DefaultRelation</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/</namespace>\n        <namespace name=\"nuxeo\">http://www.nuxeo.org/document/uid/</namespace>\n      </namespaces>\n    </graph>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.default.config/org.nuxeo.ecm.platform.relations.default.graph",
          "name": "org.nuxeo.ecm.platform.relations.default.graph",
          "requirements": [],
          "resolutionOrder": 397,
          "services": [],
          "startOrder": 331,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.relations.default.graph\">\n\n  <extension target=\"org.nuxeo.ecm.platform.relations.services.RelationService\"\n    point=\"graphs\">\n    <graph name=\"default\" type=\"core\">\n      <option name=\"doctype\">DefaultRelation</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/</namespace>\n        <namespace name=\"nuxeo\">http://www.nuxeo.org/document/uid/</namespace>\n      </namespaces>\n    </graph>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/graph-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-relations-default-config-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.default.config",
      "id": "org.nuxeo.ecm.relations.default.config",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo ECM Relations Default Configuration\r\nBundle-SymbolicName: org.nuxeo.ecm.relations.default.config;singleton:=t\r\n rue\r\nBundle-Category: web,stateful\r\nRequire-Bundle: org.nuxeo.ecm.directory.sql\r\nNuxeo-Component: OSGI-INF/directories-contrib.xml,OSGI-INF/graph-contrib\r\n .xml\r\n\r\n",
      "maxResolutionOrder": 397,
      "minResolutionOrder": 396,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.directory.sql"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-automation-scripting",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.automation.core",
          "org.nuxeo.ecm.automation.features",
          "org.nuxeo.ecm.automation.io",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.automation.scripting",
      "components": [
        {
          "@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.scripting/org.nuxeo.ecm.core.automation.scripting.contextContrib/Contributions/org.nuxeo.ecm.core.automation.scripting.contextContrib--contextHelpers",
              "id": "org.nuxeo.ecm.core.automation.scripting.contextContrib--contextHelpers",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"contextHelpers\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <contextHelper class=\"org.nuxeo.automation.scripting.helper.Console\" id=\"Console\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.scripting/org.nuxeo.ecm.core.automation.scripting.contextContrib",
          "name": "org.nuxeo.ecm.core.automation.scripting.contextContrib",
          "requirements": [],
          "resolutionOrder": 56,
          "services": [],
          "startOrder": 106,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.automation.scripting.contextContrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n             point=\"contextHelpers\">\n    <contextHelper id=\"Console\" class=\"org.nuxeo.automation.scripting.helper.Console\"/>\n  </extension>\n\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.automation.scripting.internals.AutomationScriptingComponent--classFilter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.scripting/org.nuxeo.automation.scripting.classfilter/Contributions/org.nuxeo.automation.scripting.classfilter--classFilter",
              "id": "org.nuxeo.automation.scripting.classfilter--classFilter",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "name": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"classFilter\" target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\">\n    <classFilter>\n      <allow>java.text.SimpleDateFormat</allow>\n      <allow>java.util.ArrayList</allow>\n      <allow>java.util.Arrays</allow>\n      <allow>java.util.Collections</allow>\n      <allow>java.util.UUID</allow>\n      <allow>org.apache.commons.codec.digest.DigestUtils</allow>\n      <allow>org.nuxeo.runtime.transaction.TransactionHelper</allow>\n      <allow>org.nuxeo.ecm.core.api.Blobs</allow>\n      <allow>org.nuxeo.ecm.core.api.impl.blob.StringBlob</allow>\n      <allow>org.nuxeo.ecm.core.api.impl.blob.JSONBlob</allow>\n      <allow>org.nuxeo.ecm.core.api.NuxeoException</allow>\n    </classFilter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.scripting/org.nuxeo.automation.scripting.classfilter",
          "name": "org.nuxeo.automation.scripting.classfilter",
          "requirements": [],
          "resolutionOrder": 57,
          "services": [],
          "startOrder": 43,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.automation.scripting.classfilter\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\" point=\"classFilter\">\n    <classFilter>\n      <allow>java.text.SimpleDateFormat</allow>\n      <allow>java.util.ArrayList</allow>\n      <allow>java.util.Arrays</allow>\n      <allow>java.util.Collections</allow>\n      <allow>java.util.UUID</allow>\n      <allow>org.apache.commons.codec.digest.DigestUtils</allow>\n      <allow>org.nuxeo.runtime.transaction.TransactionHelper</allow>\n      <allow>org.nuxeo.ecm.core.api.Blobs</allow>\n      <allow>org.nuxeo.ecm.core.api.impl.blob.StringBlob</allow>\n      <allow>org.nuxeo.ecm.core.api.impl.blob.JSONBlob</allow>\n      <allow>org.nuxeo.ecm.core.api.NuxeoException</allow>\n    </classFilter>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/classfilter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
          "declaredStartOrder": null,
          "documentation": "\n    Automation Scripting is a Nuxeo module which provides ability to create and contribute Automation chain/operation in JavaScript.\n\n    For backward compatibility with version prior to 9.1, you may want to inline the context in the scripting parameters by contributing the\n    extension\n    <code>\n    <extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n        <property name=\"nuxeo.automation.scripting.inline-context-in-params\">true</property>\n    </extension>\n</code>\n",
          "documentationHtml": "<p>\nAutomation Scripting is a Nuxeo module which provides ability to create and contribute Automation chain/operation in JavaScript.\n</p><p>\nFor backward compatibility with version prior to 9.1, you may want to inline the context in the scripting parameters by contributing the\nextension\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.automation.scripting.inline-context-in-params&#34;&gt;true&lt;/property&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
              "descriptors": [
                "org.nuxeo.automation.scripting.internals.ScriptingOperationDescriptor"
              ],
              "documentation": "<code>\n    <scriptedOperation id=\"Scripting.HelloWorld\">\n        <inputType>string</inputType>\n        <outputType>string</outputType>\n        <param name=\"lang\" type=\"string\"/>\n        <script>\n          function run(input, params) {\n          if (params.lang === \"fr\") {\n          return \"Bonjour \" + input;\n          } else {\n          return \"Hello \" + input;\n          }\n          }\n        </script>\n    </scriptedOperation>\n</code>\n",
              "documentationHtml": "<p>\n</p><pre><code>    &lt;scriptedOperation id&#61;&#34;Scripting.HelloWorld&#34;&gt;\n        &lt;inputType&gt;string&lt;/inputType&gt;\n        &lt;outputType&gt;string&lt;/outputType&gt;\n        &lt;param name&#61;&#34;lang&#34; type&#61;&#34;string&#34;/&gt;\n        &lt;script&gt;\n          function run(input, params) {\n          if (params.lang &#61;&#61;&#61; &#34;fr&#34;) {\n          return &#34;Bonjour &#34; &#43; input;\n          } else {\n          return &#34;Hello &#34; &#43; input;\n          }\n          }\n        &lt;/script&gt;\n    &lt;/scriptedOperation&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.scripting/org.nuxeo.automation.scripting.internals.AutomationScriptingComponent/ExtensionPoints/org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation",
              "id": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--operation",
              "label": "operation (org.nuxeo.automation.scripting.internals.AutomationScriptingComponent)",
              "name": "operation",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
              "descriptors": [
                "org.nuxeo.automation.scripting.internals.ClassFilterDescriptor"
              ],
              "documentation": "\n      This can be used to allow additional classes to be accessible by the scripting engine.\n      The deny element can be used to disallow classes allowed by previous contributions.\n      By default, no classes are allowed.\n\n      @since 10.2\n      <code>\n    <classFilter>\n        <allow>java.util.ArrayList</allow>\n        <allow>java.util.UUID</allow>\n        <deny>java.io.File</deny>\n        <deny>java.lang.Class</deny>\n    </classFilter>\n</code>\n\n\n      To deny everything from previous contributions and only allow specific classes, use:\n      <code>\n    <classFilter>\n        <deny>*</deny>\n        <allow>java.util.ArrayList</allow>\n    </classFilter>\n</code>\n",
              "documentationHtml": "<p>\nThis can be used to allow additional classes to be accessible by the scripting engine.\nThe deny element can be used to disallow classes allowed by previous contributions.\nBy default, no classes are allowed.\n</p><p>\n&#64;since 10.2\n</p><p></p><pre><code>    &lt;classFilter&gt;\n        &lt;allow&gt;java.util.ArrayList&lt;/allow&gt;\n        &lt;allow&gt;java.util.UUID&lt;/allow&gt;\n        &lt;deny&gt;java.io.File&lt;/deny&gt;\n        &lt;deny&gt;java.lang.Class&lt;/deny&gt;\n    &lt;/classFilter&gt;\n</code></pre><p>\nTo deny everything from previous contributions and only allow specific classes, use:\n</p><p></p><pre><code>    &lt;classFilter&gt;\n        &lt;deny&gt;*&lt;/deny&gt;\n        &lt;allow&gt;java.util.ArrayList&lt;/allow&gt;\n    &lt;/classFilter&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.scripting/org.nuxeo.automation.scripting.internals.AutomationScriptingComponent/ExtensionPoints/org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--classFilter",
              "id": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--classFilter",
              "label": "classFilter (org.nuxeo.automation.scripting.internals.AutomationScriptingComponent)",
              "name": "classFilter",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n       Configuration property for enabling backward compatibility with scripting parameters where\n       context variables were inlined.\n     \n",
              "documentationHtml": "<p>\nConfiguration property for enabling backward compatibility with scripting parameters where\ncontext variables were inlined.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.scripting/org.nuxeo.automation.scripting.internals.AutomationScriptingComponent/Contributions/org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--configuration",
              "id": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent--configuration",
              "registrationOrder": 46,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n     <documentation>\n       Configuration property for enabling backward compatibility with scripting parameters where\n       context variables were inlined.\n     </documentation>\n     <property name=\"nuxeo.automation.scripting.inline-context-in-params\">false</property>\n   </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.scripting/org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
          "name": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
          "requirements": [
            "org.nuxeo.ecm.core.operation.OperationServiceComponent"
          ],
          "resolutionOrder": 598,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.scripting/org.nuxeo.automation.scripting.internals.AutomationScriptingComponent/Services/org.nuxeo.automation.scripting.api.AutomationScriptingService",
              "id": "org.nuxeo.automation.scripting.api.AutomationScriptingService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 548,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\" version=\"1.0\">\n\n   <documentation>\n    Automation Scripting is a Nuxeo module which provides ability to create and contribute Automation chain/operation in JavaScript.\n\n    For backward compatibility with version prior to 9.1, you may want to inline the context in the scripting parameters by contributing the\n    extension\n    <code>\n      <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n        <property name=\"nuxeo.automation.scripting.inline-context-in-params\">true</property>\n      </extension>\n    </code>\n  </documentation>\n\n  <require>org.nuxeo.ecm.core.operation.OperationServiceComponent</require>\n\n  <implementation class=\"org.nuxeo.automation.scripting.internals.AutomationScriptingComponent\" />\n\n  <service>\n      <provide interface=\"org.nuxeo.automation.scripting.api.AutomationScriptingService\" />\n  </service>\n\n   <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n     <documentation>\n       Configuration property for enabling backward compatibility with scripting parameters where\n       context variables were inlined.\n     </documentation>\n     <property name=\"nuxeo.automation.scripting.inline-context-in-params\">false</property>\n   </extension>\n\n  <extension-point name=\"operation\">\n    <documentation>\n      <code>\n      <scriptedOperation id=\"Scripting.HelloWorld\">\n        <inputType>string</inputType>\n        <outputType>string</outputType>\n        <param name=\"lang\" type=\"string\"/>\n        <script>\n          function run(input, params) {\n          if (params.lang === \"fr\") {\n          return \"Bonjour \" + input;\n          } else {\n          return \"Hello \" + input;\n          }\n          }\n        </script>\n      </scriptedOperation>\n      </code>\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.automation.scripting.internals.ScriptingOperationDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"classFilter\">\n    <documentation>\n      This can be used to allow additional classes to be accessible by the scripting engine.\n      The deny element can be used to disallow classes allowed by previous contributions.\n      By default, no classes are allowed.\n\n      @since 10.2\n      <code>\n        <classFilter>\n          <allow>java.util.ArrayList</allow>\n          <allow>java.util.UUID</allow>\n          <deny>java.io.File</deny>\n          <deny>java.lang.Class</deny>\n        </classFilter>\n      </code>\n\n      To deny everything from previous contributions and only allow specific classes, use:\n      <code>\n        <classFilter>\n          <deny>*</deny>\n          <allow>java.util.ArrayList</allow>\n        </classFilter>\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.automation.scripting.internals.ClassFilterDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/automation-scripting-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-automation-scripting-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.automation",
      "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.scripting",
      "id": "org.nuxeo.ecm.automation.scripting",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.ecm.automation.scripting\r\nBundle-SymbolicName: org.nuxeo.ecm.automation.scripting\r\nNuxeo-Component: OSGI-INF/automation-scripting-service.xml,OSGI-INF/help\r\n ers-contrib.xml,OSGI-INF/classfilter-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 598,
      "minResolutionOrder": 56,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "## About\n\nThis module is a work in progress for allowing to use JavaScript\n\n - as an Automation based DSL to write custom extensions\n - to create \"Automation chains\"\n\n## Motivations\n\nThe initial idea comes from the following constations :\n\n - Automation Operations are a good High Level API : people succeed is doing amazing stuffs with it\n - Automation Chain control flow is too primitive\n     - loops are complex\n     - conditions are complex\n     - reusing \"code segment\" forces using several chains and makes maintenability more complex\n\nSo, the idea is to use a simple scripting language to manage the control flow and give accees to the Automation API.\n\n## Example :\n\nHere is a example of an Automation Script :\n\n    var root = Document.Fetch(null, {\n        \"value\": \"/\"\n    });\n\n    var newDocs = [];\n    for (var i = 1; i < 10; i++) {\n\n        var newDoc = Document.Create(root, {\n            \"type\": \"File\",\n            \"name\": \"newDoc\" + i,\n            \"properties\": {\n                \"dc:title\": \"New Title\" + i,\n                \"dc:source\": \"JavaScript\",\n                \"dc:subjects\": [\"from\", \"javascript\"]\n            }\n        });\n        var lastUUIDDigit = parseInt(newDoc.getId().slice(-1));\n        if (lastUUIDDigit % 2 == 0) {\n            newDoc = Document.Update(newDoc, {\n                \"properties\": {\n                    \"dc:nature\": \"even\"\n                }\n            });\n        } else {\n            newDoc = Document.Update(newDoc, {\n                \"properties\": {\n                    \"dc:nature\": \"odd\"\n                }\n            });\n        }\n        newDocs.push(newDoc);\n    }\n\n    var evenDocs = Document.Query(null, {\n        \"query\": \"select * from Document where dc:nature='even'\"\n    });\n\n    println(\"Created \" + evenDocs.size() + \" even Documents\");\n\n\nHere is an exemple of an \"Automation Chain\" defined via a script\n\n\n      <scriptedOperation id=\"Scripting.AddFacetInSubTree\">\n         <inputType>Document</inputType>\n         <outputType>Documents</outputType>\n         <param name=\"facet\" type=\"string\"/>\n         <param name=\"type\" type=\"string\"/>\n\n         <script><![CDATA[\n           function run(ctx, input, params) {\n\n             var query = \"select * from \" + params.type + \" where ecm:path startswith '\";\n             query = query + input.getPathAsString();\n             query = query + \"'\";\n\n             //println(\"query = \" + query);\n             var subDocs = Document.Query(null, {\n\t\t\t\"query\": query\n\t\t   });\n\n\t\t   //println(\"Query run with \" + subDocs.size() + \" result\");\n\n\t\t   var updated = [];\n\t\t   for (var i = 0; i < subDocs.size(); i++) {\n\t\t      var doc = subDocs.get(i);\n\t\t      if (!doc.hasFacet(params.facet)) {\n\t\t         doc.addFacet(params.facet);\n\t\t         updated.push(Document.Save(doc,{}));\n\t\t      }\n\t\t   }\n             return updated;\n           }\n           ]]>\n         </script>\n      </scriptedOperation>\n",
        "digest": "000ca69d81d835796271d95d4b8e16ff",
        "encoding": "UTF-8",
        "length": 2896,
        "mimeType": "text/plain",
        "name": "Readme.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-multi",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.directory.multi",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.directory.multi.MultiDirectoryFactory",
          "declaredStartOrder": null,
          "documentation": "Multi-directory implementation.\n",
          "documentationHtml": "<p>\nMulti-directory implementation.</p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.directory.multi.MultiDirectoryFactory",
              "descriptors": [
                "org.nuxeo.ecm.directory.multi.MultiDirectoryDescriptor",
                "org.nuxeo.ecm.directory.multi.SourceDescriptor",
                "org.nuxeo.ecm.directory.multi.SubDirectoryDescriptor",
                "org.nuxeo.ecm.directory.multi.FieldDescriptor"
              ],
              "documentation": "\n\n      This extension point can be used to register new\n      multi-directories. The extension can contain any number of\n      directories declarations of the form:\n\n      <code>\n        ...\n        <directory name=\"userDirectory\">\n        <schema>user</schema>\n        <idField>username</idField>\n        <passwordField>password</passwordField>\n        <querySizeLimit>1000</querySizeLimit>\n        <source name=\"ldapusers\">\n            <subDirectory name=\"authinfo\">\n                <field for=\"email\">mail</field>\n            </subDirectory>\n            <subDirectory name=\"userinfo\">\n                <field for=\"firstName\">givenName</field>\n                <field for=\"lastName\">sn</field>\n                <field for=\"company\">o</field>\n            </subDirectory>\n        </source>\n        <source creation=\"true\" name=\"sqlusers\">\n            <subDirectory name=\"sqlUserDirectory\"/>\n        </source>\n    </directory>\n        ...\n      </code>\n\n\n      Here is the description for each field:\n      <ul>\n    <li>\n          schema - the name of the schema to be used for the directory\n          entries.\n        </li>\n    <li>\n          idField - the id field designs the primary key in the table,\n          used for retrieving entries by id.\n        </li>\n    <li>\n          querySizeLimit - the maximum number of results that the\n          queries on this directory should return; if there are more\n          results than this, an exception will be raised.\n        </li>\n</ul>\n\n      The references tag is used to define relations between\n      directories. (TODO: describe the references types.)\n    \n",
              "documentationHtml": "<p>\nThis extension point can be used to register new\nmulti-directories. The extension can contain any number of\ndirectories declarations of the form:\n</p><p>\n</p><pre><code>        ...\n        &lt;directory name&#61;&#34;userDirectory&#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;querySizeLimit&gt;1000&lt;/querySizeLimit&gt;\n        &lt;source name&#61;&#34;ldapusers&#34;&gt;\n            &lt;subDirectory name&#61;&#34;authinfo&#34;&gt;\n                &lt;field for&#61;&#34;email&#34;&gt;mail&lt;/field&gt;\n            &lt;/subDirectory&gt;\n            &lt;subDirectory name&#61;&#34;userinfo&#34;&gt;\n                &lt;field for&#61;&#34;firstName&#34;&gt;givenName&lt;/field&gt;\n                &lt;field for&#61;&#34;lastName&#34;&gt;sn&lt;/field&gt;\n                &lt;field for&#61;&#34;company&#34;&gt;o&lt;/field&gt;\n            &lt;/subDirectory&gt;\n        &lt;/source&gt;\n        &lt;source creation&#61;&#34;true&#34; name&#61;&#34;sqlusers&#34;&gt;\n            &lt;subDirectory name&#61;&#34;sqlUserDirectory&#34;/&gt;\n        &lt;/source&gt;\n    &lt;/directory&gt;\n        ...\n</code></pre><p>\nHere is the description for each field:\n</p><ul><li>\nschema - the name of the schema to be used for the directory\nentries.\n</li><li>\nidField - the id field designs the primary key in the table,\nused for retrieving entries by id.\n</li><li>\nquerySizeLimit - the maximum number of results that the\nqueries on this directory should return; if there are more\nresults than this, an exception will be raised.\n</li></ul>\n<p>\nThe references tag is used to define relations between\ndirectories. (TODO: describe the references types.)\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.multi/org.nuxeo.ecm.directory.multi.MultiDirectoryFactory/ExtensionPoints/org.nuxeo.ecm.directory.multi.MultiDirectoryFactory--directories",
              "id": "org.nuxeo.ecm.directory.multi.MultiDirectoryFactory--directories",
              "label": "directories (org.nuxeo.ecm.directory.multi.MultiDirectoryFactory)",
              "name": "directories",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.multi/org.nuxeo.ecm.directory.multi.MultiDirectoryFactory",
          "name": "org.nuxeo.ecm.directory.multi.MultiDirectoryFactory",
          "requirements": [
            "org.nuxeo.ecm.directory.DirectoryServiceImpl"
          ],
          "resolutionOrder": 586,
          "services": [],
          "startOrder": 599,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.directory.multi.MultiDirectoryFactory\">\n\n  <implementation class=\"org.nuxeo.ecm.directory.multi.MultiDirectoryFactory\"/>\n\n  <require>org.nuxeo.ecm.directory.DirectoryServiceImpl</require>\n\n  <documentation>Multi-directory implementation.</documentation>\n\n  <extension-point name=\"directories\">\n    <object class=\"org.nuxeo.ecm.directory.multi.MultiDirectoryDescriptor\"/>\n    <object class=\"org.nuxeo.ecm.directory.multi.SourceDescriptor\"/>\n    <object class=\"org.nuxeo.ecm.directory.multi.SubDirectoryDescriptor\"/>\n    <object class=\"org.nuxeo.ecm.directory.multi.FieldDescriptor\"/>\n\n    <documentation>\n      This extension point can be used to register new\n      multi-directories. The extension can contain any number of\n      directories declarations of the form:\n\n      <code>\n        ...\n        <directory name=\"userDirectory\">\n          <schema>user</schema>\n          <idField>username</idField>\n          <passwordField>password</passwordField>\n\n          <querySizeLimit>1000</querySizeLimit>\n\n          <source name=\"ldapusers\">\n            <subDirectory name=\"authinfo\">\n              <field for=\"email\">mail</field>\n            </subDirectory>\n            <subDirectory name=\"userinfo\">\n              <field for=\"firstName\">givenName</field>\n              <field for=\"lastName\">sn</field>\n              <field for=\"company\">o</field>\n            </subDirectory>\n          </source>\n\n          <source name=\"sqlusers\" creation=\"true\">\n            <subDirectory name=\"sqlUserDirectory\"/>\n          </source>\n\n        </directory>\n        ...\n      </code>\n\n      Here is the description for each field:\n      <ul>\n        <li>\n          schema - the name of the schema to be used for the directory\n          entries.\n        </li>\n        <li>\n          idField - the id field designs the primary key in the table,\n          used for retrieving entries by id.\n        </li>\n        <li>\n          querySizeLimit - the maximum number of results that the\n          queries on this directory should return; if there are more\n          results than this, an exception will be raised.\n        </li>\n      </ul>\n      The references tag is used to define relations between\n      directories. (TODO: describe the references types.)\n    </documentation>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/multidirectory-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-directory-multi-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.multi",
      "id": "org.nuxeo.ecm.directory.multi",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.directory.multi\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo ECM Multi Directory\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/multidirectory-service.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.osgi,org.nuxeo.runtime\r\n ,org.nuxeo.runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.directory.multi;singleton:=true\r\nOriginally-Created-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nRequire-Bundle: org.nuxeo.ecm.directory\r\n\r\n",
      "maxResolutionOrder": 586,
      "minResolutionOrder": 586,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.directory"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-webengine-rest",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.webengine.base",
          "org.nuxeo.ecm.webengine.core",
          "org.nuxeo.ecm.webengine.invite",
          "org.nuxeo.ecm.webengine.rest"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.webengine",
        "id": "grp:org.nuxeo.ecm.webengine",
        "name": "org.nuxeo.ecm.webengine",
        "parentIds": [],
        "readmes": [],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.webengine.rest",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent",
          "declaredStartOrder": null,
          "documentation": "@author Bogdan Stefanescu (bs@nuxeo.com)\n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent",
              "descriptors": [
                "org.nuxeo.ecm.webengine.rest.servlet.config.ServletDescriptor"
              ],
              "documentation": "Servlet registration for OSGi HttpService\n",
              "documentationHtml": "<p>\nServlet registration for OSGi HttpService</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.rest/org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent/ExtensionPoints/org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent--servlets",
              "id": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent--servlets",
              "label": "servlets (org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent)",
              "name": "servlets",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent",
              "descriptors": [
                "org.nuxeo.ecm.webengine.rest.servlet.config.FilterSetDescriptor"
              ],
              "documentation": "Filters set registry to contribute new filters to an existing servlet\n",
              "documentationHtml": "<p>\nFilters set registry to contribute new filters to an existing servlet</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.rest/org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent/ExtensionPoints/org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent--filters",
              "id": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent--filters",
              "label": "filters (org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent)",
              "name": "filters",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent",
              "descriptors": [
                "org.nuxeo.ecm.webengine.rest.servlet.config.ResourcesDescriptor"
              ],
              "documentation": "Resource resolvers can be contributed from outside to a servlet using this extension point\n",
              "documentationHtml": "<p>\nResource resolvers can be contributed from outside to a servlet using this extension point</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.rest/org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent/ExtensionPoints/org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent--resources",
              "id": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent--resources",
              "label": "resources (org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent)",
              "name": "resources",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent",
              "descriptors": [
                "org.nuxeo.ecm.webengine.rest.servlet.config.ResourceExtension"
              ],
              "documentation": "Sub-resources that can be injected into the given application\n",
              "documentationHtml": "<p>\nSub-resources that can be injected into the given application</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.rest/org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent/ExtensionPoints/org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent--subresources",
              "id": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent--subresources",
              "label": "subresources (org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent)",
              "name": "subresources",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.rest/org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent",
          "name": "org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent",
          "requirements": [],
          "resolutionOrder": 680,
          "services": [],
          "startOrder": 659,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent\"\n  version=\"1.0\">\n\n  <documentation>@author Bogdan Stefanescu (bs@nuxeo.com)</documentation>\n\n  <implementation class=\"org.nuxeo.ecm.webengine.rest.servlet.config.ServletRegistryComponent\" />\n\n  <extension-point name=\"servlets\">\n    <documentation>Servlet registration for OSGi HttpService</documentation>\n    <object class=\"org.nuxeo.ecm.webengine.rest.servlet.config.ServletDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"filters\">\n    <documentation>Filters set registry to contribute new filters to an existing servlet</documentation>\n    <object class=\"org.nuxeo.ecm.webengine.rest.servlet.config.FilterSetDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"resources\">\n    <documentation>Resource resolvers can be contributed from outside to a servlet using this extension point</documentation>\n    <object class=\"org.nuxeo.ecm.webengine.rest.servlet.config.ResourcesDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"subresources\">\n    <documentation>Sub-resources that can be injected into the given application</documentation>\n    <object class=\"org.nuxeo.ecm.webengine.rest.servlet.config.ResourceExtension\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/servlet-registry.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-webengine-rest-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.webengine",
      "hierarchyPath": "/grp:org.nuxeo.ecm.webengine/org.nuxeo.ecm.webengine.rest",
      "id": "org.nuxeo.ecm.webengine.rest",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nPrivate-Package: .\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: stateless\r\nBundle-Name: Nuxeo WebEngine REST\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nRequire-Bundle: org.nuxeo.ecm.core,org.nuxeo.ecm.core.io,\r\nImport-Package: META-INF.services,freemarker.core;resolution:=optional,f\r\n reemarker.template;resolution:=optional,javax.naming,javax.security.aut\r\n h.login,org.apache.commons.logging,org.apache.xerces.jaxp;version=\"2.9.\r\n 0\",org.nuxeo.common.collections,org.nuxeo.common.utils,org.nuxeo.common\r\n .xmap,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core.api;resolutio\r\n n:=optional,org.nuxeo.ecm.core.api.local;resolution:=optional,org.nuxeo\r\n .ecm.core.api.repository;resolution:=optional,org.nuxeo.ecm.platform.re\r\n ndering.api;resolution:=optional,org.nuxeo.ecm.platform.rendering.fm;re\r\n solution:=optional,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.ru\r\n ntime.model,org.nuxeo.runtime.transaction;resolution:=optional,org.osgi\r\n .framework,org.osgi.service.packageadmin\r\nEclipse-BuddyPolicy: dependent\r\nBundle-SymbolicName: org.nuxeo.ecm.webengine.rest;singleton:=true\r\nBundle-Activator: org.nuxeo.ecm.webengine.rest.Activator\r\nNuxeo-Component: OSGI-INF/servlet-registry.xml\r\n\r\n",
      "maxResolutionOrder": 680,
      "minResolutionOrder": 680,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core",
        "org.nuxeo.ecm.core.io",
        null
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "chemistry-opencmis-commons-api",
      "artifactVersion": "2.0.0",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-bindings",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-impl",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-impl"
        ],
        "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis",
        "id": "grp:org.nuxeo.chemistry.opencmis",
        "name": "org.nuxeo.chemistry.opencmis",
        "parentIds": [],
        "readmes": [],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-api",
      "components": [],
      "fileName": "chemistry-opencmis-commons-api-2.0.0.jar",
      "groupId": "org.nuxeo.chemistry.opencmis",
      "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis/org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-api",
      "id": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Apache Maven Bundle Plugin\r\nBuilt-By: Kevin.Leturc\r\nBuild-Jdk: 11.0.23\r\nSpecification-Title: OpenCMIS Commons API\r\nSpecification-Version: 2.0.0\r\nSpecification-Vendor: Nuxeo\r\nImplementation-URL: http://www.nuxeo.com/en/products/chemistry-opencmis-\r\n commons/chemistry-opencmis-commons-api\r\nImplementation-Title: OpenCMIS Commons API\r\nImplementation-Vendor: Nuxeo\r\nImplementation-Vendor-Id: org.nuxeo.chemistry.opencmis\r\nImplementation-Version: 2.0.0\r\nX-Apache-SVN-Revision: ${buildNumber}\r\nX-Compile-Source-JDK: 11\r\nX-Compile-Target-JDK: 11\r\nBnd-LastModified: 1717165720984\r\nBundle-Description: Apache Chemistry OpenCMIS is an open source implemen\r\n tation of the OASIS CMIS specification.\r\nBundle-DocURL: http://www.nuxeo.com/en/products/chemistry-opencmis-commo\r\n ns/chemistry-opencmis-commons-api\r\nBundle-License: https://www.apache.org/licenses/LICENSE-2.0.txt\r\nBundle-ManifestVersion: 2\r\nBundle-Name: OpenCMIS Commons API\r\nBundle-SymbolicName: org.nuxeo.chemistry.opencmis.chemistry-opencmis-com\r\n mons-api\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 2.0.0\r\nExport-Package: org.apache.chemistry.opencmis.commons;version=\"2.0.0\";us\r\n es:=\"org.apache.chemistry.opencmis.commons.data\",org.apache.chemistry.o\r\n pencmis.commons.data;version=\"2.0.0\";uses:=\"org.apache.chemistry.opencm\r\n is.commons.definitions,org.apache.chemistry.opencmis.commons.enums\",org\r\n .apache.chemistry.opencmis.commons.definitions;version=\"2.0.0\";uses:=\"o\r\n rg.apache.chemistry.opencmis.commons.data,org.apache.chemistry.opencmis\r\n .commons.enums\",org.apache.chemistry.opencmis.commons.endpoints;version\r\n =\"2.0.0\",org.apache.chemistry.opencmis.commons.enums;version=\"2.0.0\",or\r\n g.apache.chemistry.opencmis.commons.exceptions;version=\"2.0.0\",org.apac\r\n he.chemistry.opencmis.commons.server;version=\"2.0.0\";uses:=\"org.apache.\r\n chemistry.opencmis.commons.data,org.apache.chemistry.opencmis.commons.e\r\n nums,org.apache.chemistry.opencmis.commons.spi\",org.apache.chemistry.op\r\n encmis.commons.spi;version=\"2.0.0\";uses:=\"jakarta.xml.ws.handler,javax.\r\n net.ssl,org.apache.chemistry.opencmis.commons.data,org.apache.chemistry\r\n .opencmis.commons.definitions,org.apache.chemistry.opencmis.commons.enu\r\n ms,org.w3c.dom\"\r\nImport-Package: jakarta.xml.ws.handler;version=\"[3.0,4)\",javax.net.ssl,o\r\n rg.apache.chemistry.opencmis.commons.data;version=\"[2.0,3)\",org.apache.\r\n chemistry.opencmis.commons.definitions;version=\"[2.0,3)\",org.apache.che\r\n mistry.opencmis.commons.enums;version=\"[2.0,3)\",org.apache.chemistry.op\r\n encmis.commons.spi;version=\"[2.0,3)\",org.w3c.dom\r\nRequire-Capability: osgi.ee;filter:=\"(osgi.ee=UNKNOWN)\"\r\nTool: Bnd-3.3.0.201609221906\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2.0.0"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-web-resources-wro",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.web.resources.api",
          "org.nuxeo.web.resources.core",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.web.resources.wro",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.WebResources--processors",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.wro/org.nuxeo.ecm.platform.web.resources.contrib/Contributions/org.nuxeo.ecm.platform.web.resources.contrib--processors",
              "id": "org.nuxeo.ecm.platform.web.resources.contrib--processors",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.WebResources",
                "name": "org.nuxeo.ecm.platform.WebResources",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"processors\" target=\"org.nuxeo.ecm.platform.WebResources\">\n\n    <processor name=\"nuxeoCssUrlRewriting\" order=\"10\" type=\"wroPre\">\n      <class>\n        org.nuxeo.ecm.web.resources.wro.processor.CssUrlRewritingProcessor\n      </class>\n    </processor>\n    <processor name=\"cssMinJawr\" order=\"30\" type=\"wroPre\"/>\n\n    <processor name=\"jsMin\" order=\"10\" type=\"wroPost\">\n      <class>ro.isdc.wro.model.resource.processor.impl.js.JSMinProcessor</class>\n    </processor>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.wro/org.nuxeo.ecm.platform.web.resources.contrib",
          "name": "org.nuxeo.ecm.platform.web.resources.contrib",
          "requirements": [],
          "resolutionOrder": 667,
          "services": [],
          "startOrder": 438,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.web.resources.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.WebResources\" point=\"processors\">\n\n    <processor name=\"nuxeoCssUrlRewriting\" type=\"wroPre\" order=\"10\">\n      <class>\n        org.nuxeo.ecm.web.resources.wro.processor.CssUrlRewritingProcessor\n      </class>\n    </processor>\n    <processor name=\"cssMinJawr\" type=\"wroPre\" order=\"30\" />\n\n    <processor name=\"jsMin\" type=\"wroPost\" order=\"10\">\n      <class>ro.isdc.wro.model.resource.processor.impl.js.JSMinProcessor</class>\n    </processor>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/webresources-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-web-resources-wro-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.web.resources/org.nuxeo.web.resources.wro",
      "id": "org.nuxeo.web.resources.wro",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Web Resources Wro\r\nBundle-SymbolicName: org.nuxeo.web.resources.wro;singleton:=true\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/webresources-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 667,
      "minResolutionOrder": 667,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login-shibboleth",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.login.shibboleth",
      "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.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.login.shibboleth.type/Contributions/org.nuxeo.ecm.platform.login.shibboleth.type--schema",
              "id": "org.nuxeo.ecm.platform.login.shibboleth.type--schema",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"shibbolethGroup\" src=\"schema/shibb-group.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.login.shibboleth.type/Contributions/org.nuxeo.ecm.platform.login.shibboleth.type--directories",
              "id": "org.nuxeo.ecm.platform.login.shibboleth.type--directories",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"shibbGroup\">\n      <schema>shibbolethGroup</schema>\n      <idField>groupName</idField>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\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.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.login.shibboleth.type/Contributions/org.nuxeo.ecm.platform.login.shibboleth.type--doctype",
              "id": "org.nuxeo.ecm.platform.login.shibboleth.type--doctype",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Document\" name=\"shibbGroup\">\n      <schema name=\"shibbolethGroup\"/>\n    </doctype>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.login.shibboleth.type",
          "name": "org.nuxeo.ecm.platform.login.shibboleth.type",
          "requirements": [],
          "resolutionOrder": 339,
          "services": [],
          "startOrder": 277,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.login.shibboleth.type\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"shibbolethGroup\" src=\"schema/shibb-group.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"shibbGroup\" extends=\"template-directory\">\n      <schema>shibbolethGroup</schema>\n      <idField>groupName</idField>\n      <types>\n        <type>system</type>\n      </types>\n    </directory>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n\n    <doctype name=\"shibbGroup\" extends=\"Document\">\n      <schema name=\"shibbolethGroup\" />\n    </doctype>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/shibboleth-group-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.computedgroups.ComputedGroupsServiceImpl--computer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.login.shibboleth.computedgroups/Contributions/org.nuxeo.ecm.platform.login.shibboleth.computedgroups--computer",
              "id": "org.nuxeo.ecm.platform.login.shibboleth.computedgroups--computer",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "name": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"computer\" target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\">\n    <groupComputer name=\"shibbolethGroupComputer\">\n      <computer>org.nuxeo.ecm.platform.shibboleth.computedgroups.ShibbolethGroupComputer\n      </computer>\n    </groupComputer>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computerChain",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.login.shibboleth.computedgroups/Contributions/org.nuxeo.ecm.platform.login.shibboleth.computedgroups--computerChain",
              "id": "org.nuxeo.ecm.platform.login.shibboleth.computedgroups--computerChain",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "name": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"computerChain\" target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\">\n    <groupComputerChain append=\"true\">\n      <computers>\n        <computer>shibbolethGroupComputer</computer>\n      </computers>\n    </groupComputerChain>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.login.shibboleth.computedgroups",
          "name": "org.nuxeo.ecm.platform.login.shibboleth.computedgroups",
          "requirements": [],
          "resolutionOrder": 340,
          "services": [],
          "startOrder": 276,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.login.shibboleth.computedgroups\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\"\n    point=\"computer\">\n    <groupComputer name=\"shibbolethGroupComputer\">\n      <computer>org.nuxeo.ecm.platform.shibboleth.computedgroups.ShibbolethGroupComputer\n      </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>shibbolethGroupComputer</computer>\n      </computers>\n    </groupComputerChain>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/shibboleth-computedgroups-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The Shibboleth Authentication Service handles the configuration to use\n    when connecting to Shibboleth for the authentication in Nuxeo.\n\n    @author Quentin Lamerand (qlamerand@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe Shibboleth Authentication Service handles the configuration to use\nwhen connecting to Shibboleth for the authentication in Nuxeo.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService",
              "descriptors": [
                "org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationConfig"
              ],
              "documentation": "\n      Hold configuration for the Shibboleth Authentication Service. Contains:\n      * the mapping between request headers and user fields\n      * which header is used as user Id depending of the chosen IdP\n      * the login / logout URLs for Shibboleth\n\n      A sample configuration could be:\n      <code>\n    <extension point=\"config\" target=\"org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService\">\n        <config headerEncoding=\"utf-8\">\n            <uidHeaders>\n                <uidHeader idpUrl=\"https://specific.idp\">differentUid</uidHeader>\n                <default>uid</default>\n            </uidHeaders>\n            <loginURL>https://host/Shibboleth.sso/WAYF</loginURL>\n            <logoutURL>https://host/Shibboleth.sso/Logout</logoutURL>\n            <fieldMapping header=\"uid\">username</fieldMapping>\n            <fieldMapping header=\"mail\">email</fieldMapping>\n        </config>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\nHold configuration for the Shibboleth Authentication Service. Contains:\n* the mapping between request headers and user fields\n* which header is used as user Id depending of the chosen IdP\n* the login / logout URLs for Shibboleth\n</p><p>\nA sample configuration could be:\n</p><p></p><pre><code>    &lt;extension point&#61;&#34;config&#34; target&#61;&#34;org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService&#34;&gt;\n        &lt;config headerEncoding&#61;&#34;utf-8&#34;&gt;\n            &lt;uidHeaders&gt;\n                &lt;uidHeader idpUrl&#61;&#34;https://specific.idp&#34;&gt;differentUid&lt;/uidHeader&gt;\n                &lt;default&gt;uid&lt;/default&gt;\n            &lt;/uidHeaders&gt;\n            &lt;loginURL&gt;https://host/Shibboleth.sso/WAYF&lt;/loginURL&gt;\n            &lt;logoutURL&gt;https://host/Shibboleth.sso/Logout&lt;/logoutURL&gt;\n            &lt;fieldMapping header&#61;&#34;uid&#34;&gt;username&lt;/fieldMapping&gt;\n            &lt;fieldMapping header&#61;&#34;mail&#34;&gt;email&lt;/fieldMapping&gt;\n        &lt;/config&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService/ExtensionPoints/org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService--config",
              "id": "org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService--config",
              "label": "config (org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService)",
              "name": "config",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService",
          "name": "org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService",
          "requirements": [],
          "resolutionOrder": 341,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService/Services/org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService",
              "id": "org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 636,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService\">\n\n  <documentation>\n    The Shibboleth Authentication Service handles the configuration to use\n    when connecting to Shibboleth for the authentication in Nuxeo.\n\n    @author Quentin Lamerand (qlamerand@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService\" />\n  </service>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationServiceImpl\" />\n\n  <extension-point name=\"config\">\n    <documentation>\n      Hold configuration for the Shibboleth Authentication Service. Contains:\n      * the mapping between request headers and user fields\n      * which header is used as user Id depending of the chosen IdP\n      * the login / logout URLs for Shibboleth\n\n      A sample configuration could be:\n      <code>\n        <extension\n          target=\"org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationService\"\n          point=\"config\">\n          <config headerEncoding=\"utf-8\">\n            <uidHeaders>\n              <uidHeader idpUrl=\"https://specific.idp\">differentUid</uidHeader>\n              <default>uid</default>\n            </uidHeaders>\n\n            <loginURL>https://host/Shibboleth.sso/WAYF</loginURL>\n            <logoutURL>https://host/Shibboleth.sso/Logout</logoutURL>\n\n            <fieldMapping header=\"uid\">username</fieldMapping>\n            <fieldMapping header=\"mail\">email</fieldMapping>\n          </config>\n        </extension>\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.shibboleth.service.ShibbolethAuthenticationConfig\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/shibboleth-authentication-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.ui.web.auth.service.PluggableAuthenticationService--authenticators",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.login.shibboleth.auth/Contributions/org.nuxeo.ecm.platform.login.shibboleth.auth--authenticators",
              "id": "org.nuxeo.ecm.platform.login.shibboleth.auth--authenticators",
              "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": "2025.7.12",
              "xml": "<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <authenticationPlugin class=\"org.nuxeo.ecm.platform.shibboleth.auth.ShibbolethAuthenticationPlugin\" enabled=\"true\" name=\"SHIB_AUTH\">\n    </authenticationPlugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.login.shibboleth.auth",
          "name": "org.nuxeo.ecm.platform.login.shibboleth.auth",
          "requirements": [],
          "resolutionOrder": 342,
          "services": [],
          "startOrder": 275,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.login.shibboleth.auth\">\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"authenticators\">\n    <authenticationPlugin name=\"SHIB_AUTH\" enabled=\"true\"\n      class=\"org.nuxeo.ecm.platform.shibboleth.auth.ShibbolethAuthenticationPlugin\">\n    </authenticationPlugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/shibboleth-authenticators-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.shibboleth/org.nuxeo.ecm.platform.shibboleth.exceptionhandling/Contributions/org.nuxeo.ecm.platform.shibboleth.exceptionhandling--exceptionhandler",
              "id": "org.nuxeo.ecm.platform.shibboleth.exceptionhandling--exceptionhandler",
              "registrationOrder": 2,
              "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": "2025.7.12",
              "xml": "<extension point=\"exceptionhandler\" target=\"org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingService\">\n    <exceptionHandler class=\"org.nuxeo.ecm.platform.shibboleth.auth.exceptionhandling.ShibbolethSecurityExceptionHandler\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth/org.nuxeo.ecm.platform.shibboleth.exceptionhandling",
          "name": "org.nuxeo.ecm.platform.shibboleth.exceptionhandling",
          "requirements": [
            "org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib"
          ],
          "resolutionOrder": 504,
          "services": [],
          "startOrder": 373,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.shibboleth.exceptionhandling\">\n\n  <require>org.nuxeo.ecm.platform.web.common.exceptionhandling.service.ExceptionHandlingContrib\n  </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.shibboleth.auth.exceptionhandling.ShibbolethSecurityExceptionHandler\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/shibboleth-exception-handling-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-login-shibboleth-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.shibboleth",
      "id": "org.nuxeo.ecm.platform.login.shibboleth",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Shibboleth login module\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.login.shibboleth;singleton:=\r\n true\r\nRequire-Bundle: org.nuxeo.ecm.platform.login, org.nuxeo.ecm.webapp.base\r\nNuxeo-Component: OSGI-INF/shibboleth-group-type-contrib.xml,OSGI-INF/shi\r\n bboleth-computedgroups-contrib.xml,OSGI-INF/shibboleth-authentication-s\r\n ervice.xml,OSGI-INF/shibboleth-authenticators-contrib.xml,OSGI-INF/shib\r\n boleth-exception-handling-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 504,
      "minResolutionOrder": 339,
      "packages": [
        "shibboleth-authentication"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.login",
        "org.nuxeo.ecm.webapp.base"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-sql",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.directory.sql",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.directory.sql.SQLDirectoryFactory",
          "declaredStartOrder": null,
          "documentation": "\n    SQL-based implementation for NXDirectory\n  \n",
          "documentationHtml": "<p>\nSQL-based implementation for NXDirectory\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.directory.sql.SQLDirectoryFactory",
              "descriptors": [
                "org.nuxeo.ecm.directory.sql.SQLDirectoryDescriptor"
              ],
              "documentation": "\n      This extension point can be used to register new SQL-based\n      directories. The\n      extension can contain any number of directories\n      declarations of the form:\n      <code>\n    <directory name=\"userDirectory\">\n        <schema>vocabulary</schema>\n        <types>\n            <type>system</type>\n        </types>\n        <dataSource>java:/nxsqldirectory</dataSource>\n        <table>t</table>\n        <nativeCase>false</nativeCase>\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-mydb.csv</dataFile>\n        <dataFileCharacterSeparator>,</dataFileCharacterSeparator>\n        <querySizeLimit>1000</querySizeLimit>\n        <references>\n            <tableReference dataFile=\"user2group.csv\"\n                directory=\"groupDirectory\" field=\"groups\"\n                sourceColumn=\"userId\" table=\"user2group\" targetColumn=\"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      Here is the description for each field:\n      <ul>\n    <li>\n          schema - the name of the schema to be used for the directory\n          entries.\n        </li>\n    <li>\n          types - list of type to categorise directories.\n        </li>\n    <li>\n          dataSource - the dataSource name, as registered in the\n          application\n          server.\n        </li>\n    <li>\n          table - The name of the sql table where the directory data\n          will be\n          stored.\n        </li>\n    <li>\n          idField - the id field designs the primary key in the table,\n          used for\n          retrieving entries by id.\n        </li>\n    <li>\n          passwordField - the password field.\n        </li>\n    <li>\n          passwordHashAlgorithm - the hash used to encode the password\n          written\n          in the database, either empty (default), SSHA or SMD5.\n        </li>\n    <li>\n          autoincrementIdField - if this is set true, the SQLDirectory\n          will\n          fill the id field using a generated unique number,\n          otherwise the client\n          has to supply the id.\n        </li>\n    <li>\n          dataFile - file from which to populate the table; the\n          first line must\n          contain the column names. This can be a csv, tsv, psv file.\n          But you\n          must take care of the dataFileCharacterSeparator to specify the\n          character\n          separator\n        </li>\n    <li>\n          dataFileCharacterSeparator - character that separate each value\n          if\n          more than one character is set, the first one is gotten and other\n          are\n          skipped. The character is by default \",\" but you can set \";\" or\n          tabulation\n        </li>\n    <li>\n          createTablePolicy - one of \"never\", \"always\" or\n          \"on_missing_columns\"\n          if this is set to \"never\", the table will\n          never be created; if set to\n          \"always\", the table will be\n          created each time the application is\n          started; if set to\n          \"on_missing_columns\", the table will be created only\n          if the\n          schema declares some fields that are not present in the sql\n          table.\n        </li>\n    <li>\n          querySizeLimit - the maximum number of results that the\n          queries on\n          this directory should return; if there are more\n          results than this, an\n          exception will be raised.\n        </li>\n    <li>\n          nativeCase - false if table and column names should be used exactly\n          as specificed in the configuration and schemas (quoted), true if\n          they\n          should be converted to database-native case (usually\n          uppercase); the\n          default is false for backward-compatibility.\n        </li>\n</ul>\n\n      The references tag is used to define relations between\n      directories. (TODO:\n      describe the references types.)\n    \n",
              "documentationHtml": "<p>\nThis extension point can be used to register new SQL-based\ndirectories. The\nextension can contain any number of directories\ndeclarations 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;dataSource&gt;java:/nxsqldirectory&lt;/dataSource&gt;\n        &lt;table&gt;t&lt;/table&gt;\n        &lt;nativeCase&gt;false&lt;/nativeCase&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-mydb.csv&lt;/dataFile&gt;\n        &lt;dataFileCharacterSeparator&gt;,&lt;/dataFileCharacterSeparator&gt;\n        &lt;querySizeLimit&gt;1000&lt;/querySizeLimit&gt;\n        &lt;references&gt;\n            &lt;tableReference dataFile&#61;&#34;user2group.csv&#34;\n                directory&#61;&#34;groupDirectory&#34; field&#61;&#34;groups&#34;\n                sourceColumn&#61;&#34;userId&#34; table&#61;&#34;user2group&#34; targetColumn&#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>\nHere is the description for each field:\n</p><ul><li>\nschema - the name of the schema to be used for the directory\nentries.\n</li><li>\ntypes - list of type to categorise directories.\n</li><li>\ndataSource - the dataSource name, as registered in the\napplication\nserver.\n</li><li>\ntable - The name of the sql table where the directory data\nwill be\nstored.\n</li><li>\nidField - the id field designs the primary key in the table,\nused for\nretrieving entries by id.\n</li><li>\npasswordField - the password field.\n</li><li>\npasswordHashAlgorithm - the hash used to encode the password\nwritten\nin the database, either empty (default), SSHA or SMD5.\n</li><li>\nautoincrementIdField - if this is set true, the SQLDirectory\nwill\nfill the id field using a generated unique number,\notherwise the client\nhas to supply the id.\n</li><li>\ndataFile - file from which to populate the table; the\nfirst line must\ncontain the column names. This can be a csv, tsv, psv file.\nBut you\nmust take care of the dataFileCharacterSeparator to specify the\ncharacter\nseparator\n</li><li>\ndataFileCharacterSeparator - character that separate each value\nif\nmore than one character is set, the first one is gotten and other\nare\nskipped. The character is by default &#34;,&#34; but you can set &#34;;&#34; or\ntabulation\n</li><li>\ncreateTablePolicy - one of &#34;never&#34;, &#34;always&#34; or\n&#34;on_missing_columns&#34;\nif this is set to &#34;never&#34;, the table will\nnever be created; if set to\n&#34;always&#34;, the table will be\ncreated each time the application is\nstarted; if set to\n&#34;on_missing_columns&#34;, the table will be created only\nif the\nschema declares some fields that are not present in the sql\ntable.\n</li><li>\nquerySizeLimit - the maximum number of results that the\nqueries on\nthis directory should return; if there are more\nresults than this, an\nexception will be raised.\n</li><li>\nnativeCase - false if table and column names should be used exactly\nas specificed in the configuration and schemas (quoted), true if\nthey\nshould be converted to database-native case (usually\nuppercase); the\ndefault is false for backward-compatibility.\n</li></ul>\n<p>\nThe references tag is used to define relations between\ndirectories. (TODO:\ndescribe the references types.)\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.sql/org.nuxeo.ecm.directory.sql.SQLDirectoryFactory/ExtensionPoints/org.nuxeo.ecm.directory.sql.SQLDirectoryFactory--directories",
              "id": "org.nuxeo.ecm.directory.sql.SQLDirectoryFactory--directories",
              "label": "directories (org.nuxeo.ecm.directory.sql.SQLDirectoryFactory)",
              "name": "directories",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.sql/org.nuxeo.ecm.directory.sql.SQLDirectoryFactory",
          "name": "org.nuxeo.ecm.directory.sql.SQLDirectoryFactory",
          "requirements": [
            "org.nuxeo.ecm.directory.DirectoryServiceImpl"
          ],
          "resolutionOrder": 591,
          "services": [],
          "startOrder": 600,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.directory.sql.SQLDirectoryFactory\">\n\n  <implementation class=\"org.nuxeo.ecm.directory.sql.SQLDirectoryFactory\"/>\n\n  <require>org.nuxeo.ecm.directory.DirectoryServiceImpl</require>\n\n  <documentation>\n    SQL-based implementation for NXDirectory\n  </documentation>\n\n  <extension-point name=\"directories\">\n    <documentation>\n      This extension point can be used to register new SQL-based\n      directories. The\n      extension can contain any number of directories\n      declarations of the form:\n      <code>\n        <directory name=\"userDirectory\">\n          <schema>vocabulary</schema>\n          <types>\n            <type>system</type>\n          </types>\n          <dataSource>java:/nxsqldirectory</dataSource>\n          <table>t</table>\n          <nativeCase>false</nativeCase>\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-mydb.csv</dataFile>\n          <dataFileCharacterSeparator>,</dataFileCharacterSeparator>\n          <querySizeLimit>1000</querySizeLimit>\n          <references>\n            <tableReference field=\"groups\" directory=\"groupDirectory\" table=\"user2group\" sourceColumn=\"userId\" targetColumn=\"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      Here is the description for each field:\n      <ul>\n        <li>\n          schema - the name of the schema to be used for the directory\n          entries.\n        </li>\n        <li>\n          types - list of type to categorise directories.\n        </li>\n        <li>\n          dataSource - the dataSource name, as registered in the\n          application\n          server.\n        </li>\n        <li>\n          table - The name of the sql table where the directory data\n          will be\n          stored.\n        </li>\n        <li>\n          idField - the id field designs the primary key in the table,\n          used for\n          retrieving entries by id.\n        </li>\n        <li>\n          passwordField - the password field.\n        </li>\n        <li>\n          passwordHashAlgorithm - the hash used to encode the password\n          written\n          in the database, either empty (default), SSHA or SMD5.\n        </li>\n        <li>\n          autoincrementIdField - if this is set true, the SQLDirectory\n          will\n          fill the id field using a generated unique number,\n          otherwise the client\n          has to supply the id.\n        </li>\n        <li>\n          dataFile - file from which to populate the table; the\n          first line must\n          contain the column names. This can be a csv, tsv, psv file.\n          But you\n          must take care of the dataFileCharacterSeparator to specify the\n          character\n          separator\n        </li>\n        <li>\n          dataFileCharacterSeparator - character that separate each value\n          if\n          more than one character is set, the first one is gotten and other\n          are\n          skipped. The character is by default \",\" but you can set \";\" or\n          tabulation\n        </li>\n        <li>\n          createTablePolicy - one of \"never\", \"always\" or\n          \"on_missing_columns\"\n          if this is set to \"never\", the table will\n          never be created; if set to\n          \"always\", the table will be\n          created each time the application is\n          started; if set to\n          \"on_missing_columns\", the table will be created only\n          if the\n          schema declares some fields that are not present in the sql\n          table.\n        </li>\n        <li>\n          querySizeLimit - the maximum number of results that the\n          queries on\n          this directory should return; if there are more\n          results than this, an\n          exception will be raised.\n        </li>\n        <li>\n          nativeCase - false if table and column names should be used exactly\n          as specificed in the configuration and schemas (quoted), true if\n          they\n          should be converted to database-native case (usually\n          uppercase); the\n          default is false for backward-compatibility.\n        </li>\n      </ul>\n      The references tag is used to define relations between\n      directories. (TODO:\n      describe the references types.)\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.directory.sql.SQLDirectoryDescriptor\"/>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/SQLDirectoryFactory.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-directory-sql-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.sql",
      "id": "org.nuxeo.ecm.directory.sql",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.directory.sql;core=split,org.nuxeo.ecm.dir\r\n ectory.sql.repository;core=split\r\nPrivate-Package: .\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Localization: bundle\r\nBundle-Name: Nuxeo ECM SQL Directory\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.directory.api;visibility:=reexport\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nEclipse-BuddyPolicy: dependent\r\nBundle-BuddyPolicy: dependent\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/SQLDirectoryFactory.xml\r\nImport-Package: au.com.bytecode.opencsv,javax.resource;version=\"2.0.0\",j\r\n avax.resource.cci;version=\"2.0.0\",javax.sql,org.apache.commons.lang,org\r\n .apache.commons.logging,org.nuxeo.common.utils,org.nuxeo.common.xmap.an\r\n notation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,\r\n org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.\r\n core.schema,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.core.storage,\r\n org.nuxeo.ecm.core.storage.sql,org.nuxeo.ecm.core.storage.sql.jdbc,org.\r\n nuxeo.ecm.core.storage.sql.jdbc.db,org.nuxeo.ecm.core.utils,org.nuxeo.e\r\n cm.directory,org.nuxeo.osgi,org.nuxeo.runtime,org.nuxeo.runtime.api,org\r\n .nuxeo.runtime.model,org.osgi.framework\r\nBundle-SymbolicName: org.nuxeo.ecm.directory.sql;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 591,
      "minResolutionOrder": 591,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.directory.api"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-aws",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.aws",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.aws.AWSConfigurationServiceImpl",
          "declaredStartOrder": null,
          "documentation": "Manages AWS configuration.\n",
          "documentationHtml": "<p>\nManages AWS configuration.</p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.aws.AWSConfigurationService",
              "descriptors": [
                "org.nuxeo.runtime.aws.AWSConfigurationDescriptor"
              ],
              "documentation": "\n      Used to register AWS configurations. Example:\n      <code>\n    <configuration id=\"myconfig\">\n        <accessKeyId>MY_ACCESS_KEY</accessKeyId>\n        <secretKey>MY_SECRET_KEY</secretKey>\n        <region>MY_REGION</region>\n        <trustStorePath>MY_TRUSTSTORE_PATH</trustStorePath>\n        <trustStorePassword>MY_TRUSTSTORE_PASSWORD</trustStorePassword>\n        <trustStoreType>MY_TRUSTSTORE_TYPE</trustStoreType>\n        <keyStorePath>MY_KEYSTORE_PATH</keyStorePath>\n        <keyStorePassword>MY_KEYSTORE_PASSWORD</keyStorePassword>\n        <keyStoreType>MY_KEYSTORE_TYPE</keyStoreType>\n    </configuration>\n</code>\n\n      If the configuration id is not present, \"default\" is used.\n\n      To look up a configuration, use new NuxeoAWSCredentialsProvider(\"myconfig\")\n      and new NuxeoAWSRegionProvider(\"myconfig\"). Alternatively, you can use\n      the service AWSConfigurationService directly (but it just looks up provided configuration,\n      it doesn't fall back to the AWS SDK default behavior).\n    \n",
              "documentationHtml": "<p>\nUsed to register AWS configurations. Example:\n</p><p></p><pre><code>    &lt;configuration id&#61;&#34;myconfig&#34;&gt;\n        &lt;accessKeyId&gt;MY_ACCESS_KEY&lt;/accessKeyId&gt;\n        &lt;secretKey&gt;MY_SECRET_KEY&lt;/secretKey&gt;\n        &lt;region&gt;MY_REGION&lt;/region&gt;\n        &lt;trustStorePath&gt;MY_TRUSTSTORE_PATH&lt;/trustStorePath&gt;\n        &lt;trustStorePassword&gt;MY_TRUSTSTORE_PASSWORD&lt;/trustStorePassword&gt;\n        &lt;trustStoreType&gt;MY_TRUSTSTORE_TYPE&lt;/trustStoreType&gt;\n        &lt;keyStorePath&gt;MY_KEYSTORE_PATH&lt;/keyStorePath&gt;\n        &lt;keyStorePassword&gt;MY_KEYSTORE_PASSWORD&lt;/keyStorePassword&gt;\n        &lt;keyStoreType&gt;MY_KEYSTORE_TYPE&lt;/keyStoreType&gt;\n    &lt;/configuration&gt;\n</code></pre><p>\nIf the configuration id is not present, &#34;default&#34; is used.\n</p><p>\nTo look up a configuration, use new NuxeoAWSCredentialsProvider(&#34;myconfig&#34;)\nand new NuxeoAWSRegionProvider(&#34;myconfig&#34;). Alternatively, you can use\nthe service AWSConfigurationService directly (but it just looks up provided configuration,\nit doesn&#39;t fall back to the AWS SDK default behavior).\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws/org.nuxeo.runtime.aws.AWSConfigurationService/ExtensionPoints/org.nuxeo.runtime.aws.AWSConfigurationService--configuration",
              "id": "org.nuxeo.runtime.aws.AWSConfigurationService--configuration",
              "label": "configuration (org.nuxeo.runtime.aws.AWSConfigurationService)",
              "name": "configuration",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws/org.nuxeo.runtime.aws.AWSConfigurationService",
          "name": "org.nuxeo.runtime.aws.AWSConfigurationService",
          "requirements": [],
          "resolutionOrder": 569,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.aws.AWSConfigurationService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws/org.nuxeo.runtime.aws.AWSConfigurationService/Services/org.nuxeo.runtime.aws.AWSConfigurationService",
              "id": "org.nuxeo.runtime.aws.AWSConfigurationService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 667,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.runtime.aws.AWSConfigurationService\">\n\n  <documentation>Manages AWS configuration.</documentation>\n\n  <implementation class=\"org.nuxeo.runtime.aws.AWSConfigurationServiceImpl\"/>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Used to register AWS configurations. Example:\n      <code>\n        <configuration id=\"myconfig\">\n          <accessKeyId>MY_ACCESS_KEY</accessKeyId>\n          <secretKey>********</secretKey>\n          <region>MY_REGION</region>\n          <trustStorePath>MY_TRUSTSTORE_PATH</trustStorePath>\n          <trustStorePassword>********</trustStorePassword>\n          <trustStoreType>MY_TRUSTSTORE_TYPE</trustStoreType>\n          <keyStorePath>MY_KEYSTORE_PATH</keyStorePath>\n          <keyStorePassword>********</keyStorePassword>\n          <keyStoreType>MY_KEYSTORE_TYPE</keyStoreType>\n        </configuration>\n      </code>\n      If the configuration id is not present, \"default\" is used.\n\n      To look up a configuration, use new NuxeoAWSCredentialsProvider(\"myconfig\")\n      and new NuxeoAWSRegionProvider(\"myconfig\"). Alternatively, you can use\n      the service AWSConfigurationService directly (but it just looks up provided configuration,\n      it doesn't fall back to the AWS SDK default behavior).\n    </documentation>\n    <object class=\"org.nuxeo.runtime.aws.AWSConfigurationDescriptor\"/>\n  </extension-point>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.aws.AWSConfigurationService\"/>\n  </service>\n\n</component>",
          "xmlFileName": "/OSGI-INF/aws-configuration-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.metrics.MetricsService--reporter",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws/org.nuxeo.runtime.aws.metrics.contrib/Contributions/org.nuxeo.runtime.aws.metrics.contrib--reporter",
              "id": "org.nuxeo.runtime.aws.metrics.contrib--reporter",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.metrics.MetricsService",
                "name": "org.nuxeo.runtime.metrics.MetricsService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"reporter\" target=\"org.nuxeo.runtime.metrics.MetricsService\">\n    <reporter class=\"org.nuxeo.runtime.aws.cloudwatch.ScaleMetricReporter\" enabled=\"false\" name=\"cloudWatchScale\" pollInterval=\"60\">\n      <option name=\"awsConfigurationId\"/>\n      <option name=\"awsTag\"/>\n      <option name=\"stepMetric\">true</option>\n      <option name=\"targetMetric\">true</option>\n    </reporter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws/org.nuxeo.runtime.aws.metrics.contrib",
          "name": "org.nuxeo.runtime.aws.metrics.contrib",
          "requirements": [],
          "resolutionOrder": 570,
          "services": [],
          "startOrder": 507,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.aws.metrics.contrib\">\n  <extension target=\"org.nuxeo.runtime.metrics.MetricsService\" point=\"reporter\">\n    <reporter enabled=\"${metrics.cloudwatch.scale.enabled:=false}\" name=\"cloudWatchScale\"\n      pollInterval=\"${metrics.cloudwatch.scale.pollInterval:=60}\"\n      class=\"org.nuxeo.runtime.aws.cloudwatch.ScaleMetricReporter\">\n      <option name=\"awsConfigurationId\">${metrics.cloudwatch.aws.configuration.id:=}</option>\n      <option name=\"awsTag\">${metrics.cloudwatch.scale.tag:=}</option>\n      <option name=\"stepMetric\">${metrics.cloudwatch.scale.step.enabled:=true}</option>\n      <option name=\"targetMetric\">${metrics.cloudwatch.scale.target.enabled:=true}</option>\n    </reporter>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/aws-metrics-config.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-runtime-aws-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws",
      "id": "org.nuxeo.runtime.aws",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: org.nuxeo\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Runtime AWS\r\nBundle-SymbolicName: org.nuxeo.runtime.aws;singleton=true\r\nNuxeo-Component: OSGI-INF/aws-configuration-service.xml,OSGI-INF/aws-met\r\n rics-config.xml\r\n\r\n",
      "maxResolutionOrder": 570,
      "minResolutionOrder": 569,
      "packages": [
        "amazon-s3-online-storage"
      ],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-actions-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/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": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.actions.ActionService.properties",
          "name": "org.nuxeo.ecm.platform.actions.ActionService.properties",
          "requirements": [],
          "resolutionOrder": 230,
          "services": [],
          "startOrder": 222,
          "version": "2025.7.12",
          "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"
              ],
              "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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.actions.ActionService",
          "name": "org.nuxeo.ecm.platform.actions.ActionService",
          "requirements": [],
          "resolutionOrder": 231,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.actions.ActionService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 605,
          "version": "2025.7.12",
          "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  </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/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.filters/Contributions/org.nuxeo.ecm.platform.filters--filters",
              "id": "org.nuxeo.ecm.platform.filters--filters",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.actions/org.nuxeo.ecm.platform.filters",
          "name": "org.nuxeo.ecm.platform.filters",
          "requirements": [],
          "resolutionOrder": 232,
          "services": [],
          "startOrder": 264,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.actions",
      "id": "org.nuxeo.ecm.actions",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\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.ejb,org.apache.commons.logging,org.jboss.seam.page\r\n flow,org.jbpm.graph.def,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.\r\n core;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.\r\n impl,org.nuxeo.ecm.directory;api=split,org.nuxeo.ecm.platform.actions,o\r\n rg.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.expression,org\r\n .nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.actions;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 232,
      "minResolutionOrder": 230,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-automation-server",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.automation.core",
          "org.nuxeo.ecm.automation.features",
          "org.nuxeo.ecm.automation.io",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.automation.server",
      "components": [
        {
          "@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.server/org.nuxeo.ecm.automation.server.bindings/Contributions/org.nuxeo.ecm.automation.server.bindings--bindings",
              "id": "org.nuxeo.ecm.automation.server.bindings--bindings",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <!-- don't allow GET of arbitrary URLs on the server -->\n    <binding name=\"Blob.CreateFromURL\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- don't allow POST of arbitrary URLs on the server -->\n    <binding name=\"Blob.Post\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- don't allow write of arbitrary files on the server -->\n    <binding name=\"Blob.ExportToFS\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- don't allow arbitrary email sending on the server -->\n    <binding name=\"Document.Mail\">\n      <administrator>true</administrator>\n    </binding>\n\n    <!-- protect access to directories -->\n    <binding name=\"Directory.Entries\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- protect arbitrary script execution -->\n    <binding name=\"RunInputScript\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"RunScript\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- protect counter access -->\n    <binding name=\"Counters.GET\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- protect proxy creation -->\n    <binding name=\"Document.CreateLiveProxy\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.server/org.nuxeo.ecm.automation.server.bindings",
          "name": "org.nuxeo.ecm.automation.server.bindings",
          "requirements": [],
          "resolutionOrder": 58,
          "services": [],
          "startOrder": 79,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.automation.server.bindings\"\n  version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\"\n    point=\"bindings\">\n    <!-- don't allow GET of arbitrary URLs on the server -->\n    <binding name=\"Blob.CreateFromURL\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- don't allow POST of arbitrary URLs on the server -->\n    <binding name=\"Blob.Post\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- don't allow write of arbitrary files on the server -->\n    <binding name=\"Blob.ExportToFS\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- don't allow arbitrary email sending on the server -->\n    <binding name=\"Document.Mail\">\n      <administrator>true</administrator>\n    </binding>\n\n    <!-- protect access to directories -->\n    <binding name=\"Directory.Entries\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- protect arbitrary script execution -->\n    <binding name=\"RunInputScript\">\n      <administrator>true</administrator>\n    </binding>\n    <binding name=\"RunScript\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- protect counter access -->\n    <binding name=\"Counters.GET\">\n      <administrator>true</administrator>\n    </binding>\n    <!-- protect proxy creation -->\n    <binding name=\"Document.CreateLiveProxy\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/binding-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n\n    Default QueryModel contributions used to fetch document lists.\n\n    @author\n    <a href=\"mailto:dmetzler@nuxeo.com\">Damien Metzler</a>\n",
          "documentationHtml": "<p>\nDefault QueryModel contributions used to fetch document lists.\n</p><p>\n<a href=\"mailto:dmetzler&#64;nuxeo.com\">Damien Metzler</a></p>",
          "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.server/org.nuxeo.ecm.automation.rest.pageprovider.contrib/Contributions/org.nuxeo.ecm.automation.rest.pageprovider.contrib--providers",
              "id": "org.nuxeo.ecm.automation.rest.pageprovider.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": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n    <coreQueryPageProvider name=\"CURRENT_DOC_CHILDREN\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:parentId = ? AND\n        ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isVersion = 0 AND 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.automation/org.nuxeo.ecm.automation.server/org.nuxeo.ecm.automation.rest.pageprovider.contrib",
          "name": "org.nuxeo.ecm.automation.rest.pageprovider.contrib",
          "requirements": [],
          "resolutionOrder": 59,
          "services": [],
          "startOrder": 77,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.automation.rest.pageprovider.contrib\">\n\n  <documentation>\n    Default QueryModel contributions used to fetch document lists.\n\n    @author\n    <a href=\"mailto:dmetzler@nuxeo.com\">Damien Metzler</a>\n  </documentation>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n    <coreQueryPageProvider name=\"CURRENT_DOC_CHILDREN\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:parentId = ? AND\n        ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n  </extension>\n</component>",
          "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.platform.ui.web.auth.service.PluggableAuthenticationService--authenticators",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.server/org.nuxeo.ecm.automation.server.auth.config/Contributions/org.nuxeo.ecm.automation.server.auth.config--authenticators",
              "id": "org.nuxeo.ecm.automation.server.auth.config--authenticators",
              "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": "2025.7.12",
              "xml": "<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <authenticationPlugin class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.BasicAuthenticator\" enabled=\"true\" name=\"AUTOMATION_BASIC_AUTH\">\n      <parameters>\n        <parameter name=\"AutoPrompt\">true</parameter>\n        <parameter name=\"RealmName\">Nuxeo Automation</parameter>\n        <parameter name=\"ExcludeBAHeader_Token\">X-Authentication-Token</parameter>\n        <parameter name=\"ExcludeBAHeader_Token\">X-No-Basic-Header</parameter>\n        <parameter name=\"ExcludeBAHeader_COOKIE\">Cookie</parameter>\n      </parameters>\n    </authenticationPlugin>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--specificChains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.server/org.nuxeo.ecm.automation.server.auth.config/Contributions/org.nuxeo.ecm.automation.server.auth.config--specificChains",
              "id": "org.nuxeo.ecm.automation.server.auth.config--specificChains",
              "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": "2025.7.12",
              "xml": "<extension point=\"specificChains\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <specificAuthenticationChain name=\"Automation\">\n        <urlPatterns>\n            <url>(.*)/automation.*</url>\n        </urlPatterns>\n\n        <replacementChain>\n            <plugin>AUTOMATION_BASIC_AUTH</plugin>\n        </replacementChain>\n    </specificAuthenticationChain>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.server/org.nuxeo.ecm.automation.server.auth.config",
          "name": "org.nuxeo.ecm.automation.server.auth.config",
          "requirements": [
            "org.nuxeo.ecm.platform.ui.web.auth.defaultConfig"
          ],
          "resolutionOrder": 496,
          "services": [],
          "startOrder": 78,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.automation.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.platform.ui.web.auth.defaultConfig</require>\n  <extension\n      target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n      point=\"authenticators\">\n    <authenticationPlugin name=\"AUTOMATION_BASIC_AUTH\" enabled=\"true\"\n        class=\"org.nuxeo.ecm.platform.ui.web.auth.plugins.BasicAuthenticator\">\n      <parameters>\n        <parameter name=\"AutoPrompt\">true</parameter>\n        <parameter name=\"RealmName\">Nuxeo Automation</parameter>\n        <parameter name=\"ExcludeBAHeader_Token\">X-Authentication-Token</parameter>\n        <parameter name=\"ExcludeBAHeader_Token\">X-No-Basic-Header</parameter>\n        <parameter name=\"ExcludeBAHeader_COOKIE\">Cookie</parameter>\n      </parameters>\n    </authenticationPlugin>\n  </extension>\n\n  <extension\n      target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n      point=\"specificChains\">\n\n    <specificAuthenticationChain name=\"Automation\">\n        <urlPatterns>\n            <url>(.*)/automation.*</url>\n        </urlPatterns>\n\n        <replacementChain>\n            <plugin>AUTOMATION_BASIC_AUTH</plugin>\n        </replacementChain>\n    </specificAuthenticationChain>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/auth-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.automation.server.AutomationServerComponent",
          "declaredStartOrder": null,
          "documentation": "@author Bogdan Stefanescu (bs@nuxeo.com)\n",
          "documentationHtml": "<p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.automation.server.AutomationServer",
              "descriptors": [
                "org.nuxeo.ecm.automation.server.RestBinding"
              ],
              "documentation": "Rest security bindings on operations\n",
              "documentationHtml": "<p>\nRest security bindings on operations</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.server/org.nuxeo.ecm.automation.server.AutomationServer/ExtensionPoints/org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "id": "org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "label": "bindings (org.nuxeo.ecm.automation.server.AutomationServer)",
              "name": "bindings",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.automation.server.AutomationServer",
              "descriptors": [
                "org.nuxeo.ecm.automation.server.MarshallerDescriptor"
              ],
              "documentation": "REST writer/reader declarations\n",
              "documentationHtml": "<p>\nREST writer/reader declarations</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.server/org.nuxeo.ecm.automation.server.AutomationServer/ExtensionPoints/org.nuxeo.ecm.automation.server.AutomationServer--marshallers",
              "id": "org.nuxeo.ecm.automation.server.AutomationServer--marshallers",
              "label": "marshallers (org.nuxeo.ecm.automation.server.AutomationServer)",
              "name": "marshallers",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.server/org.nuxeo.ecm.automation.server.AutomationServer",
          "name": "org.nuxeo.ecm.automation.server.AutomationServer",
          "requirements": [
            "org.nuxeo.ecm.automation.io.services.IOComponent"
          ],
          "resolutionOrder": 678,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.automation.server.AutomationServer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.server/org.nuxeo.ecm.automation.server.AutomationServer/Services/org.nuxeo.ecm.automation.server.AutomationServer",
              "id": "org.nuxeo.ecm.automation.server.AutomationServer",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 558,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.automation.server.AutomationServer\"\n           version=\"1.0\">\n\n  <require>org.nuxeo.ecm.automation.io.services.IOComponent</require>\n\n  <documentation>@author Bogdan Stefanescu (bs@nuxeo.com)</documentation>\n\n  <implementation class=\"org.nuxeo.ecm.automation.server.AutomationServerComponent\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.automation.server.AutomationServer\"/>\n  </service>\n\n  <extension-point name=\"bindings\">\n    <documentation>Rest security bindings on operations</documentation>\n    <object class=\"org.nuxeo.ecm.automation.server.RestBinding\"/>\n  </extension-point>\n\n\n  <extension-point name=\"marshallers\">\n    <documentation>REST writer/reader declarations</documentation>\n    <object class=\"org.nuxeo.ecm.automation.server.MarshallerDescriptor\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/AutomationServer.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-automation-server-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.automation",
      "hierarchyPath": "/grp:org.nuxeo.ecm.automation/org.nuxeo.ecm.automation.server",
      "id": "org.nuxeo.ecm.automation.server",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-ClassPath: .\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Automation Server\r\nBundle-SymbolicName: org.nuxeo.ecm.automation.server\r\nBundle-Vendor: Nuxeo\r\nExport-Package: org.nuxeo.ecm.automation.server\r\nBundle-ActivationPolicy: lazy\r\nNuxeo-WebModule: org.nuxeo.ecm.automation.server.rest.AutomationModule;n\r\n ame=automation;extends=base;package=org/nuxeo/ecm/automation/server/res\r\n t\r\nNuxeo-Component: OSGI-INF/AutomationServer.xml,OSGI-INF/auth-contrib.xml\r\n ,OSGI-INF/binding-contrib.xml,OSGI-INF/pageprovider-contrib.xml\r\nNuxeo-AllowOverride: true\r\nImport-Package: org.apache.commons.logging,org.joda.time,org.joda.time.f\r\n ormat,org.nuxeo.common.utils,org.nuxeo.common.xmap,org.nuxeo.common.xma\r\n p.annotation,org.nuxeo.ecm.automation,org.nuxeo.ecm.automation.core,org\r\n .nuxeo.ecm.automation.core.doc,org.nuxeo.ecm.automation.core.scripting,\r\n org.nuxeo.ecm.automation.core.util,org.nuxeo.ecm.core.api,org.nuxeo.ecm\r\n .core.api.impl,org.nuxeo.ecm.core.api.impl.blob,org.nuxeo.ecm.core.api.\r\n model,org.nuxeo.ecm.core.api.model.impl,org.nuxeo.ecm.core.api.model.im\r\n pl.primitives,org.nuxeo.ecm.core.schema,org.nuxeo.ecm.core.schema.types\r\n ,org.nuxeo.ecm.core.schema.utils,org.nuxeo.runtime,org.nuxeo.runtime.ap\r\n i,org.nuxeo.runtime.model,org.osgi.framework;version=\"1.5.0\"\r\nRequire-Bundle: org.nuxeo.ecm.automation.core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.7\r\n\r\n",
      "maxResolutionOrder": 678,
      "minResolutionOrder": 58,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.automation.core"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login-token",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.login.token",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.tokenauth.service.TokenAuthenticationServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service to manage generation and storage of\n    authentication tokens. Each token\n    is unique and persisted in the\n    back-end with the user information it\n    is bound to: user name,\n    application name, device name, device description, permission.\n\n    @author Antoine Taillefer\n    (ataillefer@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nService to manage generation and storage of\nauthentication tokens. Each token\nis unique and persisted in the\nback-end with the user information it\nis bound to: user name,\napplication name, device name, device description, permission.\n</p><p>\n(ataillefer&#64;nuxeo.com)\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.login.token.TokenAuthenticationService",
          "name": "org.nuxeo.ecm.login.token.TokenAuthenticationService",
          "requirements": [],
          "resolutionOrder": 343,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.login.token.TokenAuthenticationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.login.token.TokenAuthenticationService/Services/org.nuxeo.ecm.tokenauth.service.TokenAuthenticationService",
              "id": "org.nuxeo.ecm.tokenauth.service.TokenAuthenticationService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 203,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.login.token.TokenAuthenticationService\">\n\n  <documentation>\n    Service to manage generation and storage of\n    authentication tokens. Each token\n    is unique and persisted in the\n    back-end with the user information it\n    is bound to: user name,\n    application name, device name, device description, permission.\n\n    @author Antoine Taillefer\n    (ataillefer@nuxeo.com)\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.tokenauth.service.TokenAuthenticationServiceImpl\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.tokenauth.service.TokenAuthenticationService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/token-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.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.login.token.directory.types/Contributions/org.nuxeo.ecm.login.token.directory.types--schema",
              "id": "org.nuxeo.ecm.login.token.directory.types--schema",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"authtoken\" src=\"directoryschema/authtoken.xsd\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.login.token.directory.types",
          "name": "org.nuxeo.ecm.login.token.directory.types",
          "requirements": [],
          "resolutionOrder": 344,
          "services": [],
          "startOrder": 206,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.login.token.directory.types\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"authtoken\" src=\"directoryschema/authtoken.xsd\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/token-authentication-directory-types.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.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.login.token.directory.contrib/Contributions/org.nuxeo.ecm.login.token.directory.contrib--directories",
              "id": "org.nuxeo.ecm.login.token.directory.contrib--directories",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"authTokens\">\n      <schema>authtoken</schema>\n      <idField>token</idField>\n      <table>auth_tokens</table>\n      <types>\n        <type>system</type>\n      </types>\n      <permissions>\n        <permission name=\"Read\">\n          <group>__Nobody__</group>\n        </permission>\n      </permissions>\n      <!-- Set cache to 5 minutes -->\n      <cacheTimeout>300</cacheTimeout>\n      <cacheMaxSize>1000</cacheMaxSize>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.login.token.directory.contrib",
          "name": "org.nuxeo.ecm.login.token.directory.contrib",
          "requirements": [],
          "resolutionOrder": 345,
          "services": [],
          "startOrder": 205,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.login.token.directory.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"authTokens\" extends=\"template-directory\">\n      <schema>authtoken</schema>\n      <idField>token</idField>\n      <table>auth_tokens</table>\n      <types>\n        <type>system</type>\n      </types>\n      <permissions>\n        <permission name=\"Read\">\n          <group>__Nobody__</group>\n        </permission>\n      </permissions>\n      <!-- Set cache to 5 minutes -->\n      <cacheTimeout>300</cacheTimeout>\n      <cacheMaxSize>1000</cacheMaxSize>\n    </directory>\n\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/token-authentication-directory-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.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.tokenauth.io.marshallers/Contributions/org.nuxeo.ecm.tokenauth.io.marshallers--marshallers",
              "id": "org.nuxeo.ecm.tokenauth.io.marshallers--marshallers",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.tokenauth.io.AuthenticationTokenWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.tokenauth.io.AuthenticationTokenListWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.tokenauth.io.marshallers",
          "name": "org.nuxeo.ecm.tokenauth.io.marshallers",
          "requirements": [],
          "resolutionOrder": 346,
          "services": [],
          "startOrder": 453,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\" org.nuxeo.ecm.tokenauth.io.marshallers\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.tokenauth.io.AuthenticationTokenWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.tokenauth.io.AuthenticationTokenListWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/token-authentication-marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Authentication plugin using a token to validate\n      identity. This token is sent as a HTTP request header.\n\n      The user is retrieved looking into a directory mapping unique tokens to user names.\n\n      Set the allowAnonymous parameter to true to\n      allow token authentication for anonymous user.\n\n      @author\n      Antoine Taillefer (ataillefer@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nAuthentication plugin using a token to validate\nidentity. This token is sent as a HTTP request header.\n</p><p>\nThe user is retrieved looking into a directory mapping unique tokens to user names.\n</p><p>\nSet the allowAnonymous parameter to true to\nallow token authentication for anonymous user.\n</p><p>\nAntoine Taillefer (ataillefer&#64;nuxeo.com)\n</p><p></p>",
              "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.token/org.nuxeo.ecm.login.token.authentication.contrib/Contributions/org.nuxeo.ecm.login.token.authentication.contrib--authenticators",
              "id": "org.nuxeo.ecm.login.token.authentication.contrib--authenticators",
              "registrationOrder": 8,
              "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": "2025.7.12",
              "xml": "<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <documentation>\n      Authentication plugin using a token to validate\n      identity. This token is sent as a HTTP request header.\n\n      The user is retrieved looking into a directory mapping unique tokens to user names.\n\n      Set the allowAnonymous parameter to true to\n      allow token authentication for anonymous user.\n\n      @author\n      Antoine Taillefer (ataillefer@nuxeo.com)\n    </documentation>\n\n    <authenticationPlugin class=\"org.nuxeo.ecm.platform.ui.web.auth.token.TokenAuthenticator\" enabled=\"true\" name=\"TOKEN_AUTH\">\n      <parameters>\n        <parameter name=\"allowAnonymous\">false</parameter>\n      </parameters>\n    </authenticationPlugin>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Override Automation specific authentication chain to\n      use token authentication just after basic one.\n    \n",
              "documentationHtml": "<p>\nOverride Automation specific authentication chain to\nuse token authentication just after basic one.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--specificChains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.login.token.authentication.contrib/Contributions/org.nuxeo.ecm.login.token.authentication.contrib--specificChains",
              "id": "org.nuxeo.ecm.login.token.authentication.contrib--specificChains",
              "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": "2025.7.12",
              "xml": "<extension point=\"specificChains\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <documentation>\n      Override Automation specific authentication chain to\n      use token authentication just after basic one.\n    </documentation>\n\n    <specificAuthenticationChain name=\"Automation\">\n\n      <urlPatterns>\n        <url>(.*)/automation.*</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    <specificAuthenticationChain name=\"RestAPI\">\n      <urlPatterns>\n        <url>(.*)/api/v.*</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\n\n    <documentation>\n      Use token authentication if the related request\n      header is sent.\n    </documentation>\n\n    <specificAuthenticationChain name=\"TokenAuth\">\n      <headers>\n        <header name=\"X-Authentication-Token\">.*</header>\n      </headers>\n      <replacementChain>\n        <plugin>TOKEN_AUTH</plugin>\n      </replacementChain>\n    </specificAuthenticationChain>\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.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.login.token.authentication.contrib/Contributions/org.nuxeo.ecm.login.token.authentication.contrib--startURL",
              "id": "org.nuxeo.ecm.login.token.authentication.contrib--startURL",
              "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": "2025.7.12",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>acquire_token.jsp</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.token/org.nuxeo.ecm.login.token.authentication.contrib",
          "name": "org.nuxeo.ecm.login.token.authentication.contrib",
          "requirements": [
            "org.nuxeo.ecm.automation.server.auth.config"
          ],
          "resolutionOrder": 497,
          "services": [],
          "startOrder": 204,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.login.token.authentication.contrib\">\n\n  <!-- Replace Automation specific authentication chain -->\n  <require>org.nuxeo.ecm.automation.server.auth.config</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"authenticators\">\n\n    <documentation>\n      Authentication plugin using a token to validate\n      identity. This token is sent as a HTTP request header.\n\n      The user is retrieved looking into a directory mapping unique tokens to user names.\n\n      Set the allowAnonymous parameter to true to\n      allow token authentication for anonymous user.\n\n      @author\n      Antoine Taillefer (ataillefer@nuxeo.com)\n    </documentation>\n\n    <authenticationPlugin name=\"TOKEN_AUTH\" enabled=\"true\"\n      class=\"org.nuxeo.ecm.platform.ui.web.auth.token.TokenAuthenticator\">\n      <parameters>\n        <parameter name=\"allowAnonymous\">false</parameter>\n      </parameters>\n    </authenticationPlugin>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"specificChains\">\n\n    <documentation>\n      Override Automation specific authentication chain to\n      use token authentication just after basic one.\n    </documentation>\n\n    <specificAuthenticationChain name=\"Automation\">\n\n      <urlPatterns>\n        <url>(.*)/automation.*</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    <specificAuthenticationChain name=\"RestAPI\">\n      <urlPatterns>\n        <url>(.*)/api/v.*</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\n\n    <documentation>\n      Use token authentication if the related request\n      header is sent.\n    </documentation>\n\n    <specificAuthenticationChain name=\"TokenAuth\">\n      <headers>\n        <header name=\"X-Authentication-Token\">.*</header>\n      </headers>\n      <replacementChain>\n        <plugin>TOKEN_AUTH</plugin>\n      </replacementChain>\n    </specificAuthenticationChain>\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>acquire_token.jsp</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/token-authentication-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-login-token-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.platform.login/org.nuxeo.ecm.platform.login.token",
      "id": "org.nuxeo.ecm.platform.login.token",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo token authentication plugin\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.login.token;singleton:=true\r\nBundle-Version: 1.0.0\r\nRequire-Bundle: org.nuxeo.ecm.platform.login\r\nNuxeo-Component: OSGI-INF/token-authentication-framework.xml,OSGI-INF/to\r\n ken-authentication-directory-types.xml,OSGI-INF/token-authentication-di\r\n rectory-contrib.xml,OSGI-INF/token-authentication-contrib.xml,OSGI-INF/\r\n token-authentication-marshallers-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 497,
      "minResolutionOrder": 343,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Platform Login Token\n\nThis repo hosts the source code of a plugin for Nuxeo Platform that allows a token-based authentication.\n\nThe associated JIRA issue is: [NXP-10268] [1]\n\n## Building and deploying\n\n- Install a Nuxeo server, version 5.6 or higher.\n\n- Install maven 2.2.1+ and build _nuxeo-platform-login-token_ by running:\n\n        mvn clean install\n\n- Deploy _nuxeo-platform-login-token_ in the Nuxeo server by running:\n\n        cp target/nuxeo-platform-login-token-5.7-SNAPSHOT.jar $NUXEO_HOME/nxserver/plugins/\n\n- Start Nuxeo and have a try!\n\n## Goal\n\nThe main goal of this module is to allow a client device to authenticate against a Nuxeo server using a token acquired during a handshake phase and then stored locally for a regular use.\nThis way, the client does not need to store any user secret information such as login / password that could be found easily on a file system for example. If a specific device token is compromised (e.g. laptop theft), the user can revoke the device token in the web interface and generate a new one independent token for new device with their usual user credentials.\n\nA token is bound on the server to a triplet defined by:\n\n- a user name\n- an application name\n- a device identifier\n\nThis way a single user can have multiple tokens for different applications on different devices.\n\nFor example: the user _joe_ could have 3 tokens:\n\n- one for the Nuxeo Drive client on his Linux box\n- one for the Nuxeo Drive client on his Windows box\n- one for a Nuxeo Automation client application on his Linux box\n\nThe module includes a UI for the user to manage their tokens.\nFor now a token can only be revoked, but for later we are planning of setting an expiration date on tokens with a possibility to renew them.\n\n## Implementation\n\n### Handshake phase\n\nThe ``TokenAuthenticationServlet``, protected by basic authentication and mapped on the ``/authentication/token`` URL pattern, allows to get a unique token given some user information passed as request parameters:\n``applicationName``, ``deviceId``, ``deviceDescription`` and ``permission``.\n\nThe token is sent as plain text in the response body.\n\nAn error response will be sent with a 400 status code if one of the required parameters is null or empty.\nAll parameters are required except for the device description. The parameters are URI decoded by the Servlet.\n\nFor example, you could execute the following command to acquire a token:\n\n    curl -H 'Authorization:Basic **********************' -G 'http://server:port/nuxeo/authentication/token?applicationName=Nuxeo%20Drive&deviceId=device-1&deviceDescription=My%20Linux%20box&permission=rw'\n\nWhile the device description can typically be edited by the user (for instance in the JSF UI), both the Application Name and the device identifier should not change once the token has been generated.\n\n### Token bindings\n\nThe ``TokenAuthenticationService`` handles the token generation and storage of the token bindings.\n\n- A token is randomly generated using the ``UUID`` class from the JDK which ensures that it is unique and secure.\n- Token bindings are persisted in a SQL directory, using the token as a primary key.\n\nLooking back at the example of _joe_ and his 3 tokens, the server would hold these 3 token bindings:\n\n- {'tokenA', 'joe', 'Nuxeo Drive', 'device-1'}\n- {'tokenB', 'joe', 'Nuxeo Drive', 'device-2'}\n- {'tokenC', 'joe', 'Automation client', 'device-1'}\n\n### Authentication plugin\n\nThe module contributes a new ``authenticationPlugin`` called ``TOKEN_AUTH``, that handles authentication with a token sent as a request header.\nIt uses the ``TokenAuthenticationService`` to search for a user name bound to the given token.\n\nThis authentication plugin is configured to be used with the ``Trusting_LM`` ``LoginModule`` plugin =>\nno password check is done, a principal will be created from the user name if the user exists in the user directory.\n\nThe token must be put in a request header called ``X-Authentication-Token``.\n\nThe automation-specific authentication chain is overridden to use the ``TOKEN_AUTH`` plugin just after the basic authentication one.\nA specific authentication chain is also mapped on the token request header.\n\n    <extension\n      target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n      point=\"specificChains\">\n\n      <specificAuthenticationChain name=\"Automation\">\n        <urlPatterns>\n          <url>(.*)/automation.*</url>\n        </urlPatterns>\n        <replacementChain>\n          <plugin>AUTOMATION_BASIC_AUTH</plugin>\n          <plugin>TOKEN_AUTH</plugin>\n          <plugin>ANONYMOUS_AUTH</plugin>\n        </replacementChain>\n      </specificAuthenticationChain>\n\n      <specificAuthenticationChain name=\"TokenAuth\">\n        <headers>\n          <header name=\"X-Authentication-Token\">.*</header>\n        </headers>\n        <replacementChain>\n          <plugin>TOKEN_AUTH</plugin>\n        </replacementChain>\n      </specificAuthenticationChain>\n\n    </extension>\n\n### UI\n\nThe module provides the ``auth_token_bindings.xhtml`` view that includes the ``authTokenBindings`` layout to display the list of token bindings for the current user, with a _Revoke_ action on each token.\n\nFor now, as this module is mostly dedicated to [Nuxeo Drive] [2] (also see [NXP-10269] [3]), it only provides a layout and XHTML view for listing token bindings,\nbut does not include this view by default in the User Center. It will be used in the specific _Nuxeo Drive_ tab of the User Center.\n\n\n## About Nuxeo\n\nNuxeo provides a modular, extensible Java-based [open source software\nplatform for enterprise content management] [5] and packaged applications\nfor [document management] [6], [digital asset management] [7] and\n[case management] [8]. Designed by developers for developers, the Nuxeo\nplatform offers a modern architecture, a powerful plug-in model and\nextensive packaging capabilities for building content applications.\n\nMore information on: <http://www.nuxeo.com/>\n\n[1]: https://jira.nuxeo.com/browse/NXP-10268\n[2]: https://github.com/nuxeo/nuxeo-drive\n[3]: https://jira.nuxeo.com/browse/NXP-10269\n[5]: http://www.nuxeo.com/en/products/ep\n[6]: http://www.nuxeo.com/en/products/document-management\n[7]: http://www.nuxeo.com/en/products/dam\n[8]: http://www.nuxeo.com/en/products/case-management\n",
        "digest": "3b35d33d52743addaaeae11bcfcfb8bb",
        "encoding": "UTF-8",
        "length": 6297,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [
        "org.nuxeo.ecm.platform.login"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-template-rendering-xdocreport",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.template.manager",
          "org.nuxeo.template.manager.api",
          "org.nuxeo.template.manager.jxls",
          "org.nuxeo.template.manager.rest",
          "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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
            "encoding": "UTF-8",
            "length": 3342,
            "mimeType": "text/plain",
            "name": "ReadMe.md"
          }
        ],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.template.manager.xdocreport",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "XDocReport Report based template processor\n",
              "documentationHtml": "<p>\nXDocReport Report 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.xdocreport/org.nuxeo.template.service.xdocreport.contrib/Contributions/org.nuxeo.template.service.xdocreport.contrib--processor",
              "id": "org.nuxeo.template.service.xdocreport.contrib--processor",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.template.service.TemplateProcessorComponent",
                "name": "org.nuxeo.template.service.TemplateProcessorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"processor\" target=\"org.nuxeo.template.service.TemplateProcessorComponent\">\n\n    <documentation>XDocReport Report based template processor</documentation>\n\n    <templateProcessor class=\"org.nuxeo.template.processors.xdocreport.XDocReportProcessor\" 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      <supportedMimeType>application/vnd.oasis.opendocument.spreadsheet</supportedMimeType>\n      <supportedExtension>odt</supportedExtension>\n      <supportedExtension>docx</supportedExtension>\n      <supportedExtension>ods</supportedExtension>\n    </templateProcessor>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.xdocreport/org.nuxeo.template.service.xdocreport.contrib",
          "name": "org.nuxeo.template.service.xdocreport.contrib",
          "requirements": [
            "org.nuxeo.template.service.defaultContrib"
          ],
          "resolutionOrder": 647,
          "services": [],
          "startOrder": 522,
          "version": "2025.7.12",
          "xmlFileContent": "<component\n  name=\"org.nuxeo.template.service.xdocreport.contrib\">\n\n  <require>org.nuxeo.template.service.defaultContrib</require>\n\n  <extension target=\"org.nuxeo.template.service.TemplateProcessorComponent\" point=\"processor\">\n\n    <documentation>XDocReport Report based template processor</documentation>\n\n    <templateProcessor name=\"XDocReportProcessor\" label=\"XDocReport processor\" default=\"true\" 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      <supportedMimeType>application/vnd.oasis.opendocument.spreadsheet</supportedMimeType>\n      <supportedExtension>odt</supportedExtension>\n      <supportedExtension>docx</supportedExtension>\n      <supportedExtension>ods</supportedExtension>\n    </templateProcessor>\n\n  </extension>\n\n </component>",
          "xmlFileName": "/OSGI-INF/templateprocessor-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-template-rendering-xdocreport-2025.7.12.jar",
      "groupId": "org.nuxeo.template.rendering",
      "hierarchyPath": "/grp:org.nuxeo.template.rendering/grp:org.nuxeo.template/org.nuxeo.template.manager.xdocreport",
      "id": "org.nuxeo.template.manager.xdocreport",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM Document template Manager XDocreport plugin\r\nBundle-SymbolicName: org.nuxeo.template.manager.xdocreport;singleton:=tr\r\n ue\r\nBundle-Version: 1.0.0\r\nNuxeo-WebModule: org.nuxeo.template.xdocreport.rest.RestRemotingApplicat\r\n ion;name=XDocTemplateResources\r\nNuxeo-Component: OSGI-INF/templateprocessor-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 647,
      "minResolutionOrder": 647,
      "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-rest**\n\nContribute a Rest 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": "ed4c389e9f1a325c41b6fddce28453b6",
        "encoding": "UTF-8",
        "length": 3342,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "readme": {
        "blobProviderId": "default",
        "content": "This modules contains [XDocReport http://code.google.com/p/xdocreport/] plugins of nuxexo-template-rendering module.\n\n## TemplateProcessor\n\nXDocReportProcessor provides an implemantation of the TemplateProcessor that uses XDocReport as an engine.\n\n## Supported formats\n\nThis template processor supports several formats :\n\n - OpenOffice ODT (Write)\n - OpenOffice ODS (Calc)\n - MS Office docx (Word)\n\n## Supported features\n\n - merge fields\n - loops on fields\n - picture insertion\n - text formatting and content inclusion\n\n## Templating format\n\nSee [XDocReport documentation  http://code.google.com/p/xdocreport/wiki/DesignReport].\n\n## XDocReport Remoting\n\nThis module also contains a WebEngine module to provide experimental support for XDocReport remoting and tooling.\n\n## XDocReportTools and REST bindings\n\nXDocReport provide an OpenOffice addon that help the design of Templates.\nThis is still an early version, but you can however use it with Nuxeo.\n\nThe field definition XML file can be generated from Nuxeo Rest API.\nThe field definition file can be generate on a per document type basis :\n\n http://server:port/nuxeo/site/xdoctemplates/xdocresources/model/{docType}\n\nFor XDocReport Resource remote service you can use :\n\n http://server:post/nuxeo/site/xdoctemplates/xdocresources\n",
        "digest": "7c09a295c056063bffd30ba5ac28a785",
        "encoding": "UTF-8",
        "length": 1284,
        "mimeType": "text/plain",
        "name": "ReadMe.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "chemistry-opencmis-commons-impl",
      "artifactVersion": "2.0.0",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-bindings",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-client-impl",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-api",
          "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-impl"
        ],
        "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis",
        "id": "grp:org.nuxeo.chemistry.opencmis",
        "name": "org.nuxeo.chemistry.opencmis",
        "parentIds": [],
        "readmes": [],
        "version": "2025.7"
      },
      "bundleId": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-impl",
      "components": [],
      "fileName": "chemistry-opencmis-commons-impl-2.0.0.jar",
      "groupId": "org.nuxeo.chemistry.opencmis",
      "hierarchyPath": "/grp:org.nuxeo.chemistry.opencmis/org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-impl",
      "id": "org.nuxeo.chemistry.opencmis.chemistry-opencmis-commons-impl",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Apache Maven Bundle Plugin\r\nBuilt-By: Kevin.Leturc\r\nBuild-Jdk: 11.0.23\r\nSpecification-Title: OpenCMIS Commons Implementation\r\nSpecification-Version: 2.0.0\r\nSpecification-Vendor: Nuxeo\r\nImplementation-URL: http://www.nuxeo.com/en/products/chemistry-opencmis-\r\n commons/chemistry-opencmis-commons-impl\r\nImplementation-Title: OpenCMIS Commons Implementation\r\nImplementation-Vendor: Nuxeo\r\nImplementation-Vendor-Id: org.nuxeo.chemistry.opencmis\r\nImplementation-Version: 2.0.0\r\nX-Apache-SVN-Revision: ${buildNumber}\r\nX-Compile-Source-JDK: 11\r\nX-Compile-Target-JDK: 11\r\nBnd-LastModified: 1717165733241\r\nBundle-Description: Apache Chemistry OpenCMIS is an open source implemen\r\n tation of the OASIS CMIS specification.\r\nBundle-DocURL: http://www.nuxeo.com/en/products/chemistry-opencmis-commo\r\n ns/chemistry-opencmis-commons-impl\r\nBundle-License: https://www.apache.org/licenses/LICENSE-2.0.txt\r\nBundle-ManifestVersion: 2\r\nBundle-Name: OpenCMIS Commons Implementation\r\nBundle-SymbolicName: org.nuxeo.chemistry.opencmis.chemistry-opencmis-com\r\n mons-impl\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 2.0.0\r\nExport-Package: org.apache.chemistry.opencmis.commons.impl;version=\"2.0.\r\n 0\";uses:=\"jakarta.xml.ws,javax.xml.datatype,javax.xml.namespace,javax.x\r\n ml.parsers,javax.xml.stream,javax.xml.transform,org.apache.chemistry.op\r\n encmis.commons.data,org.apache.chemistry.opencmis.commons.definitions,o\r\n rg.apache.chemistry.opencmis.commons.enums,org.apache.chemistry.opencmi\r\n s.commons.impl.dataobjects,org.apache.chemistry.opencmis.commons.impl.j\r\n axb,org.apache.chemistry.opencmis.commons.impl.json,org.apache.chemistr\r\n y.opencmis.commons.spi,org.w3c.dom,org.xml.sax\",org.apache.chemistry.op\r\n encmis.commons.impl.dataobjects;version=\"2.0.0\";uses:=\"org.apache.chemi\r\n stry.opencmis.commons.data,org.apache.chemistry.opencmis.commons.defini\r\n tions,org.apache.chemistry.opencmis.commons.enums,org.apache.chemistry.\r\n opencmis.commons.spi\",org.apache.chemistry.opencmis.commons.impl.endpoi\r\n nts;version=\"2.0.0\";uses:=\"org.apache.chemistry.opencmis.commons.endpoi\r\n nts,org.apache.chemistry.opencmis.commons.impl.json.parser\",org.apache.\r\n chemistry.opencmis.commons.impl.jaxb;version=\"2.0.0\";uses:=\"jakarta.act\r\n ivation,jakarta.jws,jakarta.xml.bind,jakarta.xml.bind.annotation,jakart\r\n a.xml.ws,javax.xml.datatype,javax.xml.namespace,org.w3c.dom\",org.apache\r\n .chemistry.opencmis.commons.impl.json;version=\"2.0.0\";uses:=\"org.apache\r\n .chemistry.opencmis.commons.impl.json.parser\",org.apache.chemistry.open\r\n cmis.commons.impl.json.parser;version=\"2.0.0\",org.apache.chemistry.open\r\n cmis.commons.impl.server;version=\"2.0.0\";uses:=\"org.apache.chemistry.op\r\n encmis.commons.data,org.apache.chemistry.opencmis.commons.definitions,o\r\n rg.apache.chemistry.opencmis.commons.enums,org.apache.chemistry.opencmi\r\n s.commons.server,org.apache.chemistry.opencmis.commons.spi\"\r\nImport-Package: org.apache.chemistry.opencmis.commons;version=\"[2.0,3)\",\r\n org.apache.chemistry.opencmis.commons.data;version=\"[2.0,3)\",org.apache\r\n .chemistry.opencmis.commons.definitions;version=\"[2.0,3)\",org.apache.ch\r\n emistry.opencmis.commons.endpoints;version=\"[2.0,3)\",org.apache.chemist\r\n ry.opencmis.commons.enums;version=\"[2.0,3)\",org.apache.chemistry.opencm\r\n is.commons.exceptions;version=\"[2.0,3)\",org.apache.chemistry.opencmis.c\r\n ommons.impl;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.imp\r\n l.dataobjects;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.i\r\n mpl.jaxb;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.j\r\n son;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.impl.json.p\r\n arser;version=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.server;ve\r\n rsion=\"[2.0,3)\",org.apache.chemistry.opencmis.commons.spi;version=\"[2.0\r\n ,3)\",com.ctc.wstx.api;version=\"[5.1,6)\",com.ctc.wstx.stax;version=\"[5.1\r\n ,6)\",jakarta.activation;version=\"[2.0,3)\",jakarta.jws;version=\"[3.0,4)\"\r\n ,jakarta.xml.bind;version=\"[3.0,4)\",jakarta.xml.bind.annotation;version\r\n =\"[3.0,4)\",jakarta.xml.ws;version=\"[3.0,4)\",javax.xml.datatype,javax.xm\r\n l.namespace,javax.xml.parsers,javax.xml.stream,javax.xml.transform,org.\r\n slf4j;version=\"[1.7,2)\",org.w3c.dom,org.xml.sax\r\nRequire-Capability: osgi.ee;filter:=\"(osgi.ee=UNKNOWN)\"\r\nTool: Bnd-3.3.0.201609221906\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2.0.0"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-storage-sql",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.sql",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
              "descriptors": [
                "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService/ExtensionPoints/org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService--queryMaker",
              "id": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService--queryMaker",
              "label": "queryMaker (org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService)",
              "name": "queryMaker",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
          "name": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
          "requirements": [],
          "resolutionOrder": 157,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService/Services/org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
              "id": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 593,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService\"\n  version=\"1.0.0\">\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService\" />\n  </service>\n\n  <extension-point name=\"queryMaker\">\n    <object class=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/querymaker-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.storage.sql.jdbc.QueryMakerService--queryMaker",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.jdbc.querymaker.contrib/Contributions/org.nuxeo.ecm.core.storage.sql.jdbc.querymaker.contrib--queryMaker",
              "id": "org.nuxeo.ecm.core.storage.sql.jdbc.querymaker.contrib--queryMaker",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
                "name": "org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"queryMaker\" target=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService\">\n    <queryMaker name=\"NXQL\">org.nuxeo.ecm.core.storage.sql.jdbc.NXQLQueryMaker\n    </queryMaker>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.jdbc.querymaker.contrib",
          "name": "org.nuxeo.ecm.core.storage.sql.jdbc.querymaker.contrib",
          "requirements": [],
          "resolutionOrder": 158,
          "services": [],
          "startOrder": 158,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.sql.jdbc.querymaker.contrib\"\n  version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.storage.sql.jdbc.QueryMakerService\"\n    point=\"queryMaker\">\n    <queryMaker name=\"NXQL\">org.nuxeo.ecm.core.storage.sql.jdbc.NXQLQueryMaker\n    </queryMaker>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/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.scheduler.SchedulerService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.softdelete/Contributions/org.nuxeo.ecm.core.storage.sql.softdelete--schedule",
              "id": "org.nuxeo.ecm.core.storage.sql.softdelete--schedule",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scheduler.SchedulerService",
                "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\">\n    <schedule id=\"softDeleteCleanup\">\n      <event>softDeleteCleanup</event>\n      <!-- cleanup 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/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.softdelete/Contributions/org.nuxeo.ecm.core.storage.sql.softdelete--listener",
              "id": "org.nuxeo.ecm.core.storage.sql.softdelete--listener",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.ecm.core.storage.sql.SoftDeleteCleanupListener\" name=\"softDeleteCleanup\">\n      <event>softDeleteCleanup</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.softdelete",
          "name": "org.nuxeo.ecm.core.storage.sql.softdelete",
          "requirements": [],
          "resolutionOrder": 159,
          "services": [],
          "startOrder": 160,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.sql.softdelete\">\n\n  <extension target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\"\n    point=\"schedule\">\n    <schedule id=\"softDeleteCleanup\">\n      <event>softDeleteCleanup</event>\n      <!-- cleanup every 15 minutes -->\n      <cronExpression>0 0/15 * * * ?</cronExpression>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"softDeleteCleanup\" async=\"false\"\n      class=\"org.nuxeo.ecm.core.storage.sql.SoftDeleteCleanupListener\">\n      <event>softDeleteCleanup</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/repo-softdelete-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.storage.sql.coremodel.SQLRepositoryService",
          "declaredStartOrder": null,
          "documentation": "\n    Manages VCS repositories.\n  \n",
          "documentationHtml": "<p>\nManages VCS repositories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.storage.sql.RepositoryService",
              "descriptors": [
                "org.nuxeo.ecm.core.storage.sql.RepositoryDescriptor"
              ],
              "documentation": "\n      Extension points to register VCS repositories.\n      See http://doc.nuxeo.com/x/hwQz for documentation.\n    \n",
              "documentationHtml": "<p>\nExtension points to register VCS repositories.\nSee http://doc.nuxeo.com/x/hwQz for documentation.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.RepositoryService/ExtensionPoints/org.nuxeo.ecm.core.storage.sql.RepositoryService--repository",
              "id": "org.nuxeo.ecm.core.storage.sql.RepositoryService--repository",
              "label": "repository (org.nuxeo.ecm.core.storage.sql.RepositoryService)",
              "name": "repository",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.RepositoryService",
          "name": "org.nuxeo.ecm.core.storage.sql.RepositoryService",
          "requirements": [
            "org.nuxeo.ecm.core.storage.lock.LockManagerService",
            "org.nuxeo.ecm.core.repository.RepositoryServiceComponent",
            "org.nuxeo.ecm.core.api.repository.RepositoryManager"
          ],
          "resolutionOrder": 581,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.storage.sql.RepositoryService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.storage.sql.RepositoryService/Services/org.nuxeo.ecm.core.storage.sql.coremodel.SQLRepositoryService",
              "id": "org.nuxeo.ecm.core.storage.sql.coremodel.SQLRepositoryService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 592,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.sql.RepositoryService\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.repository.RepositoryServiceComponent</require>\n  <require>org.nuxeo.ecm.core.api.repository.RepositoryManager</require>\n  <require>org.nuxeo.ecm.core.storage.lock.LockManagerService</require>\n\n  <documentation>\n    Manages VCS repositories.\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.storage.sql.coremodel.SQLRepositoryService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.storage.sql.coremodel.SQLRepositoryService\" />\n  </service>\n\n  <extension-point name=\"repository\">\n    <documentation>\n      Extension points to register VCS repositories.\n      See http://doc.nuxeo.com/x/hwQz for documentation.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.storage.sql.RepositoryDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/repository-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.storage.sql.coremodel.SQLRepositoryCompatService",
          "declaredStartOrder": null,
          "documentation": "\n    Compatibility component to register old extension point.\n    Use org.nuxeo.ecm.core.storage.sql.RepositoryService instead.\n  \n",
          "documentationHtml": "<p>\nCompatibility component to register old extension point.\nUse org.nuxeo.ecm.core.storage.sql.RepositoryService instead.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.repository.RepositoryService",
              "descriptors": [
                "org.nuxeo.ecm.core.storage.sql.RepositoryDescriptor"
              ],
              "documentation": "\n      Compatibility extension point to register VCS repositories.\n      Use org.nuxeo.ecm.core.storage.sql.RepositoryService instead.\n    \n",
              "documentationHtml": "<p>\nCompatibility extension point to register VCS repositories.\nUse org.nuxeo.ecm.core.storage.sql.RepositoryService instead.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.repository.RepositoryService/ExtensionPoints/org.nuxeo.ecm.core.repository.RepositoryService--repository",
              "id": "org.nuxeo.ecm.core.repository.RepositoryService--repository",
              "label": "repository (org.nuxeo.ecm.core.repository.RepositoryService)",
              "name": "repository",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql/org.nuxeo.ecm.core.repository.RepositoryService",
          "name": "org.nuxeo.ecm.core.repository.RepositoryService",
          "requirements": [
            "org.nuxeo.ecm.core.storage.sql.RepositoryService"
          ],
          "resolutionOrder": 582,
          "services": [],
          "startOrder": 584,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.repository.RepositoryService\" version=\"1.0.0\">\n\n  <require>org.nuxeo.ecm.core.storage.sql.RepositoryService</require>\n\n  <documentation>\n    Compatibility component to register old extension point.\n    Use org.nuxeo.ecm.core.storage.sql.RepositoryService instead.\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.core.storage.sql.coremodel.SQLRepositoryCompatService\" />\n\n  <extension-point name=\"repository\">\n    <documentation>\n      Compatibility extension point to register VCS repositories.\n      Use org.nuxeo.ecm.core.storage.sql.RepositoryService instead.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.storage.sql.RepositoryDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/repository-compat-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-storage-sql-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql",
      "id": "org.nuxeo.ecm.core.storage.sql",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.core.storage,org.nuxeo.ecm.core.storage.sq\r\n l;core=split,org.nuxeo.ecm.core.storage.sql.coremodel,org.nuxeo.ecm.cor\r\n e.storage.sql.jdbc,org.nuxeo.ecm.core.storage.sql.jdbc.db,org.nuxeo.ecm\r\n .core.storage.sql.jdbc.dialect,org.nuxeo.ecm.core.storage.sql.net\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core\r\nBundle-Name: org.nuxeo.ecm.core.storage.sql\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nEclipse-BuddyPolicy: registered, dependent\r\nEclipse-RegisterBuddy: org.nuxeo.common\r\nNuxeo-Component: OSGI-INF/querymaker-service.xml, OSGI-INF/querymaker-co\r\n ntrib.xml, OSGI-INF/repo-softdelete-contrib.xml, OSGI-INF/repository-co\r\n mpat-service.xml, OSGI-INF/repository-service.xml\r\nImport-Package: javax.resource,javax.resource.cci,javax.sql,javax.transa\r\n ction.xa,org.apache.commons.beanutils,org.apache.commons.collections4.m\r\n ap,org.apache.commons.httpclient,org.apache.commons.httpclient.auth,org\r\n .apache.commons.httpclient.methods,org.apache.commons.httpclient.params\r\n ,org.apache.commons.io,org.apache.commons.logging,org.mortbay.component\r\n ;resolution:=optional,org.mortbay.jetty;resolution:=optional,org.mortba\r\n y.jetty.bio;resolution:=optional,org.mortbay.jetty.handler;resolution:=\r\n optional,org.mortbay.jetty.servlet;resolution:=optional,org.nuxeo.commo\r\n n,org.nuxeo.common.collections,org.nuxeo.common.utils,org.nuxeo.common.\r\n xmap,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core,org.nuxeo.ecm.\r\n core.api,org.nuxeo.ecm.core.api.blobholder,org.nuxeo.ecm.core.api.impl,\r\n org.nuxeo.ecm.core.api.impl.blob,org.nuxeo.ecm.core.api.model,org.nuxeo\r\n .ecm.core.api.security,org.nuxeo.ecm.core.api.security.impl,org.nuxeo.e\r\n cm.core.convert.api,org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.event.i\r\n mpl,org.nuxeo.ecm.core.lifecycle,org.nuxeo.ecm.core.model,org.nuxeo.ecm\r\n .core.query,org.nuxeo.ecm.core.query.sql,org.nuxeo.ecm.core.query.sql.m\r\n odel,org.nuxeo.ecm.core.repository,org.nuxeo.ecm.core.schema,org.nuxeo.\r\n ecm.core.schema.types,org.nuxeo.ecm.core.schema.types.primitives,org.nu\r\n xeo.ecm.core.security,org.nuxeo.ecm.core.storage.sql,org.nuxeo.ecm.core\r\n .utils,org.nuxeo.ecm.core.versioning,org.nuxeo.runtime,org.nuxeo.runtim\r\n e.api,org.nuxeo.runtime.model,org.nuxeo.runtime.services.event,org.nuxe\r\n o.runtime.services.streaming,org.osgi.framework\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.sql;singleton:=true\r\nBundle-Activator: org.nuxeo.ecm.core.storage.sql.Activator\r\nRequire-Bundle: javax.servlet;bundle-version=\"2.5.0\"\r\n\r\n",
      "maxResolutionOrder": 582,
      "minResolutionOrder": 157,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "javax.servlet"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-event",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.event",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.event.EventServiceComponent",
          "declaredStartOrder": -500,
          "documentation": "\n    Event service\n  \n",
          "documentationHtml": "<p>\nEvent service\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.event.EventServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.event.impl.EventListenerDescriptor"
              ],
              "documentation": "\n      Extension point defining event listeners.\n\n      An event listener describes some Java code that can be executed\n      synchronously or asynchronously when an event is fired by Nuxeo code.\n\n      Example listener:\n      <code>\n    <listener async=\"false\"\n        class=\"org.nuxeo.ecm.platform.dublincore.listener.DublinCoreListener\"\n        enabled=\"true\" name=\"mylistener\" postCommit=\"false\"\n        priority=\"50\" retryCount=\"1\">\n        <event>documentCreated</event>\n        <event>documentModified</event>\n    </listener>\n</code>\n\n\n      The events listed are those for which the listener will be called.\n      If there are none, the listener is called for all events, but this is strongly\n      discouraged for performance reasons.\n\n      Listeners belong to one of three categories:\n\n      If postCommit=false then the listener is purely synchronous\n      (also called \"inline\") and executed in the same thread and transaction\n      as the code firing the event, as a regular method call.\n      The class must implement org.nuxeo.ecm.core.event.EventListener,\n      which receives events one at a time.\n\n      If postCommit=true and async=true then the listener is purely\n      asynchronous and executed at an arbitrary later point in time\n      (but after the original transaction is committed), in its own thread and transaction.\n      It may be retried if a ConcurrentUpdateException is detected.\n      The listener is executed asynchronously by the WorkManager via a Work instance\n      whose category (which determines the Work queue used) is the listener's name.\n      The class must implement org.nuxeo.ecm.core.event.PostCommitEventListener,\n      which receives a bundle of all the events raised by the original transaction.\n\n      If postCommit=true and async=false then the listener is executed synchronously\n      immediately after the original transaction is committed, but in a separate transaction.\n      It is not executed if the original transaction does a rollback.\n      All listeners in this category are executed one after the other (in priority order),\n      and only after they are all done does the main thread continue execution.\n      (However if one of the listeners takes too long it is left to run purely asynchronously\n      and the other listeners in this category are processed.)\n      The class must implement org.nuxeo.ecm.core.event.PostCommitEventListener,\n      which receives a bundle of all the events raised by the original transaction.\n\n      The priority gives a global ordering of all the listeners\n      in the same category executed for a given event.\n      The default is 0.\n\n      The retryCount specifies how many times a purely asynchronous listener\n      may retry execution if it resulted in a ConcurrentUpdateException.\n      The default is 1.\n    \n",
              "documentationHtml": "<p>\nExtension point defining event listeners.\n</p><p>\nAn event listener describes some Java code that can be executed\nsynchronously or asynchronously when an event is fired by Nuxeo code.\n</p><p>\nExample listener:\n</p><p></p><pre><code>    &lt;listener async&#61;&#34;false&#34;\n        class&#61;&#34;org.nuxeo.ecm.platform.dublincore.listener.DublinCoreListener&#34;\n        enabled&#61;&#34;true&#34; name&#61;&#34;mylistener&#34; postCommit&#61;&#34;false&#34;\n        priority&#61;&#34;50&#34; retryCount&#61;&#34;1&#34;&gt;\n        &lt;event&gt;documentCreated&lt;/event&gt;\n        &lt;event&gt;documentModified&lt;/event&gt;\n    &lt;/listener&gt;\n</code></pre><p>\nThe events listed are those for which the listener will be called.\nIf there are none, the listener is called for all events, but this is strongly\ndiscouraged for performance reasons.\n</p><p>\nListeners belong to one of three categories:\n</p><p>\nIf postCommit&#61;false then the listener is purely synchronous\n(also called &#34;inline&#34;) and executed in the same thread and transaction\nas the code firing the event, as a regular method call.\nThe class must implement org.nuxeo.ecm.core.event.EventListener,\nwhich receives events one at a time.\n</p><p>\nIf postCommit&#61;true and async&#61;true then the listener is purely\nasynchronous and executed at an arbitrary later point in time\n(but after the original transaction is committed), in its own thread and transaction.\nIt may be retried if a ConcurrentUpdateException is detected.\nThe listener is executed asynchronously by the WorkManager via a Work instance\nwhose category (which determines the Work queue used) is the listener&#39;s name.\nThe class must implement org.nuxeo.ecm.core.event.PostCommitEventListener,\nwhich receives a bundle of all the events raised by the original transaction.\n</p><p>\nIf postCommit&#61;true and async&#61;false then the listener is executed synchronously\nimmediately after the original transaction is committed, but in a separate transaction.\nIt is not executed if the original transaction does a rollback.\nAll listeners in this category are executed one after the other (in priority order),\nand only after they are all done does the main thread continue execution.\n(However if one of the listeners takes too long it is left to run purely asynchronously\nand the other listeners in this category are processed.)\nThe class must implement org.nuxeo.ecm.core.event.PostCommitEventListener,\nwhich receives a bundle of all the events raised by the original transaction.\n</p><p>\nThe priority gives a global ordering of all the listeners\nin the same category executed for a given event.\nThe default is 0.\n</p><p>\nThe retryCount specifies how many times a purely asynchronous listener\nmay retry execution if it resulted in a ConcurrentUpdateException.\nThe default is 1.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.event.EventServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "id": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "label": "listener (org.nuxeo.ecm.core.event.EventServiceComponent)",
              "name": "listener",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.event.EventServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.event.pipe.EventPipeDescriptor"
              ],
              "documentation": "\n      Extension point to contribute event pipe.\n\n      An event pipe is a where Nuxeo events will be sent for asynchronous processing.\n\n      Example pipe definition:\n      <code>\n    <eventPipe class=\"org.nuxeo.ecm.core.event.pipe.DummyPipe\"\n        name=\"dummyPipe1\" priority=\"0\">\n        <parameters>\n            <parameter name=\"foo\">bar</parameter>\n        </parameters>\n    </eventPipe>\n</code>\n",
              "documentationHtml": "<p>\nExtension point to contribute event pipe.\n</p><p>\nAn event pipe is a where Nuxeo events will be sent for asynchronous processing.\n</p><p>\nExample pipe definition:\n</p><p></p><pre><code>    &lt;eventPipe class&#61;&#34;org.nuxeo.ecm.core.event.pipe.DummyPipe&#34;\n        name&#61;&#34;dummyPipe1&#34; priority&#61;&#34;0&#34;&gt;\n        &lt;parameters&gt;\n            &lt;parameter name&#61;&#34;foo&#34;&gt;bar&lt;/parameter&gt;\n        &lt;/parameters&gt;\n    &lt;/eventPipe&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.event.EventServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.event.EventServiceComponent--pipe",
              "id": "org.nuxeo.ecm.core.event.EventServiceComponent--pipe",
              "label": "pipe (org.nuxeo.ecm.core.event.EventServiceComponent)",
              "name": "pipe",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.event.EventServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.event.pipe.dispatch.EventDispatcherDescriptor"
              ],
              "documentation": "\n      Extension point to define the dispatcher used to dispatch event between pipes.\n\n      Example dispatcher definition:\n      <code>\n    <eventDispatcher\n        class=\"org.nuxeo.ecm.core.event.pipe.dispatch.SimpleEventBundlePipeDispatcher\" name=\"dispatcher\">\n        <parameters>\n            <parameter name=\"foo\">bar</parameter>\n        </parameters>\n    </eventDispatcher>\n</code>\n",
              "documentationHtml": "<p>\nExtension point to define the dispatcher used to dispatch event between pipes.\n</p><p>\nExample dispatcher definition:\n</p><p></p><pre><code>    &lt;eventDispatcher\n        class&#61;&#34;org.nuxeo.ecm.core.event.pipe.dispatch.SimpleEventBundlePipeDispatcher&#34; name&#61;&#34;dispatcher&#34;&gt;\n        &lt;parameters&gt;\n            &lt;parameter name&#61;&#34;foo&#34;&gt;bar&lt;/parameter&gt;\n        &lt;/parameters&gt;\n    &lt;/eventDispatcher&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.event.EventServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.event.EventServiceComponent--dispatcher",
              "id": "org.nuxeo.ecm.core.event.EventServiceComponent--dispatcher",
              "label": "dispatcher (org.nuxeo.ecm.core.event.EventServiceComponent)",
              "name": "dispatcher",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.event.EventServiceComponent",
              "descriptors": [
                "org.nuxeo.ecm.core.event.stream.DomainEventProducerDescriptor"
              ],
              "documentation": "\n      Extension point to define Stream Domain Event Producers.\n    \n",
              "documentationHtml": "<p>\nExtension point to define Stream Domain Event Producers.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.event.EventServiceComponent/ExtensionPoints/org.nuxeo.ecm.core.event.EventServiceComponent--domainEventProducer",
              "id": "org.nuxeo.ecm.core.event.EventServiceComponent--domainEventProducer",
              "label": "domainEventProducer (org.nuxeo.ecm.core.event.EventServiceComponent)",
              "name": "domainEventProducer",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.event.EventServiceComponent/Contributions/org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "id": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.ecm.core.event.stream.DomainEventProducerListener\" name=\"domainEventListener\" priority=\"500\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.event.EventServiceComponent",
          "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
          "requirements": [],
          "resolutionOrder": 124,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.event.EventServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.event.EventServiceComponent/Services/org.nuxeo.ecm.core.event.EventService",
              "id": "org.nuxeo.ecm.core.event.EventService",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.event.EventServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.event.EventServiceComponent/Services/org.nuxeo.ecm.core.event.EventProducer",
              "id": "org.nuxeo.ecm.core.event.EventProducer",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.event.EventServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.event.EventServiceComponent/Services/org.nuxeo.ecm.core.event.EventServiceAdmin",
              "id": "org.nuxeo.ecm.core.event.EventServiceAdmin",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 10,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.event.EventServiceComponent\" version=\"1.0\">\n  <documentation>\n    Event service\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.event.EventServiceComponent\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.event.EventService\"/>\n    <provide interface=\"org.nuxeo.ecm.core.event.EventProducer\"/>\n    <provide interface=\"org.nuxeo.ecm.core.event.EventServiceAdmin\"/>\n  </service>\n\n  <extension-point name=\"listener\">\n    <documentation>\n      Extension point defining event listeners.\n\n      An event listener describes some Java code that can be executed\n      synchronously or asynchronously when an event is fired by Nuxeo code.\n\n      Example listener:\n      <code>\n        <listener name=\"mylistener\" enabled=\"true\"\n            postCommit=\"false\" async=\"false\"\n            class=\"org.nuxeo.ecm.platform.dublincore.listener.DublinCoreListener\"\n            priority=\"50\" retryCount=\"1\">\n          <event>documentCreated</event>\n          <event>documentModified</event>\n        </listener>\n      </code>\n\n      The events listed are those for which the listener will be called.\n      If there are none, the listener is called for all events, but this is strongly\n      discouraged for performance reasons.\n\n      Listeners belong to one of three categories:\n\n      If postCommit=false then the listener is purely synchronous\n      (also called \"inline\") and executed in the same thread and transaction\n      as the code firing the event, as a regular method call.\n      The class must implement org.nuxeo.ecm.core.event.EventListener,\n      which receives events one at a time.\n\n      If postCommit=true and async=true then the listener is purely\n      asynchronous and executed at an arbitrary later point in time\n      (but after the original transaction is committed), in its own thread and transaction.\n      It may be retried if a ConcurrentUpdateException is detected.\n      The listener is executed asynchronously by the WorkManager via a Work instance\n      whose category (which determines the Work queue used) is the listener's name.\n      The class must implement org.nuxeo.ecm.core.event.PostCommitEventListener,\n      which receives a bundle of all the events raised by the original transaction.\n\n      If postCommit=true and async=false then the listener is executed synchronously\n      immediately after the original transaction is committed, but in a separate transaction.\n      It is not executed if the original transaction does a rollback.\n      All listeners in this category are executed one after the other (in priority order),\n      and only after they are all done does the main thread continue execution.\n      (However if one of the listeners takes too long it is left to run purely asynchronously\n      and the other listeners in this category are processed.)\n      The class must implement org.nuxeo.ecm.core.event.PostCommitEventListener,\n      which receives a bundle of all the events raised by the original transaction.\n\n      The priority gives a global ordering of all the listeners\n      in the same category executed for a given event.\n      The default is 0.\n\n      The retryCount specifies how many times a purely asynchronous listener\n      may retry execution if it resulted in a ConcurrentUpdateException.\n      The default is 1.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.event.impl.EventListenerDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"pipe\">\n    <documentation>\n      Extension point to contribute event pipe.\n\n      An event pipe is a where Nuxeo events will be sent for asynchronous processing.\n\n      Example pipe definition:\n      <code>\n        <eventPipe name=\"dummyPipe1\" class=\"org.nuxeo.ecm.core.event.pipe.DummyPipe\" priority=\"0\">\n\t      <parameters>\n\t        <parameter name=\"foo\">bar</parameter>\n\t      </parameters>\n\t    </eventPipe>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.event.pipe.EventPipeDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"dispatcher\">\n    <documentation>\n      Extension point to define the dispatcher used to dispatch event between pipes.\n\n      Example dispatcher definition:\n      <code>\n        <eventDispatcher name=\"dispatcher\"\n                         class=\"org.nuxeo.ecm.core.event.pipe.dispatch.SimpleEventBundlePipeDispatcher\">\n           <parameters>\n             <parameter name=\"foo\">bar</parameter>\n           </parameters>\n        </eventDispatcher>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.event.pipe.dispatch.EventDispatcherDescriptor\"/>\n  </extension-point>\n\n  <extension-point name=\"domainEventProducer\">\n    <documentation>\n      Extension point to define Stream Domain Event Producers.\n    </documentation>\n    <object class=\"org.nuxeo.ecm.core.event.stream.DomainEventProducerDescriptor\"/>\n  </extension-point>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"domainEventListener\" async=\"false\" priority=\"500\"\n      class=\"org.nuxeo.ecm.core.event.stream.DomainEventProducerListener\"/>\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/EventService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.work.WorkManagerImpl",
          "declaredStartOrder": -501,
          "documentation": "\n    The WorkManager executes Work instances asynchronously.\n  \n",
          "documentationHtml": "<p>\nThe WorkManager executes Work instances asynchronously.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.work.service",
              "descriptors": [
                "org.nuxeo.ecm.core.work.api.WorkQueueDescriptor"
              ],
              "documentation": "\n      Defines the characteristics of work queues:\n      <code>\n    <queue id=\"myqueue\">\n        <name>My Queue</name>\n        <maxThreads>4</maxThreads>\n        <capacity>100</capacity>\n        <clearCompletedAfterSeconds>300</clearCompletedAfterSeconds>\n        <category>somecategory1</category>\n        <category>somecategory2</category>\n    </queue>\n</code>\n\n      - id is the queue id.\n\n      - name is the human-readable name.\n\n      - maxThreads maximum number of worker threads (default 4).\n\n      - capacity when specified make the queue bounded, the scheduling of\n      new work is blocking when the queue is full (default unlimited).\n\n      - clearCompletedAfterSeconds (default 3600) is the delay after which completed work\n       may be automatically cleared from its queue. 0 means never.\n\n      - category is a list of Work categories that this queue will receive.\n      For event listeners work, the category is the listener name (or its simple class name).\n    \n",
              "documentationHtml": "<p>\nDefines the characteristics of work queues:\n</p><p></p><pre><code>    &lt;queue id&#61;&#34;myqueue&#34;&gt;\n        &lt;name&gt;My Queue&lt;/name&gt;\n        &lt;maxThreads&gt;4&lt;/maxThreads&gt;\n        &lt;capacity&gt;100&lt;/capacity&gt;\n        &lt;clearCompletedAfterSeconds&gt;300&lt;/clearCompletedAfterSeconds&gt;\n        &lt;category&gt;somecategory1&lt;/category&gt;\n        &lt;category&gt;somecategory2&lt;/category&gt;\n    &lt;/queue&gt;\n</code></pre><p>\n- id is the queue id.\n</p><p>\n- name is the human-readable name.\n</p><p>\n- maxThreads maximum number of worker threads (default 4).\n</p><p>\n- capacity when specified make the queue bounded, the scheduling of\nnew work is blocking when the queue is full (default unlimited).\n</p><p>\n- clearCompletedAfterSeconds (default 3600) is the delay after which completed work\nmay be automatically cleared from its queue. 0 means never.\n</p><p>\n- category is a list of Work categories that this queue will receive.\nFor event listeners work, the category is the listener name (or its simple class name).\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.work.service/ExtensionPoints/org.nuxeo.ecm.core.work.service--queues",
              "id": "org.nuxeo.ecm.core.work.service--queues",
              "label": "queues (org.nuxeo.ecm.core.work.service)",
              "name": "queues",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.work.service",
              "descriptors": [
                "org.nuxeo.ecm.core.work.api.WorkQueuingDescriptor"
              ],
              "documentation": "\n      Defines the implementation of the queuing mechanism:\n      <code>\n    <queuing class=\"org.nuxeo.ecm.core.work.MemoryWorkQueuing\"/>\n</code>\n\n      The class must be a subclass of org.nuxeo.ecm.core.work.WorkQueuing.\n\n      Not used since 2023 since Redis support has been removed, only the in memory implementation remains which is used\n      for testing. Otherwise, StreamWorkManager is the WorkManager implementation to use and it doesn't use queuing.\n    \n",
              "documentationHtml": "<p>\nDefines the implementation of the queuing mechanism:\n</p><p></p><pre><code>    &lt;queuing class&#61;&#34;org.nuxeo.ecm.core.work.MemoryWorkQueuing&#34;/&gt;\n</code></pre><p>\nThe class must be a subclass of org.nuxeo.ecm.core.work.WorkQueuing.\n</p><p>\nNot used since 2023 since Redis support has been removed, only the in memory implementation remains which is used\nfor testing. Otherwise, StreamWorkManager is the WorkManager implementation to use and it doesn&#39;t use queuing.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.work.service/ExtensionPoints/org.nuxeo.ecm.core.work.service--implementation",
              "id": "org.nuxeo.ecm.core.work.service--implementation",
              "label": "implementation (org.nuxeo.ecm.core.work.service)",
              "name": "implementation",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.work.service",
          "name": "org.nuxeo.ecm.core.work.service",
          "requirements": [],
          "resolutionOrder": 125,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.work.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.work.service/Services/org.nuxeo.ecm.core.work.api.WorkManager",
              "id": "org.nuxeo.ecm.core.work.api.WorkManager",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 9,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.work.service\" version=\"1.0\">\n\n  <documentation>\n    The WorkManager executes Work instances asynchronously.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.work.api.WorkManager\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.work.WorkManagerImpl\" />\n\n  <extension-point name=\"queues\">\n    <documentation>\n      Defines the characteristics of work queues:\n      <code>\n        <queue id=\"myqueue\">\n          <name>My Queue</name>\n          <maxThreads>4</maxThreads>\n          <capacity>100</capacity>\n          <clearCompletedAfterSeconds>300</clearCompletedAfterSeconds>\n          <category>somecategory1</category>\n          <category>somecategory2</category>\n        </queue>\n      </code>\n      - id is the queue id.\n\n      - name is the human-readable name.\n\n      - maxThreads maximum number of worker threads (default 4).\n\n      - capacity when specified make the queue bounded, the scheduling of\n      new work is blocking when the queue is full (default unlimited).\n\n      - clearCompletedAfterSeconds (default 3600) is the delay after which completed work\n       may be automatically cleared from its queue. 0 means never.\n\n      - category is a list of Work categories that this queue will receive.\n      For event listeners work, the category is the listener name (or its simple class name).\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.work.api.WorkQueueDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"implementation\">\n    <documentation>\n      Defines the implementation of the queuing mechanism:\n      <code>\n        <queuing class=\"org.nuxeo.ecm.core.work.MemoryWorkQueuing\"/>\n      </code>\n      The class must be a subclass of org.nuxeo.ecm.core.work.WorkQueuing.\n\n      Not used since 2023 since Redis support has been removed, only the in memory implementation remains which is used\n      for testing. Otherwise, StreamWorkManager is the WorkManager implementation to use and it doesn't use queuing.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.work.api.WorkQueuingDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/workmanager-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    The default queue configuration for the work manager,\n    the scheduled job to cleanup the completed work instances,\n    and the related listener.\n  \n",
          "documentationHtml": "<p>\nThe default queue configuration for the work manager,\nthe scheduled job to cleanup the completed work instances,\nand the related listener.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.work.service--implementation",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.work.config/Contributions/org.nuxeo.ecm.core.work.config--implementation",
              "id": "org.nuxeo.ecm.core.work.config--implementation",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"implementation\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queuing class=\"org.nuxeo.ecm.core.work.MemoryWorkQueuing\"/>\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.event/org.nuxeo.ecm.core.work.config/Contributions/org.nuxeo.ecm.core.work.config--queues",
              "id": "org.nuxeo.ecm.core.work.config--queues",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"default\">\n      <name>Default queue</name>\n      <maxThreads>4</maxThreads>\n      <!-- clear completed work instances older than 10 minutes -->\n      <clearCompletedAfterSeconds>600</clearCompletedAfterSeconds>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.work.config",
          "name": "org.nuxeo.ecm.core.work.config",
          "requirements": [],
          "resolutionOrder": 126,
          "services": [],
          "startOrder": 167,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.work.config\" version=\"1.0\">\n\n  <documentation>\n    The default queue configuration for the work manager,\n    the scheduled job to cleanup the completed work instances,\n    and the related listener.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"implementation\">\n    <queuing class=\"org.nuxeo.ecm.core.work.MemoryWorkQueuing\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"default\">\n      <name>Default queue</name>\n      <maxThreads>4</maxThreads>\n      <!-- clear completed work instances older than 10 minutes -->\n      <clearCompletedAfterSeconds>600</clearCompletedAfterSeconds>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/workmanager-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService"
          ],
          "componentClass": "org.nuxeo.ecm.core.scheduler.SchedulerServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n     Core scheduler registry service.\n  \n",
          "documentationHtml": "<p>\nCore scheduler registry service.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService--schedule"
              ],
              "componentId": "org.nuxeo.ecm.core.scheduler.SchedulerService",
              "descriptors": [
                "org.nuxeo.ecm.core.scheduler.ScheduleImpl"
              ],
              "documentation": "\n      Extension allowing the registration of schedules.\n      This is similar to a cron job sending events. Note that\n      contrary to UNIX cron there is an additional \"seconds\" field\n      in the cron expression.\n      <p/>\n\n      A scheduler definition contains information about what event is sent,\n      when, and under what identity.\n      <p/>\n\n      For instance :\n      <code>\n    <schedule id=\"mySchedule\" jobFactoryClass=\"org.nuxeo.ecm.core.scheduler.DefaultEventJobFactory\">\n        <username>Administrator</username>\n        <event>myEvent</event>\n        <eventCategory>default</eventCategory>\n        <!-- Every first of the month at 3am -->\n        <cronExpression>0 0 3 1 * ?</cronExpression>\n        <timezone>UTC</timezone>\n    </schedule>\n</code>\n\n      jobFactoryClass is optional and defaults to org.nuxeo.ecm.core.scheduler.DefaultEventJobFactory.\n      timezone is optional and defaults to system default.\n\n      @see org.quartz.CronTrigger\n      @see org.nuxeo.ecm.core.scheduler.EventJobFactory\n      @see http://www.quartz-scheduler.org/docs/api/1.8.1/org/quartz/CronExpression.html\n      @see http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html\n    \n",
              "documentationHtml": "<p>\nExtension allowing the registration of schedules.\nThis is similar to a cron job sending events. Note that\ncontrary to UNIX cron there is an additional &#34;seconds&#34; field\nin the cron expression.\n</p><p>\nA scheduler definition contains information about what event is sent,\nwhen, and under what identity.\n</p><p>\nFor instance :\n</p><p></p><pre><code>    &lt;schedule id&#61;&#34;mySchedule&#34; jobFactoryClass&#61;&#34;org.nuxeo.ecm.core.scheduler.DefaultEventJobFactory&#34;&gt;\n        &lt;username&gt;Administrator&lt;/username&gt;\n        &lt;event&gt;myEvent&lt;/event&gt;\n        &lt;eventCategory&gt;default&lt;/eventCategory&gt;\n        &lt;!-- Every first of the month at 3am --&gt;\n        &lt;cronExpression&gt;0 0 3 1 * ?&lt;/cronExpression&gt;\n        &lt;timezone&gt;UTC&lt;/timezone&gt;\n    &lt;/schedule&gt;\n</code></pre><p>\njobFactoryClass is optional and defaults to org.nuxeo.ecm.core.scheduler.DefaultEventJobFactory.\ntimezone is optional and defaults to system default.\n</p><p>\n&#64;see org.quartz.CronTrigger\n&#64;see org.nuxeo.ecm.core.scheduler.EventJobFactory\n&#64;see http://www.quartz-scheduler.org/docs/api/1.8.1/org/quartz/CronExpression.html\n&#64;see http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.scheduler.SchedulerService/ExtensionPoints/org.nuxeo.ecm.core.scheduler.SchedulerService--schedule",
              "id": "org.nuxeo.ecm.core.scheduler.SchedulerService--schedule",
              "label": "schedule (org.nuxeo.ecm.core.scheduler.SchedulerService)",
              "name": "schedule",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Delay Quartz scheduler start to avoid unique key constraint violation with qrtz_LOCKS table\n      <p/>\n\n      Default behavior is to delay for 5 seconds.\n\n      @since 2021.19\n    \n",
              "documentationHtml": "<p>\nDelay Quartz scheduler start to avoid unique key constraint violation with qrtz_LOCKS table\n</p><p>\nDefault behavior is to delay for 5 seconds.\n</p><p>\n&#64;since 2021.19\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.scheduler.SchedulerService/Contributions/org.nuxeo.ecm.core.scheduler.SchedulerService--configuration",
              "id": "org.nuxeo.ecm.core.scheduler.SchedulerService--configuration",
              "registrationOrder": 45,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Delay Quartz scheduler start to avoid unique key constraint violation with qrtz_LOCKS table\n      <p/>\n      Default behavior is to delay for 5 seconds.\n\n      @since 2021.19\n    </documentation>\n    <property name=\"org.nuxeo.scheduler.start.delay\">5s</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.scheduler.SchedulerService",
          "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
          "requirements": [
            "org.nuxeo.runtime.cluster.ClusterService"
          ],
          "resolutionOrder": 583,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.scheduler.SchedulerService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event/org.nuxeo.ecm.core.scheduler.SchedulerService/Services/org.nuxeo.ecm.core.scheduler.SchedulerService",
              "id": "org.nuxeo.ecm.core.scheduler.SchedulerService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": null,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.scheduler.SchedulerService\">\n  <alias>org.nuxeo.ecm.platform.scheduler.core.service.SchedulerRegistryService</alias>\n\n  <require>org.nuxeo.runtime.cluster.ClusterService</require>\n\n  <documentation>\n     Core scheduler registry service.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.scheduler.SchedulerService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.scheduler.SchedulerServiceImpl\" />\n\n  <extension-point name=\"schedule\">\n\n    <documentation>\n      Extension allowing the registration of schedules.\n      This is similar to a cron job sending events. Note that\n      contrary to UNIX cron there is an additional \"seconds\" field\n      in the cron expression.\n      <p/>\n      A scheduler definition contains information about what event is sent,\n      when, and under what identity.\n      <p/>\n      For instance :\n      <code>\n        <schedule id=\"mySchedule\" jobFactoryClass=\"org.nuxeo.ecm.core.scheduler.DefaultEventJobFactory\">\n          <username>Administrator</username>\n          <event>myEvent</event>\n          <eventCategory>default</eventCategory>\n          <!-- Every first of the month at 3am -->\n          <cronExpression>0 0 3 1 * ?</cronExpression>\n          <timezone>UTC</timezone>\n        </schedule>\n      </code>\n      jobFactoryClass is optional and defaults to org.nuxeo.ecm.core.scheduler.DefaultEventJobFactory.\n      timezone is optional and defaults to system default.\n\n      @see org.quartz.CronTrigger\n      @see org.nuxeo.ecm.core.scheduler.EventJobFactory\n      @see http://www.quartz-scheduler.org/docs/api/1.8.1/org/quartz/CronExpression.html\n      @see http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.scheduler.ScheduleImpl\"/>\n\n  </extension-point>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Delay Quartz scheduler start to avoid unique key constraint violation with qrtz_LOCKS table\n      <p />\n      Default behavior is to delay for 5 seconds.\n\n      @since 2021.19\n    </documentation>\n    <property name=\"org.nuxeo.scheduler.start.delay\">5s</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/scheduler-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-event-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.event",
      "id": "org.nuxeo.ecm.core.event",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.event.impl,o\r\n rg.nuxeo.ecm.core.event.jms;api=split,org.nuxeo.ecm.core.event.script,o\r\n rg.nuxeo.ecm.core.event.tx,org.nuxeo.ecm.core.work,org.nuxeo.ecm.core.w\r\n ork.api\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.ecm.core.event\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nImport-Package: javax.naming,javax.script,javax.security.auth.login,org.\r\n apache.commons.logging,org.nuxeo.common.collections,org.nuxeo.common.ut\r\n ils,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core;api=split,org.n\r\n uxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.c\r\n ore.api.model,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core.api.\r\n security,org.nuxeo.ecm.core.schema,org.nuxeo.runtime.api,org.nuxeo.runt\r\n ime.model,org.nuxeo.runtime.transaction,org.osgi.framework;version=\"1.4\r\n \",org.nuxeo.common,org.nuxeo.runtime,com.codahale.metrics\r\nBundle-SymbolicName: org.nuxeo.ecm.core.event;singleton:=true\r\nNuxeo-Component: OSGI-INF/EventService.xml,OSGI-INF/workmanager-service.\r\n xml,OSGI-INF/workmanager-config.xml,OSGI-INF/scheduler-service.xml\r\n\r\n",
      "maxResolutionOrder": 583,
      "minResolutionOrder": 124,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-relations-io",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.relations.io",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n\n    Sample contribution for relations copy inside a template.\n\n    @author Anahide Tchertchian <a href=\"mailto:at@nuxeo.com\"/>\n<pre>\n    <extension point=\"adapters\" target=\"org.nuxeo.ecm.platform.io.IOManager\">\n        <adapter\n            class=\"org.nuxeo.ecm.platform.relations.io.IORelationAdapter\" name=\"template_relations\">\n            <property name=\"graph\">default</property>\n            <property name=\"ignore-external\">true</property>\n        </adapter>\n    </extension>\n</pre>\n",
          "documentationHtml": "<p>\nSample contribution for relations copy inside a template.\n</p><p>\n</p><pre>\n\n\ndefault\ntrue\n\n\n</pre>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.io.IOManager--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.io/org.nuxeo.ecm.platform.relations.io.contrib/Contributions/org.nuxeo.ecm.platform.relations.io.contrib--adapters",
              "id": "org.nuxeo.ecm.platform.relations.io.contrib--adapters",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.io.IOManager",
                "name": "org.nuxeo.ecm.platform.io.IOManager",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.platform.io.IOManager\">\n\n    <adapter class=\"org.nuxeo.ecm.platform.relations.io.IORelationAdapter\" name=\"template_relations\">\n      <property name=\"graph\">default</property>\n      <property name=\"ignore-external\">true</property>\n    </adapter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.io/org.nuxeo.ecm.platform.relations.io.contrib",
          "name": "org.nuxeo.ecm.platform.relations.io.contrib",
          "requirements": [],
          "resolutionOrder": 398,
          "services": [],
          "startOrder": 332,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.relations.io.contrib\">\n\n  <documentation>\n    Sample contribution for relations copy inside a template.\n\n    @author Anahide Tchertchian <a href=\"mailto:at@nuxeo.com\" />\n\n    <pre>\n      <extension target=\"org.nuxeo.ecm.platform.io.IOManager\"\n        point=\"adapters\">\n\n        <adapter name=\"template_relations\"\n          class=\"org.nuxeo.ecm.platform.relations.io.IORelationAdapter\">\n          <property name=\"graph\">default</property>\n          <property name=\"ignore-external\">true</property>\n        </adapter>\n\n      </extension>\n    </pre>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.io.IOManager\"\n    point=\"adapters\">\n\n    <adapter name=\"template_relations\"\n      class=\"org.nuxeo.ecm.platform.relations.io.IORelationAdapter\">\n      <property name=\"graph\">default</property>\n      <property name=\"ignore-external\">true</property>\n    </adapter>\n\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/io-relations-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-relations-io-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.relations/org.nuxeo.ecm.relations.io",
      "id": "org.nuxeo.ecm.relations.io",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Platform Relations IO Fragment\r\nBundle-SymbolicName: org.nuxeo.ecm.relations.io;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nRequire-Bundle: org.nuxeo.ecm.core.api,org.nuxeo.ecm.core.io,org.nuxeo.e\r\n cm.platform.io.api,org.nuxeo.ecm.relations.api\r\nNuxeo-Component: OSGI-INF/io-relations-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 398,
      "minResolutionOrder": 398,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.core.io",
        "org.nuxeo.ecm.platform.io.api",
        "org.nuxeo.ecm.relations.api"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-directory-types-contrib",
      "artifactVersion": "2025.7.12",
      "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"
        ],
        "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.directory.types.contrib",
      "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.types.contrib/org.nuxeo.ecm.directory.types/Contributions/org.nuxeo.ecm.directory.types--schema",
              "id": "org.nuxeo.ecm.directory.types--schema",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"user\" src=\"directoryschema/user.xsd\"/>\n    <schema name=\"group\" src=\"directoryschema/group.xsd\"/>\n    <schema name=\"vocabulary\" src=\"directoryschema/vocabulary.xsd\"/>\n    <schema name=\"xvocabulary\" src=\"directoryschema/xvocabulary.xsd\"/>\n    <schema name=\"l10nvocabulary\" src=\"directoryschema/l10nvocabulary.xsd\"/>\n    <schema name=\"l10nxvocabulary\" src=\"directoryschema/l10nxvocabulary.xsd\"/>\n    <schema name=\"documentsLists\" src=\"directoryschema/documentsLists.xsd\"/>\n\n    <property indexOrder=\"ascending\" name=\"username\" schema=\"user\"/>\n    <property indexOrder=\"ascending\" name=\"groupname\" schema=\"group\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.types.contrib/org.nuxeo.ecm.directory.types",
          "name": "org.nuxeo.ecm.directory.types",
          "requirements": [
            "org.nuxeo.ecm.core.schema.common"
          ],
          "resolutionOrder": 302,
          "services": [],
          "startOrder": 183,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.directory.types\">\n\n  <require>org.nuxeo.ecm.core.schema.common</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"user\" src=\"directoryschema/user.xsd\"/>\n    <schema name=\"group\" src=\"directoryschema/group.xsd\"/>\n    <schema name=\"vocabulary\" src=\"directoryschema/vocabulary.xsd\"/>\n    <schema name=\"xvocabulary\" src=\"directoryschema/xvocabulary.xsd\"/>\n    <schema name=\"l10nvocabulary\" src=\"directoryschema/l10nvocabulary.xsd\"/>\n    <schema name=\"l10nxvocabulary\" src=\"directoryschema/l10nxvocabulary.xsd\"/>\n    <schema name=\"documentsLists\" src=\"directoryschema/documentsLists.xsd\" />\n\n    <property schema=\"user\" name=\"username\" indexOrder=\"ascending\" />\n    <property schema=\"group\" name=\"groupname\" indexOrder=\"ascending\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/DirectoryTypes.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-directory-types-contrib-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/grp:org.nuxeo.ecm.directory/org.nuxeo.ecm.directory.types.contrib",
      "id": "org.nuxeo.ecm.directory.types.contrib",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: directoryschema\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core\r\nBundle-Localization: bundle\r\nBundle-Name: Nuxeo Directory\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/DirectoryTypes.xml\r\nImport-Package: org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=\r\n split,org.nuxeo.ecm.directory;api=split\r\nBundle-SymbolicName: org.nuxeo.ecm.directory.types.contrib;singleton:=tr\r\n ue\r\n\r\n",
      "maxResolutionOrder": 302,
      "minResolutionOrder": 302,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-cluster",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.cluster",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.cluster.ClusterServiceImpl",
          "declaredStartOrder": -1000,
          "documentation": "\n    The Cluster service allows registration of the cluster node id and\n    other cluster-related parameters.\n  \n",
          "documentationHtml": "<p>\nThe Cluster service allows registration of the cluster node id and\nother cluster-related parameters.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.cluster.ClusterService",
              "descriptors": [
                "org.nuxeo.runtime.cluster.ClusterNodeDescriptor"
              ],
              "documentation": "\n      Defines the cluster configuration:\n      <code>\n    <clusterNode enabled=\"true\" id=\"123\"/>\n</code>\n",
              "documentationHtml": "<p>\nDefines the cluster configuration:\n</p><p></p><pre><code>    &lt;clusterNode enabled&#61;&#34;true&#34; id&#61;&#34;123&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.cluster/org.nuxeo.runtime.cluster.ClusterService/ExtensionPoints/org.nuxeo.runtime.cluster.ClusterService--configuration",
              "id": "org.nuxeo.runtime.cluster.ClusterService--configuration",
              "label": "configuration (org.nuxeo.runtime.cluster.ClusterService)",
              "name": "configuration",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.cluster/org.nuxeo.runtime.cluster.ClusterService",
          "name": "org.nuxeo.runtime.cluster.ClusterService",
          "requirements": [
            "org.nuxeo.runtime.kv.KeyValueService"
          ],
          "resolutionOrder": 574,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.cluster.ClusterService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.cluster/org.nuxeo.runtime.cluster.ClusterService/Services/org.nuxeo.runtime.cluster.ClusterService",
              "id": "org.nuxeo.runtime.cluster.ClusterService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 1,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.cluster.ClusterService\" version=\"1.0\">\n\n  <require>org.nuxeo.runtime.kv.KeyValueService</require>\n\n  <documentation>\n    The Cluster service allows registration of the cluster node id and\n    other cluster-related parameters.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.cluster.ClusterService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.runtime.cluster.ClusterServiceImpl\" />\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Defines the cluster configuration:\n      <code>\n        <clusterNode id=\"123\" enabled=\"true\"/>\n      </code>\n    </documentation>\n\n    <object class=\"org.nuxeo.runtime.cluster.ClusterNodeDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/cluster-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-cluster-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.cluster",
      "id": "org.nuxeo.runtime.cluster",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.runtime.cluster\r\nNuxeo-Component: OSGI-INF/cluster-service.xml\r\n\r\n",
      "maxResolutionOrder": 574,
      "minResolutionOrder": 574,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-storage-sql-management",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.sql.management",
      "components": [
        {
          "@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.storage/org.nuxeo.ecm.core.storage.sql.management/org.nuxeo.ecm.core.storage.sql.management/Contributions/org.nuxeo.ecm.core.storage.sql.management--factories",
              "id": "org.nuxeo.ecm.core.storage.sql.management--factories",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.management.ResourcePublisher",
                "name": "org.nuxeo.runtime.management.ResourcePublisher",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"factories\" target=\"org.nuxeo.runtime.management.ResourcePublisher\">\n    <factory class=\"org.nuxeo.ecm.core.storage.sql.management.SQLRepositoryStatusFactory\" name=\"SQLRepositoryStatus\"/>\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.storage/org.nuxeo.ecm.core.storage.sql.management/org.nuxeo.ecm.core.storage.sql.management/Contributions/org.nuxeo.ecm.core.storage.sql.management--probes",
              "id": "org.nuxeo.ecm.core.storage.sql.management--probes",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"probes\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n         <probe class=\"org.nuxeo.ecm.core.storage.sql.management.RemoteSessionsProbe\" name=\"remoteSQLStorageSessions\">\n                  <label>Remote SQL sessions</label>\n                  </probe>\n         <probe class=\"org.nuxeo.ecm.core.storage.sql.management.ActiveSessionsProbe\" name=\"activeRepositorySessions\">\n                  <label>Active (local) SQL sessions</label>\n                  </probe>\n   </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql.management/org.nuxeo.ecm.core.storage.sql.management",
          "name": "org.nuxeo.ecm.core.storage.sql.management",
          "requirements": [],
          "resolutionOrder": 160,
          "services": [],
          "startOrder": 159,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.sql.management\">\n\n  <extension target=\"org.nuxeo.runtime.management.ResourcePublisher\"\n    point=\"factories\">\n    <factory name=\"SQLRepositoryStatus\"\n      class=\"org.nuxeo.ecm.core.storage.sql.management.SQLRepositoryStatusFactory\" />\n  </extension>\n\n   <extension\n    target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\"\n    point=\"probes\">\n         <probe name=\"remoteSQLStorageSessions\"\n                  class=\"org.nuxeo.ecm.core.storage.sql.management.RemoteSessionsProbe\">\n                  <label>Remote SQL sessions</label>\n                  </probe>\n         <probe name=\"activeRepositorySessions\"\n                  class=\"org.nuxeo.ecm.core.storage.sql.management.ActiveSessionsProbe\">\n                  <label>Active (local) SQL sessions</label>\n                  </probe>\n   </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/management-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-storage-sql-management-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/org.nuxeo.ecm.core.storage.sql.management",
      "id": "org.nuxeo.ecm.core.storage.sql.management",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.core.storage.sql.management\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: core\r\nBundle-Name: org.nuxeo.ecm.core.storage.sql.management\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nNuxeo-Component: OSGI-INF/management-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.sql.management;singleton\r\n :=true\r\nImport-Package: javax.resource,org.apache.commons.logging,org.nuxeo.ecm.\r\n core.api,org.nuxeo.ecm.core.management.api,org.nuxeo.ecm.core.storage,o\r\n rg.nuxeo.ecm.core.storage.sql,org.nuxeo.ecm.core.storage.sql.jdbc,org.n\r\n uxeo.ecm.core.storage.sql.net,org.nuxeo.runtime.management,org.nuxeo.ru\r\n ntime.management.metrics,org.nuxeo.runtime.model\r\n\r\n",
      "maxResolutionOrder": 160,
      "minResolutionOrder": 160,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-io",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.io",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.io.impl.DocumentXMLExporterImpl",
          "declaredStartOrder": null,
          "documentation": "\n    This service allows to export a document to XML.\n\n    @author\n    Antoine Taillefer\n  \n",
          "documentationHtml": "<p>\nThis service allows to export a document to XML.\n</p><p>\nAntoine Taillefer\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.DocumentXMLExporter",
          "name": "org.nuxeo.ecm.core.io.DocumentXMLExporter",
          "requirements": [],
          "resolutionOrder": 127,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.io.DocumentXMLExporter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.DocumentXMLExporter/Services/org.nuxeo.ecm.core.io.DocumentXMLExporter",
              "id": "org.nuxeo.ecm.core.io.DocumentXMLExporter",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 118,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.io.DocumentXMLExporter\">\n\n  <documentation>\n    This service allows to export a document to XML.\n\n    @author\n    Antoine Taillefer\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.io.impl.DocumentXMLExporterImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.io.DocumentXMLExporter\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-xml-exporter-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Core IO contribution to Avro for Nuxeo core model.\n  \n",
          "documentationHtml": "<p>\nCore IO contribution to Avro for Nuxeo core model.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.avro--factory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.avro.factories/Contributions/org.nuxeo.ecm.core.io.avro.factories--factory",
              "id": "org.nuxeo.ecm.core.io.avro.factories--factory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.avro",
                "name": "org.nuxeo.runtime.avro",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"factory\" target=\"org.nuxeo.runtime.avro\">\n    <factory class=\"org.nuxeo.ecm.core.io.avro.TypeSchemaFactory\" type=\"org.nuxeo.ecm.core.schema.types.Type\"/>\n    <factory class=\"org.nuxeo.ecm.core.io.avro.SchemaSchemaFactory\" type=\"org.nuxeo.ecm.core.schema.types.Schema\"/>\n    <factory class=\"org.nuxeo.ecm.core.io.avro.DocumentModelSchemaFactory\" type=\"org.nuxeo.ecm.core.api.DocumentModel\"/>\n    <factory class=\"org.nuxeo.ecm.core.io.avro.DocumentTypeSchemaFactory\" type=\"org.nuxeo.ecm.core.schema.DocumentType\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.avro--mapper",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.avro.factories/Contributions/org.nuxeo.ecm.core.io.avro.factories--mapper",
              "id": "org.nuxeo.ecm.core.io.avro.factories--mapper",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.avro",
                "name": "org.nuxeo.runtime.avro",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"mapper\" target=\"org.nuxeo.runtime.avro\">\n    <mapper class=\"org.nuxeo.ecm.core.io.avro.PropertyMapper\" type=\"org.nuxeo.ecm.core.api.model.Property\"/>\n    <mapper class=\"org.nuxeo.ecm.core.io.avro.DocumentModelMapper\" type=\"org.nuxeo.ecm.core.api.DocumentModel\"/>\n    <mapper class=\"org.nuxeo.ecm.core.io.avro.BlobPropertyMapper\" type=\"org.nuxeo.ecm.core.api.model.impl.primitives.BlobProperty\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.avro.factories",
          "name": "org.nuxeo.ecm.core.io.avro.factories",
          "requirements": [],
          "resolutionOrder": 128,
          "services": [],
          "startOrder": 121,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.io.avro.factories\" version=\"1.0.0\">\n  <documentation>\n    Core IO contribution to Avro for Nuxeo core model.\n  </documentation>\n  <extension target=\"org.nuxeo.runtime.avro\" point=\"factory\">\n    <factory class=\"org.nuxeo.ecm.core.io.avro.TypeSchemaFactory\" type=\"org.nuxeo.ecm.core.schema.types.Type\" />\n    <factory class=\"org.nuxeo.ecm.core.io.avro.SchemaSchemaFactory\" type=\"org.nuxeo.ecm.core.schema.types.Schema\" />\n    <factory class=\"org.nuxeo.ecm.core.io.avro.DocumentModelSchemaFactory\" type=\"org.nuxeo.ecm.core.api.DocumentModel\" />\n    <factory class=\"org.nuxeo.ecm.core.io.avro.DocumentTypeSchemaFactory\" type=\"org.nuxeo.ecm.core.schema.DocumentType\" />\n  </extension>\n  <extension target=\"org.nuxeo.runtime.avro\" point=\"mapper\">\n    <mapper class=\"org.nuxeo.ecm.core.io.avro.PropertyMapper\" type=\"org.nuxeo.ecm.core.api.model.Property\" />\n    <mapper class=\"org.nuxeo.ecm.core.io.avro.DocumentModelMapper\" type=\"org.nuxeo.ecm.core.api.DocumentModel\" />\n    <mapper class=\"org.nuxeo.ecm.core.io.avro.BlobPropertyMapper\" type=\"org.nuxeo.ecm.core.api.model.impl.primitives.BlobProperty\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/avro-factory-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.BatchManager--handlers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.batch.handler.DefaultBatchHandler/Contributions/org.nuxeo.ecm.core.io.batch.handler.DefaultBatchHandler--handlers",
              "id": "org.nuxeo.ecm.core.io.batch.handler.DefaultBatchHandler--handlers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.BatchManager",
                "name": "org.nuxeo.ecm.core.io.BatchManager",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"handlers\" target=\"org.nuxeo.ecm.core.io.BatchManager\">\n    <batchHandler>\n      <name>default</name>\n      <class>org.nuxeo.ecm.core.io.upload.batch.impl.DefaultBatchHandler</class>\n      <property name=\"transientStore\">BatchManagerCache</property>\n    </batchHandler>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent--store",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.batch.handler.DefaultBatchHandler/Contributions/org.nuxeo.ecm.core.io.batch.handler.DefaultBatchHandler--store",
              "id": "org.nuxeo.ecm.core.io.batch.handler.DefaultBatchHandler--store",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "name": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"store\" target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\">\n    <!-- Explicit declaration based on default configuration to enforce GC -->\n    <store name=\"automation\"/>\n    <store name=\"BatchManagerCache\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.batch.handler.DefaultBatchHandler",
          "name": "org.nuxeo.ecm.core.io.batch.handler.DefaultBatchHandler",
          "requirements": [],
          "resolutionOrder": 129,
          "services": [],
          "startOrder": 122,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.io.batch.handler.DefaultBatchHandler\" version=\"1.0\">\n\n  <requires>org.nuxeo.ecm.core.transientstore.TransientStorageComponent</requires>\n\n  <extension target=\"org.nuxeo.ecm.core.io.BatchManager\" point=\"handlers\">\n    <batchHandler>\n      <name>default</name>\n      <class>org.nuxeo.ecm.core.io.upload.batch.impl.DefaultBatchHandler</class>\n      <property name=\"transientStore\">BatchManagerCache</property>\n    </batchHandler>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\" point=\"store\">\n    <!-- Explicit declaration based on default configuration to enforce GC -->\n    <store name=\"automation\" />\n    <store name=\"BatchManagerCache\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/batchmanager-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.automation.server.BatchManager"
          ],
          "componentClass": "org.nuxeo.ecm.core.io.upload.batch.BatchManagerComponent",
          "declaredStartOrder": null,
          "documentation": "\n    This component provides a service to be able to upload some blobs and store them temporarily so that you can execute\n    an Automation Operation on these Blobs.\n\n    @author Thierry Delprat (tdelprat@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThis component provides a service to be able to upload some blobs and store them temporarily so that you can execute\nan Automation Operation on these Blobs.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.automation.server.BatchManager--handlers"
              ],
              "componentId": "org.nuxeo.ecm.core.io.BatchManager",
              "descriptors": [
                "org.nuxeo.ecm.core.io.upload.batch.BatchHandlerDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.BatchManager/ExtensionPoints/org.nuxeo.ecm.core.io.BatchManager--handlers",
              "id": "org.nuxeo.ecm.core.io.BatchManager--handlers",
              "label": "handlers (org.nuxeo.ecm.core.io.BatchManager)",
              "name": "handlers",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.BatchManager",
          "name": "org.nuxeo.ecm.core.io.BatchManager",
          "requirements": [],
          "resolutionOrder": 130,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.io.BatchManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.BatchManager/Services/org.nuxeo.ecm.core.io.upload.batch.BatchManager",
              "id": "org.nuxeo.ecm.core.io.upload.batch.BatchManager",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 575,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.io.BatchManager\" version=\"1.0\">\n  <alias>org.nuxeo.ecm.automation.server.BatchManager</alias>\n\n  <documentation>\n    This component provides a service to be able to upload some blobs and store them temporarily so that you can execute\n    an Automation Operation on these Blobs.\n\n    @author Thierry Delprat (tdelprat@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.io.upload.batch.BatchManagerComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.io.upload.batch.BatchManager\" />\n  </service>\n\n  <extension-point name=\"handlers\">\n    <object class=\"org.nuxeo.ecm.core.io.upload.batch.BatchHandlerDescriptor\"/>\n  </extension-point>\n</component>\n",
          "xmlFileName": "/OSGI-INF/batchmanager-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.io.download.DownloadServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Manages repositories.\n  \n",
          "documentationHtml": "<p>\nManages repositories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.io.download.DownloadService",
              "descriptors": [
                "org.nuxeo.ecm.core.io.download.DownloadPermissionDescriptor"
              ],
              "documentation": "\n      Defines the permissions associated to blob download. Contributions are of the form:\n      <code>\n    <permission name=\"myperm\">\n        <script language=\"JavaScript\">\n            function run() {\n              if (CurrentUser.getName() != \"bob\") {\n                return false;\n              }\n              if (!CurrentUser.getGroups().contains(\"members\")) {\n                return false;\n              }\n              if (Document.getPropertyValue(\"dc:format\") != \"pdf\") {\n                return false;\n              }\n              if (Reason != \"rendition\") {\n                return false;\n              }\n              if (Rendition != \"myrendition\") {\n                return false;\n              }\n              if (Blob.getFilename() != \"myfile.txt\") {\n                return false;\n              }\n              if (XPath == \"file:content\" || XPath == \"blobholder:0\") {\n                return false;\n              }\n              return true;\n          </script>\n    </permission>\n</code>\n\n      The language can be any JVM scripting language, the default is \"JavaScript\".\n\n      The script must define a \"run()\" function that returns a boolean:\n      - true means that downloading the blob is not disallowed by this permission.\n      - false means that downloading the blob is forbidden.\n      The method will get called with the following global context (some values may be null):\n      Document (DocumentModel), XPath (String), Blob (Blob), CurrentUser (NuxeoPrincipal),\n      Reason (String), Rendition (String), Infos (Map).\n\n      If there are several permissions defined, a single one returning false is sufficient\n      to forbid the blob download.\n    \n",
              "documentationHtml": "<p>\nDefines the permissions associated to blob download. Contributions are of the form:\n</p><p></p><pre><code>    &lt;permission name&#61;&#34;myperm&#34;&gt;\n        &lt;script language&#61;&#34;JavaScript&#34;&gt;\n            function run() {\n              if (CurrentUser.getName() !&#61; &#34;bob&#34;) {\n                return false;\n              }\n              if (!CurrentUser.getGroups().contains(&#34;members&#34;)) {\n                return false;\n              }\n              if (Document.getPropertyValue(&#34;dc:format&#34;) !&#61; &#34;pdf&#34;) {\n                return false;\n              }\n              if (Reason !&#61; &#34;rendition&#34;) {\n                return false;\n              }\n              if (Rendition !&#61; &#34;myrendition&#34;) {\n                return false;\n              }\n              if (Blob.getFilename() !&#61; &#34;myfile.txt&#34;) {\n                return false;\n              }\n              if (XPath &#61;&#61; &#34;file:content&#34; || XPath &#61;&#61; &#34;blobholder:0&#34;) {\n                return false;\n              }\n              return true;\n          &lt;/script&gt;\n    &lt;/permission&gt;\n</code></pre><p>\nThe language can be any JVM scripting language, the default is &#34;JavaScript&#34;.\n</p><p>\nThe script must define a &#34;run()&#34; function that returns a boolean:\n- true means that downloading the blob is not disallowed by this permission.\n- false means that downloading the blob is forbidden.\nThe method will get called with the following global context (some values may be null):\nDocument (DocumentModel), XPath (String), Blob (Blob), CurrentUser (NuxeoPrincipal),\nReason (String), Rendition (String), Infos (Map).\n</p><p>\nIf there are several permissions defined, a single one returning false is sufficient\nto forbid the blob download.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.download.DownloadService/ExtensionPoints/org.nuxeo.ecm.core.io.download.DownloadService--permissions",
              "id": "org.nuxeo.ecm.core.io.download.DownloadService--permissions",
              "label": "permissions (org.nuxeo.ecm.core.io.download.DownloadService)",
              "name": "permissions",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.io.download.DownloadService",
              "descriptors": [
                "org.nuxeo.ecm.core.io.download.RedirectResolverDescriptor"
              ],
              "documentation": "\n      Defines the redirect resolver associated to blob download. Contributions are of the form:\n      <code>\n    <redirectResolver class=\"org.nuxeo.ecm.core.io.download.DefaultRedirectResolver\"/>\n</code>\n\n      This allows you to redirect to a specific cache server or by default the blobManager redirect mechanism\n    \n",
              "documentationHtml": "<p>\nDefines the redirect resolver associated to blob download. Contributions are of the form:\n</p><p></p><pre><code>    &lt;redirectResolver class&#61;&#34;org.nuxeo.ecm.core.io.download.DefaultRedirectResolver&#34;/&gt;\n</code></pre><p>\nThis allows you to redirect to a specific cache server or by default the blobManager redirect mechanism\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.download.DownloadService/ExtensionPoints/org.nuxeo.ecm.core.io.download.DownloadService--redirectResolver",
              "id": "org.nuxeo.ecm.core.io.download.DownloadService--redirectResolver",
              "label": "redirectResolver (org.nuxeo.ecm.core.io.download.DownloadService)",
              "name": "redirectResolver",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that enables returning blob URLs with redirections already taken into account.\n      Only applies to code calling the DownloadService.getFullDownloadUrl API.\n    \n",
              "documentationHtml": "<p>\nProperty that enables returning blob URLs with redirections already taken into account.\nOnly applies to code calling the DownloadService.getFullDownloadUrl API.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.download.DownloadService/Contributions/org.nuxeo.ecm.core.io.download.DownloadService--configuration",
              "id": "org.nuxeo.ecm.core.io.download.DownloadService--configuration",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that enables returning blob URLs with redirections already taken into account.\n      Only applies to code calling the DownloadService.getFullDownloadUrl API.\n    </documentation>\n    <property name=\"org.nuxeo.download.url.follow.redirect\">false</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent--store",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.download.DownloadService/Contributions/org.nuxeo.ecm.core.io.download.DownloadService--store",
              "id": "org.nuxeo.ecm.core.io.download.DownloadService--store",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "name": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"store\" target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\">\n    <!-- Explicit declaration based on default configuration to enforce GC -->\n    <store name=\"download\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.download.DownloadService",
          "name": "org.nuxeo.ecm.core.io.download.DownloadService",
          "requirements": [
            "org.nuxeo.ecm.core.transientstore.TransientStorageComponent"
          ],
          "resolutionOrder": 131,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.io.download.DownloadService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.download.DownloadService/Services/org.nuxeo.ecm.core.io.download.DownloadService",
              "id": "org.nuxeo.ecm.core.io.download.DownloadService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 577,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.io.download.DownloadService\">\n\n  <documentation>\n    Manages repositories.\n  </documentation>\n\n  <require>org.nuxeo.ecm.core.transientstore.TransientStorageComponent</require>\n\n  <implementation class=\"org.nuxeo.ecm.core.io.download.DownloadServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.io.download.DownloadService\" />\n  </service>\n\n  <extension-point name=\"permissions\">\n\n    <documentation>\n      Defines the permissions associated to blob download. Contributions are of the form:\n      <code>\n        <permission name=\"myperm\">\n          <script language=\"JavaScript\">\n            function run() {\n              if (CurrentUser.getName() != \"bob\") {\n                return false;\n              }\n              if (!CurrentUser.getGroups().contains(\"members\")) {\n                return false;\n              }\n              if (Document.getPropertyValue(\"dc:format\") != \"pdf\") {\n                return false;\n              }\n              if (Reason != \"rendition\") {\n                return false;\n              }\n              if (Rendition != \"myrendition\") {\n                return false;\n              }\n              if (Blob.getFilename() != \"myfile.txt\") {\n                return false;\n              }\n              if (XPath == \"file:content\" || XPath == \"blobholder:0\") {\n                return false;\n              }\n              return true;\n          </script>\n        </permission>\n      </code>\n      The language can be any JVM scripting language, the default is \"JavaScript\".\n\n      The script must define a \"run()\" function that returns a boolean:\n      - true means that downloading the blob is not disallowed by this permission.\n      - false means that downloading the blob is forbidden.\n      The method will get called with the following global context (some values may be null):\n      Document (DocumentModel), XPath (String), Blob (Blob), CurrentUser (NuxeoPrincipal),\n      Reason (String), Rendition (String), Infos (Map).\n\n      If there are several permissions defined, a single one returning false is sufficient\n      to forbid the blob download.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.io.download.DownloadPermissionDescriptor\"/>\n\n  </extension-point>\n\n  <extension-point name=\"redirectResolver\">\n\n    <documentation>\n      Defines the redirect resolver associated to blob download. Contributions are of the form:\n      <code>\n        <redirectResolver class=\"org.nuxeo.ecm.core.io.download.DefaultRedirectResolver\"></redirectResolver>\n      </code>\n      This allows you to redirect to a specific cache server or by default the blobManager redirect mechanism\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.io.download.RedirectResolverDescriptor\"/>\n\n  </extension-point>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that enables returning blob URLs with redirections already taken into account.\n      Only applies to code calling the DownloadService.getFullDownloadUrl API.\n    </documentation>\n    <property name=\"org.nuxeo.download.url.follow.redirect\">${org.nuxeo.download.url.follow.redirect:=false}</property>\n  </extension>\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=\"download\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/download-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.io.registry.MarshallerRegistryImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service providing a way to register marshallers and use them.\n  \n",
          "documentationHtml": "<p>\nService providing a way to register marshallers and use them.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.io.MarshallerRegistry",
              "descriptors": [
                "org.nuxeo.ecm.core.io.registry.MarshallerRegistryDescriptor"
              ],
              "documentation": "\n\n      Extension Point to register or deregister a marshaller.\n      <register\n    class=\"org.company.nuxeo.io.MyDocumentWriter\" enable=\"true\"/>\n",
              "documentationHtml": "<p>\nExtension Point to register or deregister a marshaller.\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.MarshallerRegistry/ExtensionPoints/org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "id": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "label": "marshallers (org.nuxeo.ecm.core.io.MarshallerRegistry)",
              "name": "marshallers",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.MarshallerRegistry",
          "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
          "requirements": [],
          "resolutionOrder": 132,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.io.MarshallerRegistry",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.MarshallerRegistry/Services/org.nuxeo.ecm.core.io.registry.MarshallerRegistry",
              "id": "org.nuxeo.ecm.core.io.registry.MarshallerRegistry",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 576,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" version=\"1.0.0\">\n  <documentation>\n    Service providing a way to register marshallers and use them.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.io.registry.MarshallerRegistryImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.io.registry.MarshallerRegistry\" />\n  </service>\n\n  <extension-point name=\"marshallers\">\n\n    <documentation>\n      Extension Point to register or deregister a marshaller.\n      <register class=\"org.company.nuxeo.io.MyDocumentWriter\" enable=\"true\" />\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.io.registry.MarshallerRegistryDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/MarshallerRegistry.xml",
          "xmlPureComponent": false
        },
        {
          "@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.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.MarshallerRegistry.marshallers/Contributions/org.nuxeo.ecm.core.io.MarshallerRegistry.marshallers--marshallers",
              "id": "org.nuxeo.ecm.core.io.MarshallerRegistry.marshallers--marshallers",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- validation -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.validation.ConstraintJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.validation.ConstraintListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.validation.DocumentValidationReportJsonWriter\" enable=\"true\"/>\n    <!-- document -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentModelJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentModelJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentPropertyJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentPropertiesJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentModelListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentModelListJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.ACPJsonWriter\" enable=\"true\"/>\n    <!-- document type -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.DocumentTypeJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.DocumentTypeListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.FacetJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.FacetListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.SchemaJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.SchemaListJsonWriter\" enable=\"true\"/>\n    <!-- aggregate -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.aggregate.AggregateJsonWriter\" enable=\"true\"/>\n    <!-- enrichers -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.FirstAccessibleAncestorJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.BasePermissionsJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.BreadcrumbJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.ChildrenJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.HasFolderishChildJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.ContextualParametersJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.UserVisiblePermissionsJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.BlobAppLinksJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.HighlightJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io/org.nuxeo.ecm.core.io.MarshallerRegistry.marshallers",
          "name": "org.nuxeo.ecm.core.io.MarshallerRegistry.marshallers",
          "requirements": [],
          "resolutionOrder": 133,
          "services": [],
          "startOrder": 120,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.io.MarshallerRegistry.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    <!-- validation -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.validation.ConstraintJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.validation.ConstraintListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.validation.DocumentValidationReportJsonWriter\"\n      enable=\"true\" />\n    <!-- document -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentModelJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentModelJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentPropertyJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentPropertiesJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentModelListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.DocumentModelListJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.document.ACPJsonWriter\" enable=\"true\" />\n    <!-- document type -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.DocumentTypeJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.DocumentTypeListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.FacetJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.FacetListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.SchemaJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.types.SchemaListJsonWriter\" enable=\"true\" />\n    <!-- aggregate -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.aggregate.AggregateJsonWriter\" enable=\"true\" />\n    <!-- enrichers -->\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.FirstAccessibleAncestorJsonEnricher\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.BasePermissionsJsonEnricher\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.BreadcrumbJsonEnricher\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.ChildrenJsonEnricher\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.HasFolderishChildJsonEnricher\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.ContextualParametersJsonEnricher\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.UserVisiblePermissionsJsonEnricher\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.BlobAppLinksJsonEnricher\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.core.io.marshallers.json.enrichers.HighlightJsonEnricher\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-io-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.io",
      "id": "org.nuxeo.ecm.core.io",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.core.io,org.nuxeo.ecm.core.io.exceptions,o\r\n rg.nuxeo.ecm.core.io.impl,org.nuxeo.ecm.core.io.impl.plugins\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.ecm.core.io\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nImport-Package: javax.security.auth.login,org.apache.commons.logging,org\r\n .dom4j,org.dom4j.io,org.nuxeo.common.collections,org.nuxeo.common.utils\r\n ,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxe\r\n o.ecm.core.api.impl,org.nuxeo.ecm.core.api.impl.blob,org.nuxeo.ecm.core\r\n .api.repository,org.nuxeo.ecm.core.api.security,org.nuxeo.ecm.core.api.\r\n security.impl,org.nuxeo.ecm.core.schema,org.nuxeo.ecm.core.schema.types\r\n ,org.nuxeo.runtime.api,org.nuxeo.runtime.services.streaming\r\nBundle-SymbolicName: org.nuxeo.ecm.core.io;singleton:=true\r\nNuxeo-Component: OSGI-INF/document-xml-exporter-service.xml,OSGI-INF/avr\r\n o-factory-contrib.xml,OSGI-INF/batchmanager-contrib.xml,OSGI-INF/batchm\r\n anager-framework.xml,OSGI-INF/download-service.xml,OSGI-INF/MarshallerR\r\n egistry.xml,OSGI-INF/marshallers-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 133,
      "minResolutionOrder": 127,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audit-io",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.audit.io",
      "components": [
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.audit.io.contrib"
          ],
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Sample contribution for audit logs copy.\n\n    @author Dragos Mihalache\n    <pre>\n    <extension point=\"adapters\" target=\"org.nuxeo.ecm.platform.io.IOManager\">\n        <adapter class=\"org.nuxeo.audit.io.IOAuditAdapter\" name=\"audit_logs\">\n            <property name=\"nothing\">default</property>\n        </adapter>\n    </extension>\n</pre>\n",
          "documentationHtml": "<p>\nSample contribution for audit logs copy.\n</p><p>\n</p><pre>\n\n\ndefault\n\n\n</pre>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.io.IOManager--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.audit.io/org.nuxeo.audit.io.contrib/Contributions/org.nuxeo.audit.io.contrib--adapters",
              "id": "org.nuxeo.audit.io.contrib--adapters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.io.IOManager",
                "name": "org.nuxeo.ecm.platform.io.IOManager",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.platform.io.IOManager\">\n    <adapter class=\"org.nuxeo.audit.io.IOAuditAdapter\" name=\"audit_logs\">\n      <property name=\"nothing\">default</property>\n    </adapter>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.audit.io/org.nuxeo.audit.io.contrib",
          "name": "org.nuxeo.audit.io.contrib",
          "requirements": [],
          "resolutionOrder": 246,
          "services": [],
          "startOrder": 39,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.io.contrib\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.ecm.platform.audit.io.contrib</alias>\n\n  <documentation>\n    Sample contribution for audit logs copy.\n\n    @author Dragos Mihalache\n    <pre>\n      <extension target=\"org.nuxeo.ecm.platform.io.IOManager\"\n          point=\"adapters\">\n        <adapter name=\"audit_logs\" class=\"org.nuxeo.audit.io.IOAuditAdapter\">\n          <property name=\"nothing\">default</property>\n        </adapter>\n      </extension>\n    </pre>\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.platform.io.IOManager\" point=\"adapters\">\n    <adapter name=\"audit_logs\" class=\"org.nuxeo.audit.io.IOAuditAdapter\">\n      <property name=\"nothing\">default</property>\n    </adapter>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/io-audit-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-audit-io-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.audit.io",
      "id": "org.nuxeo.ecm.audit.io",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Platform Audit Logs IO Fragment\r\nBundle-SymbolicName: org.nuxeo.ecm.audit.io;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nRequire-Bundle: org.nuxeo.ecm.core.api,org.nuxeo.ecm.core.io,org.nuxeo.e\r\n cm.platform.io.api,org.nuxeo.ecm.platform.audit.api,org.nuxeo.ecm.platf\r\n orm.audit\r\nNuxeo-Component: OSGI-INF/io-audit-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 246,
      "minResolutionOrder": 246,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.core.io",
        "org.nuxeo.ecm.platform.io.api",
        "org.nuxeo.ecm.platform.audit.api",
        "org.nuxeo.ecm.platform.audit"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-datasource",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.datasource",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.datasource.DataSourceComponent",
          "declaredStartOrder": -1000,
          "documentation": "\n    Component use to register datasources.\n  \n",
          "documentationHtml": "<p>\nComponent use to register datasources.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.datasource",
              "descriptors": [
                "org.nuxeo.runtime.datasource.DataSourceDescriptor",
                "org.nuxeo.runtime.datasource.DataSourceLinkDescriptor"
              ],
              "documentation": "\n\n      Example contribution:\n\n      <code>\n    <datasource driverClassName=\"org.h2.Driver\" maxTotal=\"20\"\n        maxWaitMillis=\"10000\" minTotal=\"5\" name=\"jdbc/foo\">\n        <property name=\"url\">jdbc:h2:/home/db;DB_CLOSE_ON_EXIT=false;MODE=LEGACY\n          </property>\n        <property name=\"username\">nuxeo</property>\n        <property name=\"password\">nuxeo</property>\n    </datasource>\n</code>\n\n\n      Or, for a XA datasource:\n\n      <code>\n    <datasource maxTotal=\"20\" maxWaitMillis=\"10000\" minTotal=\"5\"\n        name=\"jdbc/foo\" xaDataSource=\"org.h2.jdbcx.JdbcDataSource\">\n        <property name=\"databaseName\">/home/db</property>\n        <property name=\"createDatabase\">create</property>\n        <property name=\"user\">nuxeo</property>\n        <property name=\"password\">nuxeo</property>\n    </datasource>\n</code>\n\n\n      The allowed attributes of a\n      <b>datasource</b>\n\n      element are:\n      <ul>\n    <li>\n        <b>name</b>\n          the JNDI name (for instance\n          <tt>jdbc/foo</tt>\n          )\n        </li>\n    <li>\n        <b>driverClassName</b>\n          the JDBC driver class name (only for a non-XA datasource)\n        </li>\n    <li>\n        <b>xaDataSource</b>\n          the XA datasource class name (only for a XA datasource)\n        </li>\n</ul>\n<p/>\n\n      To configure the characteristics of the pool:\n      <ul>\n    <li>\n        <b>maxTotal</b>\n          the maximum number of active connections\n        </li>\n    <li>\n        <b>minTotal</b>\n          the minimum number of idle connections\n        </li>\n    <li>\n        <b>maxWaitMillis</b>\n          the maximum number of milliseconds to wait for a connection to\n          be\n          available, or -1 (the default) to wait indefinitely\n        </li>\n    <li>\n          ... see org.apache.commons.dbcp.BasicDataSource setters for\n          more.\n        </li>\n</ul>\n<p/>\n\n      To configure the datasource, individual property sub-elements must\n      be\n      used.\n      For a non-XA datasource,\n      <b>url</b>\n\n      ,\n      <b>username</b>\n\n      and\n      <b>password</b>\n\n      are commonly used. For a XA datasource, the properties are done\n      according\n      to the JavaBean setters of the datasource, see the\n      documentation for\n      your\n      JDBC driver for more.\n    \n",
              "documentationHtml": "<p>\nExample contribution:\n</p><p>\n</p><pre><code>    &lt;datasource driverClassName&#61;&#34;org.h2.Driver&#34; maxTotal&#61;&#34;20&#34;\n        maxWaitMillis&#61;&#34;10000&#34; minTotal&#61;&#34;5&#34; name&#61;&#34;jdbc/foo&#34;&gt;\n        &lt;property name&#61;&#34;url&#34;&gt;jdbc:h2:/home/db;DB_CLOSE_ON_EXIT&#61;false;MODE&#61;LEGACY\n          &lt;/property&gt;\n        &lt;property name&#61;&#34;username&#34;&gt;nuxeo&lt;/property&gt;\n        &lt;property name&#61;&#34;password&#34;&gt;nuxeo&lt;/property&gt;\n    &lt;/datasource&gt;\n</code></pre><p>\nOr, for a XA datasource:\n</p><p>\n</p><pre><code>    &lt;datasource maxTotal&#61;&#34;20&#34; maxWaitMillis&#61;&#34;10000&#34; minTotal&#61;&#34;5&#34;\n        name&#61;&#34;jdbc/foo&#34; xaDataSource&#61;&#34;org.h2.jdbcx.JdbcDataSource&#34;&gt;\n        &lt;property name&#61;&#34;databaseName&#34;&gt;/home/db&lt;/property&gt;\n        &lt;property name&#61;&#34;createDatabase&#34;&gt;create&lt;/property&gt;\n        &lt;property name&#61;&#34;user&#34;&gt;nuxeo&lt;/property&gt;\n        &lt;property name&#61;&#34;password&#34;&gt;nuxeo&lt;/property&gt;\n    &lt;/datasource&gt;\n</code></pre><p>\nThe allowed attributes of a\n<b>datasource</b>\n</p><p>\nelement are:\n</p><ul><li>\n<b>name</b>\nthe JNDI name (for instance\njdbc/foo\n)\n</li><li>\n<b>driverClassName</b>\nthe JDBC driver class name (only for a non-XA datasource)\n</li><li>\n<b>xaDataSource</b>\nthe XA datasource class name (only for a XA datasource)\n</li></ul>\n<p>\nTo configure the characteristics of the pool:\n</p><ul><li>\n<b>maxTotal</b>\nthe maximum number of active connections\n</li><li>\n<b>minTotal</b>\nthe minimum number of idle connections\n</li><li>\n<b>maxWaitMillis</b>\nthe maximum number of milliseconds to wait for a connection to\nbe\navailable, or -1 (the default) to wait indefinitely\n</li><li>\n... see org.apache.commons.dbcp.BasicDataSource setters for\nmore.\n</li></ul>\n<p>\nTo configure the datasource, individual property sub-elements must\nbe\nused.\nFor a non-XA datasource,\n<b>url</b>\n</p><p>\n,\n<b>username</b>\n</p><p>\nand\n<b>password</b>\n</p><p>\nare commonly used. For a XA datasource, the properties are done\naccording\nto the JavaBean setters of the datasource, see the\ndocumentation for\nyour\nJDBC driver for more.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.datasource/org.nuxeo.runtime.datasource/ExtensionPoints/org.nuxeo.runtime.datasource--datasources",
              "id": "org.nuxeo.runtime.datasource--datasources",
              "label": "datasources (org.nuxeo.runtime.datasource)",
              "name": "datasources",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.datasource/org.nuxeo.runtime.datasource",
          "name": "org.nuxeo.runtime.datasource",
          "requirements": [
            "org.nuxeo.runtime.jtajca.JtaActivator"
          ],
          "resolutionOrder": 572,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.datasource",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.datasource/org.nuxeo.runtime.datasource/Services/org.nuxeo.runtime.datasource.PooledDataSourceRegistry",
              "id": "org.nuxeo.runtime.datasource.PooledDataSourceRegistry",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 2,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.runtime.datasource\">\n  <documentation>\n    Component use to register datasources.\n  </documentation>\n\n  <require>org.nuxeo.runtime.jtajca.JtaActivator</require>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.datasource.PooledDataSourceRegistry\"/>\n  </service>\n\n  <implementation class=\"org.nuxeo.runtime.datasource.DataSourceComponent\"/>\n\n  <extension-point name=\"datasources\">\n    <documentation>\n\n      Example contribution:\n\n      <code>\n        <datasource name=\"jdbc/foo\" driverClassName=\"org.h2.Driver\" maxTotal=\"20\" minTotal=\"5\" maxWaitMillis=\"10000\">\n          <property name=\"url\">jdbc:h2:/home/db;DB_CLOSE_ON_EXIT=false;MODE=LEGACY\n          </property>\n          <property name=\"username\">nuxeo</property>\n          <property name=\"password\">********</property>\n        </datasource>\n      </code>\n\n      Or, for a XA datasource:\n\n      <code>\n        <datasource name=\"jdbc/foo\" xaDataSource=\"org.h2.jdbcx.JdbcDataSource\" maxTotal=\"20\" minTotal=\"5\" maxWaitMillis=\"10000\">\n          <property name=\"databaseName\">/home/db</property>\n          <property name=\"createDatabase\">create</property>\n          <property name=\"user\">nuxeo</property>\n          <property name=\"password\">********</property>\n        </datasource>\n      </code>\n\n      The allowed attributes of a\n      <b>datasource</b>\n      element are:\n      <ul>\n        <li>\n          <b>name</b>\n          the JNDI name (for instance\n          <tt>jdbc/foo</tt>\n          )\n        </li>\n        <li>\n          <b>driverClassName</b>\n          the JDBC driver class name (only for a non-XA datasource)\n        </li>\n        <li>\n          <b>xaDataSource</b>\n          the XA datasource class name (only for a XA datasource)\n        </li>\n      </ul>\n      <p/>\n      To configure the characteristics of the pool:\n      <ul>\n        <li>\n          <b>maxTotal</b>\n          the maximum number of active connections\n        </li>\n        <li>\n          <b>minTotal</b>\n          the minimum number of idle connections\n        </li>\n        <li>\n          <b>maxWaitMillis</b>\n          the maximum number of milliseconds to wait for a connection to\n          be\n          available, or -1 (the default) to wait indefinitely\n        </li>\n        <li>\n          ... see org.apache.commons.dbcp.BasicDataSource setters for\n          more.\n        </li>\n      </ul>\n      <p/>\n      To configure the datasource, individual property sub-elements must\n      be\n      used.\n      For a non-XA datasource,\n      <b>url</b>\n      ,\n      <b>username</b>\n      and\n      <b>password</b>\n      are commonly used. For a XA datasource, the properties are done\n      according\n      to the JavaBean setters of the datasource, see the\n      documentation for\n      your\n      JDBC driver for more.\n    </documentation>\n\n    <object class=\"org.nuxeo.runtime.datasource.DataSourceDescriptor\"/>\n    <object class=\"org.nuxeo.runtime.datasource.DataSourceLinkDescriptor\"/>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/datasource-component.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-datasource-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.datasource",
      "id": "org.nuxeo.runtime.datasource",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.runtime.datasource\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Name: Nuxeo Runtime DataSource Implementation\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/datasource-component.xml\r\nImport-Package: javax.naming,javax.naming.spi,javax.sql,org.apache.commo\r\n ns.beanutils,org.apache.commons.dbcp;version=\"1.3\",org.apache.commons.d\r\n bcp.managed;version=\"1.3\",org.apache.commons.logging,org.nuxeo.common.x\r\n map.annotation,org.nuxeo.runtime.api,org.nuxeo.runtime.model,org.nuxeo.\r\n runtime.transaction,org.w3c.dom\r\nBundle-SymbolicName: org.nuxeo.runtime.datasource;singleton:=true\r\nEclipse-RegisterBuddy: org.nuxeo.runtime,org.nuxeo.common\r\n\r\n",
      "maxResolutionOrder": 572,
      "minResolutionOrder": 572,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-mimetype",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.mimetype",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
          "declaredStartOrder": null,
          "documentation": "\n    Core mimetype registry service.\n\n    <p>Deals with mimetypes registration and mimetype detection (BETA).</p>\n\n\n    @version 2.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n\n    @author <a href=\"mailto:lgodard@nuxeo.com\">Laurent Godard</a>\n\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n",
          "documentationHtml": "<p>\nCore mimetype registry service.\n</p><p>\n</p><p>Deals with mimetypes registration and mimetype detection (BETA).</p>\n<p>\n&#64;version 2.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
              "descriptors": [
                "org.nuxeo.ecm.platform.mimetype.service.MimetypeDescriptor"
              ],
              "documentation": "\n\n      Extension allowing one to register mimetypes.\n\n      <p/>\n\n\n      A mimetype holds meta information about a given mimetype.\n\n      <ul>\n    <li>RFC-2046 major</li>\n    <li>RFC-2046 minor</li>\n    <li>Icon</li>\n    <li>List of extensions (the first one will be used as default)</li>\n    <li>List of mimetype names</li>\n    <li>Boolean flag if a file of this mimetype is binary</li>\n    <li>\n          Boolean flag onlineEditable if a file of this mimetype is supported by\n          online Edit - default is false\n        </li>\n    <li>\n          Boolean flag oleSupported if a file of this mimetype is supported by\n          the oleExtract plugin - default is false\n        </li>\n</ul>\n\n\n      For instance :\n\n      <code>\n    <mimetype binary=\"true\" iconPath=\"pdf.png\" normalized=\"application/pdf\">\n        <mimetypes>\n            <mimetype>application/pdf</mimetype>\n        </mimetypes>\n        <extensions>\n            <extension>pdf</extension>\n        </extensions>\n    </mimetype>\n</code>\n",
              "documentationHtml": "<p>\nExtension allowing one to register mimetypes.\n</p><p>\nA mimetype holds meta information about a given mimetype.\n</p><p>\n</p><ul><li>RFC-2046 major</li><li>RFC-2046 minor</li><li>Icon</li><li>List of extensions (the first one will be used as default)</li><li>List of mimetype names</li><li>Boolean flag if a file of this mimetype is binary</li><li>\nBoolean flag onlineEditable if a file of this mimetype is supported by\nonline Edit - default is false\n</li><li>\nBoolean flag oleSupported if a file of this mimetype is supported by\nthe oleExtract plugin - default is false\n</li></ul>\n<p>\nFor instance :\n</p><p>\n</p><pre><code>    &lt;mimetype binary&#61;&#34;true&#34; iconPath&#61;&#34;pdf.png&#34; normalized&#61;&#34;application/pdf&#34;&gt;\n        &lt;mimetypes&gt;\n            &lt;mimetype&gt;application/pdf&lt;/mimetype&gt;\n        &lt;/mimetypes&gt;\n        &lt;extensions&gt;\n            &lt;extension&gt;pdf&lt;/extension&gt;\n        &lt;/extensions&gt;\n    &lt;/mimetype&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.mimetype/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService/ExtensionPoints/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--mimetype",
              "id": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--mimetype",
              "label": "mimetype (org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService)",
              "name": "mimetype",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
              "descriptors": [
                "org.nuxeo.ecm.platform.mimetype.service.ExtensionDescriptor"
              ],
              "documentation": "\n\n      Extension to register filename extension to mimetype association rules.\n\n      <p/>\n\n\n      Specify how a given extension should be used to detect a mimetype. If the\n      extension is marked 'ambiguous', a sniffing of the content of the file is\n      advised.\n\n      For instance :\n\n      <code>\n    <fileExtension ambiguous=\"true\" mimetype=\"text/xml\" name=\"xml\"/>\n</code>\n",
              "documentationHtml": "<p>\nExtension to register filename extension to mimetype association rules.\n</p><p>\nSpecify how a given extension should be used to detect a mimetype. If the\nextension is marked &#39;ambiguous&#39;, a sniffing of the content of the file is\nadvised.\n</p><p>\nFor instance :\n</p><p>\n</p><pre><code>    &lt;fileExtension ambiguous&#61;&#34;true&#34; mimetype&#61;&#34;text/xml&#34; name&#61;&#34;xml&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.mimetype/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService/ExtensionPoints/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--extension",
              "id": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--extension",
              "label": "extension (org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService)",
              "name": "extension",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n\n      Default mimetype contributions.\n\n    \n",
              "documentationHtml": "<p>\nDefault mimetype contributions.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--mimetype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.mimetype/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService/Contributions/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--mimetype",
              "id": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--mimetype",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "name": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"mimetype\" target=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\">\n\n    <documentation>\n\n      Default mimetype contributions.\n\n    </documentation>\n\n\n    <!--  text based document types -->\n\n    <mimetype binary=\"false\" iconPath=\"text.png\" normalized=\"text/plain\">\n      <mimetypes>\n        <mimetype>text/plain</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>txt</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"text.png\" normalized=\"text/html\">\n      <mimetypes>\n        <mimetype>text/html</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>html</extension>\n        <extension>xhtml</extension>\n        <extension>shtml</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"text.png\" normalized=\"multipart/related\">\n      <mimetypes>\n        <mimetype>multipart/related</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mhtml</extension>\n        <extension>mht</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"text.png\" normalized=\"text/structured\">\n      <mimetypes>\n        <mimetype>text/structured</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>stx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"text.png\" normalized=\"text/x-rst\">\n      <mimetypes>\n        <mimetype>text/x-rst</mimetype>\n        <mimetype>text/restructured</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>rst</extension>\n        <extension>rest</extension>\n        <extension>restx</extension>\n        <extension>rest</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"py.png\" normalized=\"text/python-source\">\n      <mimetypes>\n        <mimetype>text/python-source</mimetype>\n        <mimetype>text/x-python</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>py</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"java.png\" normalized=\"text/java-source\">\n      <mimetypes>\n        <mimetype>text/java-source</mimetype>\n        <mimetype>text/x-java</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>java</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"text.png\" normalized=\"text/rtf\">\n      <mimetypes>\n        <mimetype>text/rtf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>rtf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"text.png\" normalized=\"text/x-web-markdown\">\n     <mimetypes>\n       <mimetype>text/x-web-markdown</mimetype>\n     </mimetypes>\n     <extensions>\n       <extension>md</extension>\n       <extension>mkd</extension>\n       <extension>markdown</extension>\n     </extensions>\n   </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"email.png\" normalized=\"message/rfc822\">\n      <mimetypes>\n        <mimetype>message/rfc822</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>eml</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"email.png\" normalized=\"application/vnd.ms-outlook\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-outlook</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>msg</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  Microsoft Office document -->\n\n    <mimetype binary=\"true\" iconPath=\"word.png\" normalized=\"application/msword\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/msword</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>doc</extension>\n        <extension>dot</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"xls.png\" normalized=\"application/vnd.ms-excel\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-excel</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xls</extension>\n        <extension>xlt</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"ppt.png\" normalized=\"application/vnd.ms-powerpoint\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-powerpoint</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppt</extension>\n        <extension>pot</extension>\n        <extension>pps</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"mpp.png\" normalized=\"application/vnd.ms-project\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-project</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mpp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"pub.png\" normalized=\"application/vnd.ms-publisher\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-publisher</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pub</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  XML based document types -->\n\n    <mimetype binary=\"true\" iconPath=\"xml.png\" normalized=\"application/docbook+xml\">\n      <mimetypes>\n        <mimetype>application/docbook+xml</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>doc.xml</extension>\n        <extension>docb.xml</extension>\n        <extension>docb</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"xml.png\" normalized=\"text/xml\">\n      <mimetypes>\n        <mimetype>text/xml</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xml</extension>\n        <extension>graffle</extension>\n        <extension>twb</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- OpenOffice.org 1.x document types -->\n\n    <mimetype binary=\"true\" iconPath=\"sxw.png\" normalized=\"application/vnd.sun.xml.writer\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.writer</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sxw</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"stw.png\" normalized=\"application/vnd.sun.xml.writer.template\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.writer.template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>stw</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"sxi.png\" normalized=\"application/vnd.sun.xml.impress\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.impress</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sxi</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"sti.png\" normalized=\"application/vnd.sun.xml.impress.template\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.impress.template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sti</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"sxc.png\" normalized=\"application/vnd.sun.xml.calc\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.calc</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sxc</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"stc.png\" normalized=\"application/vnd.sun.xml.calc.template\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.calc.template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>stc</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"sxd.png\" normalized=\"application/vnd.sun.xml.draw\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.draw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sxd</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"std.png\" normalized=\"application/vnd.sun.xml.draw.template\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.draw.template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>std</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  OpenOffice.org 2.x document types -->\n\n    <mimetype binary=\"true\" iconPath=\"ods.png\" normalized=\"application/vnd.oasis.opendocument.spreadsheet\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.spreadsheet</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ods</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"ots.png\" normalized=\"application/vnd.oasis.opendocument.spreadsheet-template\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.oasis.opendocument.spreadsheet-template\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ots</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"odt.png\" normalized=\"application/vnd.oasis.opendocument.text\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.text</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>odt</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"ott.png\" normalized=\"application/vnd.oasis.opendocument.text-template\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.text-template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ott</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"odp.png\" normalized=\"application/vnd.oasis.opendocument.presentation\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.presentation</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>odp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"otp.png\" normalized=\"application/vnd.oasis.opendocument.presentation-template\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.oasis.opendocument.presentation-template\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>otp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"odg.png\" normalized=\"application/vnd.oasis.opendocument.graphics\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.graphics</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>odg</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"otg.png\" normalized=\"application/vnd.oasis.opendocument.graphics-template\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.oasis.opendocument.graphics-template\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>otg</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  Adobe PDF -->\n    <mimetype binary=\"true\" iconPath=\"pdf.png\" normalized=\"application/pdf\">\n      <mimetypes>\n        <mimetype>application/pdf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pdf</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  binaries -->\n\n    <mimetype binary=\"true\" iconPath=\"application.png\" normalized=\"application/octet-stream\">\n      <mimetypes>\n        <mimetype>application/octet-stream</mimetype>\n      </mimetypes>\n      <extensions/>\n    </mimetype>\n\n    <!--  Archives -->\n    <mimetype binary=\"true\" iconPath=\"tar.png\" normalized=\"application/x-gtar\">\n      <mimetypes>\n        <mimetype>application/x-gtar</mimetype>\n      </mimetypes>\n      <extensions/>\n    </mimetype>\n\n\n    <!-- Ms Office 2007 -->\n\n    <mimetype binary=\"true\" iconPath=\"docx.png\" normalized=\"application/vnd.ms-word.document.macroEnabled.12\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-word.document.macroEnabled.12</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>docm</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype binary=\"true\" iconPath=\"docx.png\" normalized=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.wordprocessingml.document\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>docx</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype binary=\"true\" iconPath=\"docx.png\" normalized=\"application/vnd.ms-word.template.macroEnabled.12\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-word.template.macroEnabled.12</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dotm</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype binary=\"true\" iconPath=\"docx.png\" normalized=\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.wordprocessingml.template\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dotx</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype binary=\"true\" iconPath=\"pptx.png\" normalized=\"application/vnd.ms-powerpoint.slideshow.macroEnabled.12\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.ms-powerpoint.slideshow.macroEnabled.12\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppsm</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype binary=\"true\" iconPath=\"pptx.png\" normalized=\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.presentationml.slideshow\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppsx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"pptx.png\" normalized=\"application/vnd.ms-powerpoint.presentation.macroEnabled.12\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.ms-powerpoint.presentation.macroEnabled.12\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pptm</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype binary=\"true\" iconPath=\"pptx.png\" normalized=\"application/vnd.openxmlformats-officedocument.presentationml.presentation\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.presentationml.presentation\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pptx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"xlsx.png\" normalized=\"application/vnd.ms-excel.sheet.binary.macroEnabled.12\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.ms-excel.sheet.binary.macroEnabled.12\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xlsb</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"xlsx.png\" normalized=\"application/vnd.ms-excel.sheet.macroEnabled.12\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-excel.sheet.macroEnabled.12</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xlsm</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"xlsx.png\" normalized=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xlsx</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  element of office 2007, but which one ??? -->\n    <mimetype binary=\"true\" iconPath=\"xlsx.png\" normalized=\"application/vnd.ms-xpsdocument\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-xpsdocument</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xps</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"zip.png\" normalized=\"application/zip\">\n      <mimetypes>\n        <mimetype>application/zip</mimetype>\n        <mimetype>application/x-zip-compressed</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>zip</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- images -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/gif\">\n      <mimetypes>\n        <mimetype>image/gif</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>gif</extension>\n      </extensions>\n    </mimetype>\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/png\">\n      <mimetypes>\n        <mimetype>image/png</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>png</extension>\n      </extensions>\n    </mimetype>\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/jpeg\">\n      <mimetypes>\n        <mimetype>image/jpeg</mimetype>\n        <mimetype>image/pjpeg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>jpg</extension>\n        <extension>jpeg</extension>\n      </extensions>\n    </mimetype>\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-portable-bitmap\">\n      <mimetypes>\n        <mimetype>image/x-portable-bitmap</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pbm</extension>\n      </extensions>\n    </mimetype>\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/bmp\">\n      <mimetypes>\n        <mimetype>image/x-bitmap</mimetype>\n        <mimetype>image/bmp</mimetype>\n\n      </mimetypes>\n      <extensions>\n        <extension>bmp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-portable-graymap\">\n      <mimetypes>\n        <mimetype>image/x-portable-graymap</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppm</extension>\n      </extensions>\n    </mimetype>\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/g3fax\">\n      <mimetypes>\n        <mimetype>image/g3fax</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>fax</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/tiff\">\n      <mimetypes>\n        <mimetype>image/tiff</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>tiff</extension>\n        <extension>tif</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"image.gif\" normalized=\"image/svg+xml\">\n      <mimetypes>\n        <mimetype>image/svg+xml</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>svg</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-dpx\">\n      <mimetypes>\n        <mimetype>image/x-dpx</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dpx</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Adobe Illustrator -->\n   <mimetype binary=\"false\" iconPath=\"image.gif\" normalized=\"application/illustrator\">\n     <mimetypes>\n       <mimetype>application/illustrator</mimetype>\n     </mimetypes>\n     <extensions>\n       <extension>ai</extension>\n     </extensions>\n   </mimetype>\n\n   <!-- Adobe Photoshop -->\n   <mimetype binary=\"false\" iconPath=\"image.gif\" normalized=\"application/photoshop\">\n     <mimetypes>\n       <mimetype>application/photoshop</mimetype>\n       <mimetype>application/x-photoshop</mimetype>\n       <mimetype>image/photoshop</mimetype>\n       <mimetype>image/x-photoshop</mimetype>\n       <mimetype>image/psd</mimetype>\n       <mimetype>image/x-psd</mimetype>\n       <mimetype>image/vnd.adobe.photoshop</mimetype>\n       <mimetype>application/psd</mimetype>\n       <mimetype>zz-application</mimetype>\n       <mimetype>zz-winassoc-psd</mimetype>\n       <mimetype>application/vnd.3gpp.pic-bw-small</mimetype> <!-- psb files -->\n     </mimetypes>\n     <extensions>\n       <extension>psd</extension>\n       <extension>psb</extension>\n     </extensions>\n   </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"application/x-emf\">\n      <mimetypes>\n        <mimetype>application/x-emf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>emf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"application/x-vclmtf\">\n      <mimetypes>\n        <mimetype>application/x-vclmtf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>vclmtf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"false\" iconPath=\"csv.png\" normalized=\"text/csv\">\n      <mimetypes>\n        <mimetype>text/csv</mimetype>\n        <mimetype>text/comma-separated-values</mimetype>\n        <mimetype>application/csv</mimetype>\n        <mimetype>application/excel</mimetype>\n        <mimetype>application/vnd.ms-excel</mimetype>\n        <mimetype>application/vnd.msexcel</mimetype>\n        <mimetype>text/anytext</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>csv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"visio.gif\" normalized=\"application/visio\">\n      <mimetypes>\n        <mimetype>application/vnd.visio</mimetype>\n        <mimetype>application/vnd.visio2013</mimetype>\n        <mimetype>application/visio</mimetype>\n        <mimetype>application/x-visio</mimetype>\n        <mimetype>application/visio.drawing</mimetype>\n        <mimetype>application/vsd</mimetype>\n        <mimetype>application/x-vsd</mimetype>\n        <mimetype>image/x-vsd</mimetype>\n        <mimetype>zz-application/zz-winassoc-vsd</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>vsdx</extension>\n        <extension>vsd</extension>\n        <extension>vst</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"audio/mpeg\">\n      <mimetypes>\n        <mimetype>audio/mpeg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mp3</extension>\n        <extension>mpga</extension>\n        <extension>mp2</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"wav.png\" normalized=\"audio/x-wav\">\n      <mimetypes>\n        <mimetype>audio/x-wav</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wav</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"audio/x-mpegurl\">\n      <mimetypes>\n        <mimetype>audio/x-mpegurl</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>m3u</extension>\n      </extensions>\n    </mimetype>\n\n\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"audio/x-aiff\">\n      <mimetypes>\n        <mimetype>audio/x-aiff</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>aif</extension>\n        <extension>aifc</extension>\n        <extension>aiff</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"audio/ogg\">\n      <mimetypes>\n        <mimetype>audio/ogg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ogg</extension>\n        <extension>oga</extension>\n        <extension>spx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"audio/flac\">\n      <mimetypes>\n        <mimetype>audio/flac</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>flac</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"application/ogg\">\n      <mimetypes>\n        <mimetype>application/ogg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ogm</extension>\n        <extension>ogx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"audio/aac\">\n      <mimetypes>\n        <mimetype>audio/aac</mimetype>\n        <mimetype>audio/aacp</mimetype>\n        <mimetype>audio/3gpp</mimetype>\n        <mimetype>audio/3gpp2</mimetype>\n        <mimetype>audio/mp4</mimetype>\n        <mimetype>audio/MP4A-LATM</mimetype>\n        <mimetype>audio/mpeg4-generic</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>aac</extension>\n        <extension>m4a</extension>\n        <extension>m4b</extension>\n        <extension>m4p</extension>\n        <extension>m4r</extension>\n        <extension>mp4</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"audio/x-matroska\">\n      <mimetypes>\n        <mimetype>audio/x-matroska</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mka</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"audio/x-ms-wax\">\n      <mimetypes>\n        <mimetype>audio/x-ms-wax</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wax</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"audio.png\" normalized=\"audio/x-ms-wma\">\n      <mimetypes>\n        <mimetype>audio/x-ms-wma</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wma</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/mpeg\">\n      <mimetypes>\n        <mimetype>video/mpeg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mpa</extension>\n        <extension>mpe</extension>\n        <extension>mpeg</extension>\n        <extension>mpg</extension>\n        <extension>mpv2</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/mp4\">\n      <mimetypes>\n        <mimetype>video/mp4</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mp4</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/MP2T\">\n      <mimetypes>\n        <mimetype>video/MP2T</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mts</extension>\n        <extension>m2t</extension>\n        <extension>m2ts</extension>\n        <extension>ts</extension>\n        <extension>tsa</extension>\n        <extension>tsv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/quicktime\">\n      <mimetypes>\n        <mimetype>video/quicktime</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mov</extension>\n        <extension>qt</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/ogg\">\n      <mimetypes>\n        <mimetype>video/ogg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ogv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/webm\">\n      <mimetypes>\n        <mimetype>video/webm</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>webm</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/x-matroska\">\n      <mimetypes>\n        <mimetype>video/x-matroska</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mkv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/x-ms-asf\">\n      <mimetypes>\n        <mimetype>video/x-ms-asf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>asf</extension>\n        <extension>asr</extension>\n        <extension>asx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/x-msvideo\">\n      <mimetypes>\n        <mimetype>video/x-msvideo</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>avi</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/fli\">\n      <mimetypes>\n        <mimetype>video/fli</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>fli</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/flv\">\n      <mimetypes>\n        <mimetype>video/flv</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>flv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/vnd.vivo\">\n      <mimetypes>\n        <mimetype>video/vnd.vivo</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>viv</extension>\n        <extension>vivo</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/x-m4v\">\n      <mimetypes>\n        <mimetype>video/x-m4v</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>m4v</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/3gpp\">\n      <mimetypes>\n        <mimetype>video/3gpp</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>3gp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/3gpp2\">\n      <mimetypes>\n        <mimetype>video/3gpp2</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>3g2</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/x-ms-wmv\">\n      <mimetypes>\n        <mimetype>video/x-ms-wmv</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wmv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/x-ms-wm\">\n      <mimetypes>\n        <mimetype>video/x-ms-wm</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wm</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/x-ms-wvx\">\n      <mimetypes>\n        <mimetype>video/x-ms-wvx</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wvx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"video/x-ms-wmx\">\n      <mimetypes>\n        <mimetype>video/x-ms-wmx</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wmx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"application/gxf\">\n      <mimetypes>\n        <mimetype>application/gxf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>gxf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"video.png\" normalized=\"application/mxf\">\n      <mimetypes>\n        <mimetype>application/mxf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mxf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"java.png\" normalized=\"application/java-archive\">\n      <mimetypes>\n        <mimetype>application/java-archive</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>jar</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype binary=\"true\" iconPath=\"ps.png\" normalized=\"application/postscript\">\n      <mimetypes>\n        <mimetype>application/postscript</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ps</extension>\n        <extension>eps</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- MIME types specific to RAW images; for more details see\n      http://www.rawsamples.ch\n      http://ufraw.sourceforge.net/wiki\n      http://dotwhat.net/\n      http://trac.imagemagick.org/browser/ImageMagick/trunk/config/mime.xml -->\n\n    <!-- Canon RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-canon-cr2\">\n      <mimetypes>\n        <mimetype>image/x-canon-cr2</mimetype>\n        <mimetype>image/CR2</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>cr2</extension>\n      </extensions>\n    </mimetype>\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-canon-crw\">\n      <mimetypes>\n        <mimetype>image/x-canon-crw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>crw</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Nikon RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-nikon-nef\">\n      <mimetypes>\n        <mimetype>image/x-nikon-nef</mimetype>\n        <mimetype>image/NEF</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>nef</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Leica RAW image files format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-adobe-dng\">\n      <mimetypes>\n        <mimetype>image/x-adobe-dng</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dng</extension>\n      </extensions>\n    </mimetype>\n    <!-- Panasonic RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-panasonic-raw\">\n      <mimetypes>\n        <mimetype>image/x-panasonic-raw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>raw</extension>\n        <extension>rw2</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Fuji RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-fuji-raf\">\n      <mimetypes>\n        <mimetype>image/x-fuji-raf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>raf</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Sigma RAW image file format. A file with the extension .X3F is associated with a RAW image file taken with a digital cameras that incorporate the Foveon X3 direct image sensor. -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-sigma-x3f\">\n      <mimetypes>\n        <mimetype>image/x-sigma-x3f</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>x3f</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Pentax RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-pentax-pef\">\n      <mimetypes>\n        <mimetype>image/x-pentax-pef</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pef</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Kodak RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-kodak-dcr\">\n      <mimetypes>\n        <mimetype>image/x-kodak-dcr</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dcr</extension>\n      </extensions>\n    </mimetype>\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-kodak-kdc\">\n      <mimetypes>\n        <mimetype>image/x-kodak-kdc</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>kdc</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Sony RAW image files format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-sony-sr2\">\n      <mimetypes>\n        <mimetype>image/x-sony-sr2</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sr2</extension>\n      </extensions>\n    </mimetype>\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-sony-arw\">\n      <mimetypes>\n        <mimetype>image/x-sony-arw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>arw</extension>\n      </extensions>\n    </mimetype>\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-sony-srf\">\n      <mimetypes>\n        <mimetype>image/x-sony-srf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>srf</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Minolta RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-minolta-mrw\">\n      <mimetypes>\n        <mimetype>image/x-minolta-mrw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mrw</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Olympus RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-olympus-orf\">\n      <mimetypes>\n        <mimetype>image/x-olympus-orf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>orf</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Epson RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-raw-epson\">\n      <mimetypes>\n        <mimetype>image/x-raw-epson</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>erf</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Portable Pixmap image file Format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-portable-pixmap\">\n      <mimetypes>\n        <mimetype>image/x-portable-pixmap</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppm</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- the bellow registered file extensions are not sure  as Image Magick does not have them registered... -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/raw\">\n      <mimetypes>\n        <mimetype>image/raw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mos</extension>\n        <extension>nrw</extension>\n        <!-- Hasselblad RAW image file format -->\n        <extension>3fr</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Mamiya RAW image file format -->\n    <mimetype binary=\"true\" iconPath=\"image.gif\" normalized=\"image/x-raw\">\n      <mimetypes>\n        <mimetype>image/x-raw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mef</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype binary=\"true\" iconPath=\"wpd.png\" normalized=\"application/wordperfect\" oleSupported=\"false\">\n     <mimetypes>\n       <mimetype>application/wordperfect</mimetype>\n     </mimetypes>\n     <extensions>\n       <extension>wpd</extension>\n     </extensions>\n   </mimetype>\n\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "Default filename extension to mimetype rules.\n",
              "documentationHtml": "<p>\nDefault filename extension to mimetype rules.</p>",
              "extensionPoint": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--extension",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.mimetype/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService/Contributions/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--extension",
              "id": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService--extension",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "name": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"extension\" target=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\">\n\n    <documentation>Default filename extension to mimetype rules.</documentation>\n\n    <fileExtension ambiguous=\"true\" mimetype=\"text/xml\" name=\"xml\"/>\n    <fileExtension ambiguous=\"false\" mimetype=\"application/visio\" name=\"vsd\"/>\n    <fileExtension ambiguous=\"false\" mimetype=\"application/visio\" name=\"vst\"/>\n    <fileExtension ambiguous=\"false\" mimetype=\"application/illustrator\" name=\"ai\"/>\n    <fileExtension ambiguous=\"false\" mimetype=\"application/vnd.apple.keynote\" name=\"key\"/>\n    <fileExtension ambiguous=\"false\" mimetype=\"application/vnd.apple.numbers\" name=\"numbers\"/>\n    <fileExtension ambiguous=\"false\" mimetype=\"application/vnd.apple.pages\" name=\"pages\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.mimetype/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
          "name": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
          "requirements": [],
          "resolutionOrder": 137,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.mimetype/org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService/Services/org.nuxeo.ecm.platform.mimetype.interfaces.MimetypeRegistry",
              "id": "org.nuxeo.ecm.platform.mimetype.interfaces.MimetypeRegistry",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 618,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component\n  name=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\">\n\n  <documentation>\n    Core mimetype registry service.\n\n    <p>Deals with mimetypes registration and mimetype detection (BETA).</p>\n\n    @version 2.0\n    @author <a href=\"mailto:ja@nuxeo.com\">Julien Anguenot</a>\n    @author <a href=\"mailto:lgodard@nuxeo.com\">Laurent Godard</a>\n    @author <a href=\"mailto:og@nuxeo.com\">Olivier Grisel</a>\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.mimetype.interfaces.MimetypeRegistry\" />\n  </service>\n\n  <extension-point name=\"mimetype\">\n\n    <documentation>\n\n      Extension allowing one to register mimetypes.\n\n      <p />\n\n      A mimetype holds meta information about a given mimetype.\n\n      <ul>\n        <li>RFC-2046 major</li>\n        <li>RFC-2046 minor</li>\n        <li>Icon</li>\n        <li>List of extensions (the first one will be used as default)</li>\n        <li>List of mimetype names</li>\n        <li>Boolean flag if a file of this mimetype is binary</li>\n        <li>\n          Boolean flag onlineEditable if a file of this mimetype is supported by\n          online Edit - default is false\n        </li>\n        <li>\n          Boolean flag oleSupported if a file of this mimetype is supported by\n          the oleExtract plugin - default is false\n        </li>\n      </ul>\n\n      For instance :\n\n      <code>\n\n        <mimetype normalized=\"application/pdf\" binary=\"true\"\n          iconPath=\"pdf.png\">\n          <mimetypes>\n            <mimetype>application/pdf</mimetype>\n          </mimetypes>\n          <extensions>\n            <extension>pdf</extension>\n          </extensions>\n        </mimetype>\n\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"extension\">\n\n    <documentation>\n\n      Extension to register filename extension to mimetype association rules.\n\n      <p />\n\n      Specify how a given extension should be used to detect a mimetype. If the\n      extension is marked 'ambiguous', a sniffing of the content of the file is\n      advised.\n\n      For instance :\n\n      <code>\n\n        <fileExtension name=\"xml\" mimetype=\"text/xml\" ambiguous=\"true\" />\n\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.mimetype.service.ExtensionDescriptor\" />\n\n  </extension-point>\n\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\"\n    point=\"mimetype\">\n\n    <documentation>\n\n      Default mimetype contributions.\n\n    </documentation>\n\n\n    <!--  text based document types -->\n\n    <mimetype normalized=\"text/plain\" binary=\"false\" iconPath=\"text.png\">\n      <mimetypes>\n        <mimetype>text/plain</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>txt</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"text/html\" binary=\"false\" iconPath=\"text.png\">\n      <mimetypes>\n        <mimetype>text/html</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>html</extension>\n        <extension>xhtml</extension>\n        <extension>shtml</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"multipart/related\" binary=\"false\" iconPath=\"text.png\">\n      <mimetypes>\n        <mimetype>multipart/related</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mhtml</extension>\n        <extension>mht</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"text/structured\" binary=\"false\" iconPath=\"text.png\">\n      <mimetypes>\n        <mimetype>text/structured</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>stx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"text/x-rst\" binary=\"false\" iconPath=\"text.png\">\n      <mimetypes>\n        <mimetype>text/x-rst</mimetype>\n        <mimetype>text/restructured</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>rst</extension>\n        <extension>rest</extension>\n        <extension>restx</extension>\n        <extension>rest</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"text/python-source\" binary=\"false\"\n      iconPath=\"py.png\">\n      <mimetypes>\n        <mimetype>text/python-source</mimetype>\n        <mimetype>text/x-python</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>py</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"text/java-source\" binary=\"false\"\n      iconPath=\"java.png\">\n      <mimetypes>\n        <mimetype>text/java-source</mimetype>\n        <mimetype>text/x-java</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>java</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"text/rtf\" binary=\"true\" iconPath=\"text.png\">\n      <mimetypes>\n        <mimetype>text/rtf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>rtf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"text/x-web-markdown\"\n     binary=\"false\" iconPath=\"text.png\">\n     <mimetypes>\n       <mimetype>text/x-web-markdown</mimetype>\n     </mimetypes>\n     <extensions>\n       <extension>md</extension>\n       <extension>mkd</extension>\n       <extension>markdown</extension>\n     </extensions>\n   </mimetype>\n\n    <mimetype normalized=\"message/rfc822\" binary=\"false\" iconPath=\"email.png\">\n      <mimetypes>\n        <mimetype>message/rfc822</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>eml</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.ms-outlook\" binary=\"true\" iconPath=\"email.png\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-outlook</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>msg</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  Microsoft Office document -->\n\n    <mimetype normalized=\"application/msword\" binary=\"true\" iconPath=\"word.png\"\n      onlineEditable=\"true\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/msword</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>doc</extension>\n        <extension>dot</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.ms-excel\" binary=\"true\"\n      iconPath=\"xls.png\" onlineEditable=\"true\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-excel</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xls</extension>\n        <extension>xlt</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.ms-powerpoint\" binary=\"true\"\n      iconPath=\"ppt.png\" onlineEditable=\"true\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-powerpoint</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppt</extension>\n        <extension>pot</extension>\n        <extension>pps</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.ms-project\" binary=\"true\"\n      iconPath=\"mpp.png\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-project</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mpp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.ms-publisher\" binary=\"true\"\n      iconPath=\"pub.png\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-publisher</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pub</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  XML based document types -->\n\n    <mimetype normalized=\"application/docbook+xml\" binary=\"true\"\n      iconPath=\"xml.png\">\n      <mimetypes>\n        <mimetype>application/docbook+xml</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>doc.xml</extension>\n        <extension>docb.xml</extension>\n        <extension>docb</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"text/xml\" binary=\"false\" iconPath=\"xml.png\">\n      <mimetypes>\n        <mimetype>text/xml</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xml</extension>\n        <extension>graffle</extension>\n        <extension>twb</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- OpenOffice.org 1.x document types -->\n\n    <mimetype normalized=\"application/vnd.sun.xml.writer\" binary=\"true\"\n      iconPath=\"sxw.png\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.writer</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sxw</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.sun.xml.writer.template\" binary=\"true\"\n      iconPath=\"stw.png\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.writer.template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>stw</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.sun.xml.impress\" binary=\"true\"\n      iconPath=\"sxi.png\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.impress</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sxi</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.sun.xml.impress.template\"\n      binary=\"true\" iconPath=\"sti.png\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.impress.template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sti</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.sun.xml.calc\" binary=\"true\"\n      iconPath=\"sxc.png\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.calc</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sxc</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.sun.xml.calc.template\" binary=\"true\"\n      iconPath=\"stc.png\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.calc.template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>stc</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.sun.xml.draw\" binary=\"true\"\n      iconPath=\"sxd.png\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.draw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sxd</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.sun.xml.draw.template\" binary=\"true\"\n      iconPath=\"std.png\" oleSupported=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.sun.xml.draw.template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>std</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  OpenOffice.org 2.x document types -->\n\n    <mimetype normalized=\"application/vnd.oasis.opendocument.spreadsheet\"\n      binary=\"true\" iconPath=\"ods.png\" oleSupported=\"true\"\n      onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.spreadsheet</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ods</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype\n      normalized=\"application/vnd.oasis.opendocument.spreadsheet-template\"\n      binary=\"true\" iconPath=\"ots.png\" oleSupported=\"true\"\n      onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.oasis.opendocument.spreadsheet-template\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ots</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.oasis.opendocument.text\" binary=\"true\"\n      iconPath=\"odt.png\" oleSupported=\"true\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.text</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>odt</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.oasis.opendocument.text-template\"\n      binary=\"true\" iconPath=\"ott.png\" oleSupported=\"true\"\n      onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.text-template</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ott</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.oasis.opendocument.presentation\"\n      binary=\"true\" iconPath=\"odp.png\" oleSupported=\"true\"\n      onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.presentation</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>odp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype\n      normalized=\"application/vnd.oasis.opendocument.presentation-template\"\n      binary=\"true\" iconPath=\"otp.png\" oleSupported=\"true\"\n      onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.oasis.opendocument.presentation-template\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>otp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.oasis.opendocument.graphics\"\n      binary=\"true\" iconPath=\"odg.png\" oleSupported=\"true\"\n      onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.oasis.opendocument.graphics</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>odg</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.oasis.opendocument.graphics-template\"\n      binary=\"true\" iconPath=\"otg.png\" oleSupported=\"true\"\n      onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.oasis.opendocument.graphics-template\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>otg</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  Adobe PDF -->\n    <mimetype normalized=\"application/pdf\" binary=\"true\" iconPath=\"pdf.png\">\n      <mimetypes>\n        <mimetype>application/pdf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pdf</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  binaries -->\n\n    <mimetype normalized=\"application/octet-stream\" binary=\"true\"\n      iconPath=\"application.png\">\n      <mimetypes>\n        <mimetype>application/octet-stream</mimetype>\n      </mimetypes>\n      <extensions />\n    </mimetype>\n\n    <!--  Archives -->\n    <mimetype normalized=\"application/x-gtar\" binary=\"true\"\n      iconPath=\"tar.png\">\n      <mimetypes>\n        <mimetype>application/x-gtar</mimetype>\n      </mimetypes>\n      <extensions />\n    </mimetype>\n\n\n    <!-- Ms Office 2007 -->\n\n    <mimetype normalized=\"application/vnd.ms-word.document.macroEnabled.12\"\n      binary=\"true\" iconPath=\"docx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-word.document.macroEnabled.12</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>docm</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype\n      normalized=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n      binary=\"true\" iconPath=\"docx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.wordprocessingml.document\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>docx</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype normalized=\"application/vnd.ms-word.template.macroEnabled.12\"\n      binary=\"true\" iconPath=\"docx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-word.template.macroEnabled.12</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dotm</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype\n      normalized=\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\"\n      binary=\"true\" iconPath=\"docx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.wordprocessingml.template\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dotx</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype\n      normalized=\"application/vnd.ms-powerpoint.slideshow.macroEnabled.12\"\n      binary=\"true\" iconPath=\"pptx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.ms-powerpoint.slideshow.macroEnabled.12\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppsm</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype\n      normalized=\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\"\n      binary=\"true\" iconPath=\"pptx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.presentationml.slideshow\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppsx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype\n      normalized=\"application/vnd.ms-powerpoint.presentation.macroEnabled.12\"\n      binary=\"true\" iconPath=\"pptx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.ms-powerpoint.presentation.macroEnabled.12\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pptm</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype\n      normalized=\"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n      binary=\"true\" iconPath=\"pptx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.presentationml.presentation\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pptx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.ms-excel.sheet.binary.macroEnabled.12\"\n      binary=\"true\" iconPath=\"xlsx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.ms-excel.sheet.binary.macroEnabled.12\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xlsb</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/vnd.ms-excel.sheet.macroEnabled.12\"\n      binary=\"true\" iconPath=\"xlsx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-excel.sheet.macroEnabled.12</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xlsm</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype\n      normalized=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n      binary=\"true\" iconPath=\"xlsx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>\n          application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n        </mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xlsx</extension>\n      </extensions>\n    </mimetype>\n\n    <!--  element of office 2007, but which one ??? -->\n    <mimetype normalized=\"application/vnd.ms-xpsdocument\" binary=\"true\"\n      iconPath=\"xlsx.png\" onlineEditable=\"true\">\n      <mimetypes>\n        <mimetype>application/vnd.ms-xpsdocument</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>xps</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/zip\" binary=\"true\" iconPath=\"zip.png\">\n      <mimetypes>\n        <mimetype>application/zip</mimetype>\n        <mimetype>application/x-zip-compressed</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>zip</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- images -->\n    <mimetype normalized=\"image/gif\" binary=\"true\" iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/gif</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>gif</extension>\n      </extensions>\n    </mimetype>\n    <mimetype normalized=\"image/png\" binary=\"true\" iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/png</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>png</extension>\n      </extensions>\n    </mimetype>\n    <mimetype normalized=\"image/jpeg\" binary=\"true\" iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/jpeg</mimetype>\n        <mimetype>image/pjpeg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>jpg</extension>\n        <extension>jpeg</extension>\n      </extensions>\n    </mimetype>\n    <mimetype normalized=\"image/x-portable-bitmap\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-portable-bitmap</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pbm</extension>\n      </extensions>\n    </mimetype>\n    <mimetype normalized=\"image/bmp\" binary=\"true\" iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-bitmap</mimetype>\n        <mimetype>image/bmp</mimetype>\n\n      </mimetypes>\n      <extensions>\n        <extension>bmp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"image/x-portable-graymap\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-portable-graymap</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppm</extension>\n      </extensions>\n    </mimetype>\n    <mimetype normalized=\"image/g3fax\" binary=\"true\" iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/g3fax</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>fax</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"image/tiff\" binary=\"true\" iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/tiff</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>tiff</extension>\n        <extension>tif</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"image/svg+xml\" binary=\"false\" iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/svg+xml</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>svg</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"image/x-dpx\" binary=\"true\" iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-dpx</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dpx</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Adobe Illustrator -->\n   <mimetype normalized=\"application/illustrator\" binary=\"false\" iconPath=\"image.gif\">\n     <mimetypes>\n       <mimetype>application/illustrator</mimetype>\n     </mimetypes>\n     <extensions>\n       <extension>ai</extension>\n     </extensions>\n   </mimetype>\n\n   <!-- Adobe Photoshop -->\n   <mimetype normalized=\"application/photoshop\" binary=\"false\" iconPath=\"image.gif\">\n     <mimetypes>\n       <mimetype>application/photoshop</mimetype>\n       <mimetype>application/x-photoshop</mimetype>\n       <mimetype>image/photoshop</mimetype>\n       <mimetype>image/x-photoshop</mimetype>\n       <mimetype>image/psd</mimetype>\n       <mimetype>image/x-psd</mimetype>\n       <mimetype>image/vnd.adobe.photoshop</mimetype>\n       <mimetype>application/psd</mimetype>\n       <mimetype>zz-application</mimetype>\n       <mimetype>zz-winassoc-psd</mimetype>\n       <mimetype>application/vnd.3gpp.pic-bw-small</mimetype> <!-- psb files -->\n     </mimetypes>\n     <extensions>\n       <extension>psd</extension>\n       <extension>psb</extension>\n     </extensions>\n   </mimetype>\n\n    <mimetype normalized=\"application/x-emf\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>application/x-emf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>emf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/x-vclmtf\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>application/x-vclmtf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>vclmtf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"text/csv\" binary=\"false\" iconPath=\"csv.png\">\n      <mimetypes>\n        <mimetype>text/csv</mimetype>\n        <mimetype>text/comma-separated-values</mimetype>\n        <mimetype>application/csv</mimetype>\n        <mimetype>application/excel</mimetype>\n        <mimetype>application/vnd.ms-excel</mimetype>\n        <mimetype>application/vnd.msexcel</mimetype>\n        <mimetype>text/anytext</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>csv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/visio\" binary=\"true\"\n      iconPath=\"visio.gif\">\n      <mimetypes>\n        <mimetype>application/vnd.visio</mimetype>\n        <mimetype>application/vnd.visio2013</mimetype>\n        <mimetype>application/visio</mimetype>\n        <mimetype>application/x-visio</mimetype>\n        <mimetype>application/visio.drawing</mimetype>\n        <mimetype>application/vsd</mimetype>\n        <mimetype>application/x-vsd</mimetype>\n        <mimetype>image/x-vsd</mimetype>\n        <mimetype>zz-application/zz-winassoc-vsd</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>vsdx</extension>\n        <extension>vsd</extension>\n        <extension>vst</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype normalized=\"audio/mpeg\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>audio/mpeg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mp3</extension>\n        <extension>mpga</extension>\n        <extension>mp2</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"audio/x-wav\" binary=\"true\" iconPath=\"wav.png\">\n      <mimetypes>\n        <mimetype>audio/x-wav</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wav</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"audio/x-mpegurl\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>audio/x-mpegurl</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>m3u</extension>\n      </extensions>\n    </mimetype>\n\n\n\n    <mimetype normalized=\"audio/x-aiff\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>audio/x-aiff</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>aif</extension>\n        <extension>aifc</extension>\n        <extension>aiff</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"audio/ogg\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>audio/ogg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ogg</extension>\n        <extension>oga</extension>\n        <extension>spx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"audio/flac\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>audio/flac</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>flac</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/ogg\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>application/ogg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ogm</extension>\n        <extension>ogx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"audio/aac\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>audio/aac</mimetype>\n        <mimetype>audio/aacp</mimetype>\n        <mimetype>audio/3gpp</mimetype>\n        <mimetype>audio/3gpp2</mimetype>\n        <mimetype>audio/mp4</mimetype>\n        <mimetype>audio/MP4A-LATM</mimetype>\n        <mimetype>audio/mpeg4-generic</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>aac</extension>\n        <extension>m4a</extension>\n        <extension>m4b</extension>\n        <extension>m4p</extension>\n        <extension>m4r</extension>\n        <extension>mp4</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"audio/x-matroska\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>audio/x-matroska</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mka</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"audio/x-ms-wax\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>audio/x-ms-wax</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wax</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"audio/x-ms-wma\" binary=\"true\" iconPath=\"audio.png\">\n      <mimetypes>\n        <mimetype>audio/x-ms-wma</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wma</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/mpeg\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/mpeg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mpa</extension>\n        <extension>mpe</extension>\n        <extension>mpeg</extension>\n        <extension>mpg</extension>\n        <extension>mpv2</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/mp4\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/mp4</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mp4</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/MP2T\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/MP2T</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mts</extension>\n        <extension>m2t</extension>\n        <extension>m2ts</extension>\n        <extension>ts</extension>\n        <extension>tsa</extension>\n        <extension>tsv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/quicktime\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/quicktime</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mov</extension>\n        <extension>qt</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/ogg\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/ogg</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ogv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/webm\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/webm</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>webm</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/x-matroska\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/x-matroska</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mkv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/x-ms-asf\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/x-ms-asf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>asf</extension>\n        <extension>asr</extension>\n        <extension>asx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/x-msvideo\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/x-msvideo</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>avi</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/fli\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/fli</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>fli</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/flv\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/flv</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>flv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/vnd.vivo\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/vnd.vivo</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>viv</extension>\n        <extension>vivo</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/x-m4v\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/x-m4v</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>m4v</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/3gpp\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/3gpp</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>3gp</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/3gpp2\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/3gpp2</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>3g2</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/x-ms-wmv\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/x-ms-wmv</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wmv</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/x-ms-wm\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/x-ms-wm</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wm</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/x-ms-wvx\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/x-ms-wvx</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wvx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"video/x-ms-wmx\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>video/x-ms-wmx</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>wmx</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/gxf\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>application/gxf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>gxf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/mxf\" binary=\"true\" iconPath=\"video.png\">\n      <mimetypes>\n        <mimetype>application/mxf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mxf</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/java-archive\" binary=\"true\"\n      iconPath=\"java.png\">\n      <mimetypes>\n        <mimetype>application/java-archive</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>jar</extension>\n      </extensions>\n    </mimetype>\n\n\n    <mimetype normalized=\"application/postscript\" binary=\"true\"\n      iconPath=\"ps.png\">\n      <mimetypes>\n        <mimetype>application/postscript</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ps</extension>\n        <extension>eps</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- MIME types specific to RAW images; for more details see\n      http://www.rawsamples.ch\n      http://ufraw.sourceforge.net/wiki\n      http://dotwhat.net/\n      http://trac.imagemagick.org/browser/ImageMagick/trunk/config/mime.xml -->\n\n    <!-- Canon RAW image file format -->\n    <mimetype normalized=\"image/x-canon-cr2\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-canon-cr2</mimetype>\n        <mimetype>image/CR2</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>cr2</extension>\n      </extensions>\n    </mimetype>\n    <mimetype normalized=\"image/x-canon-crw\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-canon-crw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>crw</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Nikon RAW image file format -->\n    <mimetype normalized=\"image/x-nikon-nef\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-nikon-nef</mimetype>\n        <mimetype>image/NEF</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>nef</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Leica RAW image files format -->\n    <mimetype normalized=\"image/x-adobe-dng\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-adobe-dng</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dng</extension>\n      </extensions>\n    </mimetype>\n    <!-- Panasonic RAW image file format -->\n    <mimetype normalized=\"image/x-panasonic-raw\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-panasonic-raw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>raw</extension>\n        <extension>rw2</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Fuji RAW image file format -->\n    <mimetype normalized=\"image/x-fuji-raf\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-fuji-raf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>raf</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Sigma RAW image file format. A file with the extension .X3F is associated with a RAW image file taken with a digital cameras that incorporate the Foveon X3 direct image sensor. -->\n    <mimetype normalized=\"image/x-sigma-x3f\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-sigma-x3f</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>x3f</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Pentax RAW image file format -->\n    <mimetype normalized=\"image/x-pentax-pef\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-pentax-pef</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>pef</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Kodak RAW image file format -->\n    <mimetype normalized=\"image/x-kodak-dcr\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-kodak-dcr</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>dcr</extension>\n      </extensions>\n    </mimetype>\n    <mimetype normalized=\"image/x-kodak-kdc\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-kodak-kdc</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>kdc</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Sony RAW image files format -->\n    <mimetype normalized=\"image/x-sony-sr2\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-sony-sr2</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>sr2</extension>\n      </extensions>\n    </mimetype>\n    <mimetype normalized=\"image/x-sony-arw\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-sony-arw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>arw</extension>\n      </extensions>\n    </mimetype>\n    <mimetype normalized=\"image/x-sony-srf\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-sony-srf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>srf</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Minolta RAW image file format -->\n    <mimetype normalized=\"image/x-minolta-mrw\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-minolta-mrw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mrw</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Olympus RAW image file format -->\n    <mimetype normalized=\"image/x-olympus-orf\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-olympus-orf</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>orf</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Epson RAW image file format -->\n    <mimetype normalized=\"image/x-raw-epson\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-raw-epson</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>erf</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Portable Pixmap image file Format -->\n    <mimetype normalized=\"image/x-portable-pixmap\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-portable-pixmap</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>ppm</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- the bellow registered file extensions are not sure  as Image Magick does not have them registered... -->\n    <mimetype normalized=\"image/raw\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/raw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mos</extension>\n        <extension>nrw</extension>\n        <!-- Hasselblad RAW image file format -->\n        <extension>3fr</extension>\n      </extensions>\n    </mimetype>\n\n    <!-- Mamiya RAW image file format -->\n    <mimetype normalized=\"image/x-raw\" binary=\"true\"\n      iconPath=\"image.gif\">\n      <mimetypes>\n        <mimetype>image/x-raw</mimetype>\n      </mimetypes>\n      <extensions>\n        <extension>mef</extension>\n      </extensions>\n    </mimetype>\n\n    <mimetype normalized=\"application/wordperfect\"\n     binary=\"true\" iconPath=\"wpd.png\" oleSupported=\"false\">\n     <mimetypes>\n       <mimetype>application/wordperfect</mimetype>\n     </mimetypes>\n     <extensions>\n       <extension>wpd</extension>\n     </extensions>\n   </mimetype>\n\n\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.mimetype.service.MimetypeRegistryService\"\n    point=\"extension\">\n\n    <documentation>Default filename extension to mimetype rules.</documentation>\n\n    <fileExtension name=\"xml\" mimetype=\"text/xml\" ambiguous=\"true\" />\n    <fileExtension name=\"vsd\" mimetype=\"application/visio\" ambiguous=\"false\" />\n    <fileExtension name=\"vst\" mimetype=\"application/visio\" ambiguous=\"false\" />\n    <fileExtension name=\"ai\" mimetype=\"application/illustrator\" ambiguous=\"false\" />\n    <fileExtension name=\"key\" mimetype=\"application/vnd.apple.keynote\" ambiguous=\"false\" />\n    <fileExtension name=\"numbers\" mimetype=\"application/vnd.apple.numbers\" ambiguous=\"false\" />\n    <fileExtension name=\"pages\" mimetype=\"application/vnd.apple.pages\" ambiguous=\"false\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmimetype-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-mimetype-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.mimetype",
      "id": "org.nuxeo.ecm.core.mimetype",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.ecm.core.mimetype\r\nNuxeo-Component: OSGI-INF/nxmimetype-service.xml\r\n\r\n",
      "maxResolutionOrder": 137,
      "minResolutionOrder": 137,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-default-config",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.default.config",
      "components": [
        {
          "@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/org.nuxeo.ecm.default.config/org.nuxeo.ecm.directories/Contributions/org.nuxeo.ecm.directories--directories",
              "id": "org.nuxeo.ecm.directories--directories",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"template-vocabulary\" template=\"true\">\n      <schema>vocabulary</schema>\n      <idField>id</idField>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"template-xvocabulary\" template=\"true\">\n      <schema>xvocabulary</schema>\n      <idField>id</idField>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"template-l10nxvocabulary\" template=\"true\">\n      <schema>l10nxvocabulary</schema>\n      <idField>id</idField>\n    </directory>\n\n    <directory extends=\"template-directory\" name=\"template-documentsLists\" template=\"true\">\n      <schema>documentsLists</schema>\n      <idField>id</idField>\n    </directory>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.default.config/org.nuxeo.ecm.directories/Contributions/org.nuxeo.ecm.directories--directories1",
              "id": "org.nuxeo.ecm.directories--directories1",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-xvocabulary\" name=\"country\">\n      <parentDirectory>continent</parentDirectory>\n      <dataFile>directories/country.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"continent\">\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">country</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n      <dataFile>directories/continent.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-l10nxvocabulary\" name=\"l10ncoverage\">\n      <parentDirectory>l10ncoverage</parentDirectory>\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">l10ncoverage</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n      <dataFile>directories/l10ncoverage.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-xvocabulary\" name=\"subtopic\">\n      <parentDirectory>topic</parentDirectory>\n      <dataFile>directories/subtopic.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"topic\">\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">subtopic</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n      <dataFile>directories/topic.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-l10nxvocabulary\" name=\"l10nsubjects\">\n      <parentDirectory>l10nsubjects</parentDirectory>\n      <deleteConstraint class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">l10nsubjects</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n      <dataFile>directories/l10nsubjects.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"subject\">\n      <types>\n        <type>system</type>\n      </types>\n      <dataFile>directories/subject.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"search_operators\">\n      <types>\n        <type>system</type>\n      </types>\n      <dataFile>directories/search_operators.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-documentsLists\" name=\"documentsLists\">\n      <types>\n        <type>system</type>\n      </types>\n      <permissions>\n        <permission name=\"Write\">\n          <group>Everyone</group>\n        </permission>\n      </permissions>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"language\">\n      <dataFile>directories/language.csv</dataFile>\n    </directory>\n\n    <directory extends=\"template-vocabulary\" name=\"nature\">\n      <dataFile>directories/nature.csv</dataFile>\n    </directory>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.default.config/org.nuxeo.ecm.directories",
          "name": "org.nuxeo.ecm.directories",
          "requirements": [],
          "resolutionOrder": 290,
          "services": [],
          "startOrder": 173,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.directories\">\n\n  <!-- template definitions for vocabularies -->\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"template-vocabulary\" template=\"true\" extends=\"template-directory\">\n      <schema>vocabulary</schema>\n      <idField>id</idField>\n    </directory>\n\n    <directory name=\"template-xvocabulary\" template=\"true\" extends=\"template-directory\">\n      <schema>xvocabulary</schema>\n      <idField>id</idField>\n    </directory>\n\n    <directory name=\"template-l10nxvocabulary\" template=\"true\" extends=\"template-directory\">\n      <schema>l10nxvocabulary</schema>\n      <idField>id</idField>\n    </directory>\n\n    <directory name=\"template-documentsLists\" template=\"true\" extends=\"template-directory\">\n      <schema>documentsLists</schema>\n      <idField>id</idField>\n    </directory>\n\n  </extension>\n\n  <!-- vocabulary definitions -->\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"country\" extends=\"template-xvocabulary\">\n      <parentDirectory>continent</parentDirectory>\n      <dataFile>directories/country.csv</dataFile>\n    </directory>\n\n    <directory name=\"continent\" extends=\"template-vocabulary\">\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">country</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n      <dataFile>directories/continent.csv</dataFile>\n    </directory>\n\n    <directory name=\"l10ncoverage\" extends=\"template-l10nxvocabulary\">\n      <parentDirectory>l10ncoverage</parentDirectory>\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">l10ncoverage</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n      <dataFile>directories/l10ncoverage.csv</dataFile>\n    </directory>\n\n    <directory name=\"subtopic\" extends=\"template-xvocabulary\">\n      <parentDirectory>topic</parentDirectory>\n      <dataFile>directories/subtopic.csv</dataFile>\n    </directory>\n\n    <directory name=\"topic\" extends=\"template-vocabulary\">\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">subtopic</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n      <dataFile>directories/topic.csv</dataFile>\n    </directory>\n\n    <directory name=\"l10nsubjects\" extends=\"template-l10nxvocabulary\">\n      <parentDirectory>l10nsubjects</parentDirectory>\n      <deleteConstraint\n        class=\"org.nuxeo.ecm.directory.HierarchicalDirectoryDeleteConstraint\">\n        <property name=\"targetDirectory\">l10nsubjects</property>\n        <property name=\"targetDirectoryField\">parent</property>\n      </deleteConstraint>\n      <dataFile>directories/l10nsubjects.csv</dataFile>\n    </directory>\n\n    <directory name=\"subject\" extends=\"template-vocabulary\">\n      <types>\n        <type>system</type>\n      </types>\n      <dataFile>directories/subject.csv</dataFile>\n    </directory>\n\n    <directory name=\"search_operators\" extends=\"template-vocabulary\">\n      <types>\n        <type>system</type>\n      </types>\n      <dataFile>directories/search_operators.csv</dataFile>\n    </directory>\n\n    <directory name=\"documentsLists\" extends=\"template-documentsLists\">\n      <types>\n        <type>system</type>\n      </types>\n      <permissions>\n        <permission name=\"Write\">\n          <group>Everyone</group>\n        </permission>\n      </permissions>\n    </directory>\n\n    <directory name=\"language\" extends=\"template-vocabulary\">\n      <dataFile>directories/language.csv</dataFile>\n    </directory>\n\n    <directory name=\"nature\" extends=\"template-vocabulary\">\n      <dataFile>directories/nature.csv</dataFile>\n    </directory>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxdirectories-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/org.nuxeo.ecm.default.config/org.nuxeo.ecm.document.pageproviders/Contributions/org.nuxeo.ecm.document.pageproviders--providers",
              "id": "org.nuxeo.ecm.document.pageproviders--providers",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"document_content\">\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:parentId = ? AND ecm:isVersion = 0 AND\n          ecm:mixinType != 'HiddenInNavigation' AND ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"advanced_document_content\">\n      <trackUsage>true</trackUsage>\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <searchDocumentType>AdvancedContent</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation'\n        </fixedPart>\n        <predicate operator=\"FULLTEXT\" parameter=\"dc:title\">\n          <field name=\"title\" schema=\"advanced_content\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"ecm:parentId\">\n          <field name=\"ecm_parentId\" schema=\"advanced_content\"/>\n        </predicate>\n        <predicate operator=\"=\" parameter=\"ecm:isTrashed\">\n          <field name=\"ecm_trashed\" schema=\"advanced_content\"/>\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"dc_last_contributor_agg\" parameter=\"dc:lastContributor\" type=\"terms\">\n          <field name=\"dc_last_contributor_agg\" schema=\"advanced_content\"/>\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_modified_agg\" parameter=\"dc:modified\" type=\"date_range\">\n          <field name=\"dc_modified_agg\" schema=\"advanced_content\"/>\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      <sort ascending=\"false\" column=\"dc:modified\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"document_trash_content\">\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:parentId = ? AND ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isTrashed = 1\n        </fixedPart>\n      </whereClause>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"section_content\">\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:parentId = ? AND ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"orderable_document_content\">\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:parentId = ? AND ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort ascending=\"true\" column=\"ecm:pos\"/>\n      <sortable>false</sortable>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.default.config/org.nuxeo.ecm.document.pageproviders",
          "name": "org.nuxeo.ecm.document.pageproviders",
          "requirements": [],
          "resolutionOrder": 293,
          "services": [],
          "startOrder": 184,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.document.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n\n    <coreQueryPageProvider name=\"document_content\">\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:parentId = ? AND ecm:isVersion = 0 AND\n          ecm:mixinType != 'HiddenInNavigation' AND ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"advanced_document_content\">\n      <trackUsage>true</trackUsage>\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <searchDocumentType>AdvancedContent</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation'\n        </fixedPart>\n        <predicate parameter=\"dc:title\" operator=\"FULLTEXT\">\n          <field schema=\"advanced_content\" name=\"title\" />\n        </predicate>\n        <predicate parameter=\"ecm:parentId\" operator=\"=\">\n          <field schema=\"advanced_content\" name=\"ecm_parentId\" />\n        </predicate>\n        <predicate parameter=\"ecm:isTrashed\" operator=\"=\">\n          <field schema=\"advanced_content\" name=\"ecm_trashed\" />\n        </predicate>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"dc_last_contributor_agg\" type=\"terms\" parameter=\"dc:lastContributor\">\n          <field schema=\"advanced_content\" name=\"dc_last_contributor_agg\" />\n          <properties>\n            <property name=\"size\">10</property>\n          </properties>\n        </aggregate>\n        <aggregate id=\"dc_modified_agg\" type=\"date_range\" parameter=\"dc:modified\">\n          <field schema=\"advanced_content\" 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      <sort column=\"dc:modified\" ascending=\"false\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"document_trash_content\">\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:parentId = ? AND ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isTrashed = 1\n        </fixedPart>\n      </whereClause>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"section_content\">\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:parentId = ? AND ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"orderable_document_content\">\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:parentId = ? AND ecm:isVersion = 0 AND\n          ecm:mixinType !=\n          'HiddenInNavigation' AND ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <sort column=\"ecm:pos\" ascending=\"true\" />\n      <sortable>false</sortable>\n      <pageSize>20</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/document-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      This contribution declares page providers used by UI components.\n\n      The page provider 'tree_children' is used to list children in the tree\n      navigation.\n\n      Note the \"ecm:isProxy = 0\" predicate optimization that is required to\n      simplify greatly the request performed by the tree manager when browsing\n      on folders with a lot of files when using the Visible SQL Storage.\n\n      The page provider 'default_document_suggestion' is used by default by the\n      component performing document suggestions.\n    \n",
              "documentationHtml": "<p>\nThis contribution declares page providers used by UI components.\n</p><p>\nThe page provider &#39;tree_children&#39; is used to list children in the tree\nnavigation.\n</p><p>\nNote the &#34;ecm:isProxy &#61; 0&#34; predicate optimization that is required to\nsimplify greatly the request performed by the tree manager when browsing\non folders with a lot of files when using the Visible SQL Storage.\n</p><p>\nThe page provider &#39;default_document_suggestion&#39; is used by default by the\ncomponent performing document suggestions.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.default.config/org.nuxeo.ecm.webapp.pageproviders.contrib/Contributions/org.nuxeo.ecm.webapp.pageproviders.contrib--providers",
              "id": "org.nuxeo.ecm.webapp.pageproviders.contrib--providers",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <documentation>\n      This contribution declares page providers used by UI components.\n\n      The page provider 'tree_children' is used to list children in the tree\n      navigation.\n\n      Note the \"ecm:isProxy = 0\" predicate optimization that is required to\n      simplify greatly the request performed by the tree manager when browsing\n      on folders with a lot of files when using the Visible SQL Storage.\n\n      The page provider 'default_document_suggestion' is used by default by the\n      component performing document suggestions.\n    </documentation>\n\n    <coreQueryPageProvider name=\"tree_children\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:parentId = ? AND ecm:isProxy = 0 AND\n        ecm:mixinType = 'Folderish' AND ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"ecm:pos\"/>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\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 ecm:fulltext LIKE '?*' AND ecm:mixinType !=\n        'HiddenInNavigation' AND ecm:isVersion = 0 AND\n        ecm:isTrashed = 0\n      </pattern>\n      <!-- sort column=\"dc:title\" ascending=\"true\" / sort by fulltext relevance -->\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"domain_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:path STARTSWITH ?\n        AND ecm:mixinType != 'Folderish' AND ecm:mixinType !=\n        'SystemDocument' AND ecm:mixinType !=\n        'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isProxy = 0\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"false\" column=\"dc:modified\"/>\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.default.config/org.nuxeo.ecm.webapp.pageproviders.contrib",
          "name": "org.nuxeo.ecm.webapp.pageproviders.contrib",
          "requirements": [],
          "resolutionOrder": 294,
          "services": [],
          "startOrder": 467,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.webapp.pageproviders.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n\n    <documentation>\n      This contribution declares page providers used by UI components.\n\n      The page provider 'tree_children' is used to list children in the tree\n      navigation.\n\n      Note the \"ecm:isProxy = 0\" predicate optimization that is required to\n      simplify greatly the request performed by the tree manager when browsing\n      on folders with a lot of files when using the Visible SQL Storage.\n\n      The page provider 'default_document_suggestion' is used by default by the\n      component performing document suggestions.\n    </documentation>\n\n    <coreQueryPageProvider name=\"tree_children\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:parentId = ? AND ecm:isProxy = 0 AND\n        ecm:mixinType = 'Folderish' AND ecm:mixinType != 'HiddenInNavigation'\n        AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"ecm:pos\" ascending=\"true\" />\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\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 ecm:fulltext LIKE '?*' AND ecm:mixinType !=\n        'HiddenInNavigation' AND ecm:isVersion = 0 AND\n        ecm:isTrashed = 0\n      </pattern>\n      <!-- sort column=\"dc:title\" ascending=\"true\" / sort by fulltext relevance -->\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"domain_documents\">\n      <property name=\"maxResults\">DEFAULT_NAVIGATION_RESULTS</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:path STARTSWITH ?\n        AND ecm:mixinType != 'Folderish' AND ecm:mixinType !=\n        'SystemDocument' AND ecm:mixinType !=\n        'HiddenInNavigation' AND ecm:isVersion = 0 AND ecm:isProxy = 0\n        AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:modified\" ascending=\"false\" />\n      <pageSize>5</pageSize>\n    </coreQueryPageProvider>\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.cache.CacheService--caches",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.default.config/org.nuxeo.ecm.core.default.caches/Contributions/org.nuxeo.ecm.core.default.caches--caches",
              "id": "org.nuxeo.ecm.core.default.caches--caches",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"caches\" target=\"org.nuxeo.ecm.core.cache.CacheService\">\n\n    <cache name=\"cache-vocabulary\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n    </cache>\n\n    <cache name=\"cache-xvocabulary\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n    </cache>\n\n    <cache name=\"cache-l10nxvocabulary\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n    </cache>\n\n    <cache name=\"cache-documentsLists\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n    </cache>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.default.config/org.nuxeo.ecm.core.default.caches",
          "name": "org.nuxeo.ecm.core.default.caches",
          "requirements": [],
          "resolutionOrder": 295,
          "services": [],
          "startOrder": 114,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.default.caches\">\n\n  <extension target=\"org.nuxeo.ecm.core.cache.CacheService\"\n             point=\"caches\">\n\n    <cache name=\"cache-vocabulary\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n    </cache>\n\n    <cache name=\"cache-xvocabulary\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n    </cache>\n\n    <cache name=\"cache-l10nxvocabulary\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n    </cache>\n\n    <cache name=\"cache-documentsLists\">\n      <ttl>60</ttl><!-- minutes -->\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">10</option>\n    </cache>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/default-cache-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-default-config-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.default.config",
      "id": "org.nuxeo.ecm.default.config",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: NuxeoWeb\r\nBundle-SymbolicName: org.nuxeo.ecm.default.config\r\nBundle-Localization: plugin\r\nBundle-Vendor: Nuxeo\r\nBundle-Category: web,stateful\r\nNuxeo-Component: OSGI-INF/nxdirectories-contrib.xml, OSGI-INF/document-p\r\n ageprovider-contrib.xml, OSGI-INF/pageprovider-contrib.xml, OSGI-INF/de\r\n fault-cache-contrib.xml\r\nRequire-Bundle: org.nuxeo.ecm.directory.api, org.nuxeo.ecm.platform.jbpm\r\n .core\r\n\r\n",
      "maxResolutionOrder": 295,
      "minResolutionOrder": 290,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.directory.api",
        "org.nuxeo.ecm.platform.jbpm.core"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-jtajca",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.jtajca",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.jtajca.JtaActivator",
          "declaredStartOrder": null,
          "documentation": "\n  Activates JTA/JCA. By default activation is disabled. To enable it define the following runtime property:\n\n  NuxeoContainer.autoactivation=true\n\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nActivates JTA/JCA. By default activation is disabled. To enable it define the following runtime property:\n</p><p>\nNuxeoContainer.autoactivation&#61;true\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.jtajca/org.nuxeo.runtime.jtajca.JtaActivator",
          "name": "org.nuxeo.runtime.jtajca.JtaActivator",
          "requirements": [],
          "resolutionOrder": 571,
          "services": [],
          "startOrder": 668,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.runtime.jtajca.JtaActivator\" version=\"1.0\">\n  <documentation>\n  Activates JTA/JCA. By default activation is disabled. To enable it define the following runtime property:\n\n  NuxeoContainer.autoactivation=true\n\n  @author Bogdan Stefanescu (bs@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.jtajca.JtaActivator\"/>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/JtaActivator.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-jtajca-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.jtajca",
      "id": "org.nuxeo.runtime.jtajca",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.runtime.jtajca\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Name: Nuxeo Runtime JTA/JCA Implementation\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nEclipse-BuddyPolicy: registered\r\nImport-Package: javax.naming,javax.naming.spi,javax.resource,javax.resou\r\n rce.spi,javax.security.auth,org.apache.commons.beanutils,org.apache.com\r\n mons.logging,org.apache.geronimo.connector.outbound,org.apache.geronimo\r\n .connector.outbound.connectionmanagerconfig,org.apache.geronimo.connect\r\n or.outbound.connectiontracking,org.apache.geronimo.transaction,org.apac\r\n he.geronimo.transaction.manager,org.nuxeo.runtime.api,org.nuxeo.runtime\r\n .transaction,org.osgi.framework\r\nBundle-SymbolicName: org.nuxeo.runtime.jtajca;singleton:=true\r\nNuxeo-Component: OSGI-INF/JtaActivator.xml\r\n\r\n",
      "maxResolutionOrder": 571,
      "minResolutionOrder": 571,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-mongodb",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.mongodb",
      "components": [],
      "fileName": "nuxeo-core-mongodb-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.mongodb",
      "id": "org.nuxeo.ecm.core.mongodb",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo MongoDB Core\r\nBundle-SymbolicName: org.nuxeo.ecm.core.mongodb;singleton:=true\r\nBundle-Version: 1.0.0\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-login-jwt",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.jwt",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.jwt.JWTServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service to manage generation and validation of JSON Web Tokens.\n    @since 10.3\n  \n",
          "documentationHtml": "<p>\nService to manage generation and validation of JSON Web Tokens.\n&#64;since 10.3\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.jwt.JWTService",
              "descriptors": [
                "org.nuxeo.ecm.jwt.JWTServiceConfigurationDescriptor"
              ],
              "documentation": "\n      Extension points to configure the JWTService.\n      <code>\n    <secret>something</secret>\n    <defaultTTL>3600</defaultTTL>\n</code>\n\n      The secret is an arbitrary string that must be shared by all servers in the cluster.\n      The defaultTTL is expressed in secondes, and defaults to 3600 (1 hour).\n    \n",
              "documentationHtml": "<p>\nExtension points to configure the JWTService.\n</p><p></p><pre><code>    &lt;secret&gt;something&lt;/secret&gt;\n    &lt;defaultTTL&gt;3600&lt;/defaultTTL&gt;\n</code></pre><p>\nThe secret is an arbitrary string that must be shared by all servers in the cluster.\nThe defaultTTL is expressed in secondes, and defaults to 3600 (1 hour).\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.jwt/org.nuxeo.ecm.jwt.JWTService/ExtensionPoints/org.nuxeo.ecm.jwt.JWTService--configuration",
              "id": "org.nuxeo.ecm.jwt.JWTService--configuration",
              "label": "configuration (org.nuxeo.ecm.jwt.JWTService)",
              "name": "configuration",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.jwt/org.nuxeo.ecm.jwt.JWTService",
          "name": "org.nuxeo.ecm.jwt.JWTService",
          "requirements": [],
          "resolutionOrder": 337,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.jwt.JWTService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.jwt/org.nuxeo.ecm.jwt.JWTService/Services/org.nuxeo.ecm.jwt.JWTService",
              "id": "org.nuxeo.ecm.jwt.JWTService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 601,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.jwt.JWTService\">\n\n  <documentation>\n    Service to manage generation and validation of JSON Web Tokens.\n    @since 10.3\n  </documentation>\n  <implementation class=\"org.nuxeo.ecm.jwt.JWTServiceImpl\"/>\n  <service>\n    <provide interface=\"org.nuxeo.ecm.jwt.JWTService\"/>\n  </service>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Extension points to configure the JWTService.\n      <code>\n        <secret>********</secret>\n        <defaultTTL>3600</defaultTTL>\n      </code>\n      The secret is an arbitrary string that must be shared by all servers in the cluster.\n      The defaultTTL is expressed in secondes, and defaults to 3600 (1 hour).\n    </documentation>\n    <object class=\"org.nuxeo.ecm.jwt.JWTServiceConfigurationDescriptor\"/>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/jwt-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.ui.web.auth.service.PluggableAuthenticationService--authenticators",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.jwt/org.nuxeo.ecm.jwt.auth/Contributions/org.nuxeo.ecm.jwt.auth--authenticators",
              "id": "org.nuxeo.ecm.jwt.auth--authenticators",
              "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": "2025.7.12",
              "xml": "<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <authenticationPlugin class=\"org.nuxeo.ecm.jwt.JWTAuthenticator\" enabled=\"true\" name=\"JWT_AUTH\">\n    </authenticationPlugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.jwt/org.nuxeo.ecm.jwt.auth",
          "name": "org.nuxeo.ecm.jwt.auth",
          "requirements": [],
          "resolutionOrder": 338,
          "services": [],
          "startOrder": 188,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.jwt.auth\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"authenticators\">\n    <authenticationPlugin name=\"JWT_AUTH\" enabled=\"true\" class=\"org.nuxeo.ecm.jwt.JWTAuthenticator\">\n    </authenticationPlugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/jwt-auth-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-login-jwt-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.jwt",
      "id": "org.nuxeo.ecm.jwt",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo JWT Authentication Plugin\r\nBundle-SymbolicName: org.nuxeo.ecm.jwt;singleton:=true\r\nNuxeo-Component: OSGI-INF/jwt-service.xml,OSGI-INF/jwt-auth-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 338,
      "minResolutionOrder": 337,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-permissions",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.permissions",
      "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/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.directories/Contributions/org.nuxeo.ecm.permissions.directories--schema",
              "id": "org.nuxeo.ecm.permissions.directories--schema",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"aceinfo\" prefix=\"aceinfo\" src=\"schemas/aceinfo.xsd\"/>\n\n    <property indexOrder=\"ascending\" name=\"id\" schema=\"aceinfo\"/>\n    <property indexOrder=\"ascending\" name=\"docId\" schema=\"aceinfo\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.directories/Contributions/org.nuxeo.ecm.permissions.directories--directories",
              "id": "org.nuxeo.ecm.permissions.directories--directories",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"aceinfo\">\n      <schema>aceinfo</schema>\n      <idField>id</idField>\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\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.directories",
          "name": "org.nuxeo.ecm.permissions.directories",
          "requirements": [],
          "resolutionOrder": 222,
          "services": [],
          "startOrder": 215,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.permissions.directories\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"aceinfo\" src=\"schemas/aceinfo.xsd\" prefix=\"aceinfo\" />\n\n    <property schema=\"aceinfo\" name=\"id\" indexOrder=\"ascending\" />\n    <property schema=\"aceinfo\" name=\"docId\" indexOrder=\"ascending\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"aceinfo\" extends=\"template-directory\">\n      <schema>aceinfo</schema>\n      <idField>id</idField>\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\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.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.listeners/Contributions/org.nuxeo.ecm.permissions.listeners--listener",
              "id": "org.nuxeo.ecm.permissions.listeners--listener",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.permissions.PermissionListener\" name=\"permissionListener\" postCommit=\"false\">\n      <event>documentSecurityUpdated</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.permissions.PermissionGarbageCollectorListener\" enabled=\"false\" name=\"permissionGarbageCollectorListener\" postCommit=\"true\">\n      <event>documentRemoved</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.permissions.PermissionGrantedNotificationListener\" name=\"permissionNotificationListener\" postCommit=\"true\">\n      <event>permissionNotification</event>\n    </listener>\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.permissions.ACEStatusUpdatedListener\" name=\"aceStatusUpdatedListener\" postCommit=\"true\">\n      <event>ACEStatusUpdated</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.listeners",
          "name": "org.nuxeo.ecm.permissions.listeners",
          "requirements": [],
          "resolutionOrder": 223,
          "services": [],
          "startOrder": 216,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.permissions.listeners\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n\n    <listener name=\"permissionListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.permissions.PermissionListener\">\n      <event>documentSecurityUpdated</event>\n    </listener>\n\n    <listener name=\"permissionGarbageCollectorListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.permissions.PermissionGarbageCollectorListener\"\n      enabled=\"${nuxeo.aceinfo.gc.enabled:=false}\">\n      <event>documentRemoved</event>\n    </listener>\n\n    <listener name=\"permissionNotificationListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.permissions.PermissionGrantedNotificationListener\">\n      <event>permissionNotification</event>\n    </listener>\n\n    <listener name=\"aceStatusUpdatedListener\" async=\"true\" postCommit=\"true\"\n      class=\"org.nuxeo.ecm.permissions.ACEStatusUpdatedListener\">\n      <event>ACEStatusUpdated</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.platform.ec.notification.service.NotificationService--templates",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.notifications/Contributions/org.nuxeo.ecm.permissions.notifications--templates",
              "id": "org.nuxeo.ecm.permissions.notifications--templates",
              "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": "2025.7.12",
              "xml": "<extension point=\"templates\" target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\">\n\n    <template name=\"aceGranted\" src=\"templates/aceGranted.ftl\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.notifications",
          "name": "org.nuxeo.ecm.permissions.notifications",
          "requirements": [],
          "resolutionOrder": 224,
          "services": [],
          "startOrder": 218,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.permissions.notifications\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ec.notification.service.NotificationService\" point=\"templates\">\n\n    <template name=\"aceGranted\" src=\"templates/aceGranted.ftl\" />\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/notifications-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/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.marshallers/Contributions/org.nuxeo.ecm.permissions.marshallers--marshallers",
              "id": "org.nuxeo.ecm.permissions.marshallers--marshallers",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.permissions.ACLJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.marshallers",
          "name": "org.nuxeo.ecm.permissions.marshallers",
          "requirements": [],
          "resolutionOrder": 225,
          "services": [],
          "startOrder": 217,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.permissions.marshallers\">\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.permissions.ACLJsonEnricher\" enable=\"true\" />\n  </extension>\n\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.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.operations/Contributions/org.nuxeo.ecm.permissions.operations--operations",
              "id": "org.nuxeo.ecm.permissions.operations--operations",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.permissions.operations.SendNotificationEmailForPermission\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.operations",
          "name": "org.nuxeo.ecm.permissions.operations",
          "requirements": [],
          "resolutionOrder": 226,
          "services": [],
          "startOrder": 219,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.permissions.operations\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.permissions.operations.SendNotificationEmailForPermission\" />\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 permissions properties.\n\n      Here are more details about some of them:\n      <ul>\n    <li>\n        <strong>nuxeo.permissions.acl.enricher.compatibility</strong>: if true, make the ACLJsonEnricher output compatible\n          with the Nuxeo 6.0 'acls' enricher output. It duplicates the 'aces' array in the 'ace' field.\n        </li>\n</ul>\n\n\n      @since 9.1\n    \n",
              "documentationHtml": "<p>\nThis contribution is the default contribution for permissions properties.\n</p><p>\nHere are more details about some of them:\n</p><ul><li>\n<strong>nuxeo.permissions.acl.enricher.compatibility</strong>: if true, make the ACLJsonEnricher output compatible\nwith the Nuxeo 6.0 &#39;acls&#39; enricher output. It duplicates the &#39;aces&#39; array in the &#39;ace&#39; field.\n</li></ul>\n<p>\n&#64;since 9.1\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.properties/Contributions/org.nuxeo.ecm.permissions.properties--configuration",
              "id": "org.nuxeo.ecm.permissions.properties--configuration",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n\n    <documentation>\n      This contribution is the default contribution for permissions properties.\n\n      Here are more details about some of them:\n      <ul>\n        <li>\n          <strong>nuxeo.permissions.acl.enricher.compatibility</strong>: if true, make the ACLJsonEnricher output compatible\n          with the Nuxeo 6.0 'acls' enricher output. It duplicates the 'aces' array in the 'ace' field.\n        </li>\n      </ul>\n\n      @since 9.1\n    </documentation>\n\n    <property name=\"nuxeo.permissions.acl.enricher.compatibility\">false</property>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions/org.nuxeo.ecm.permissions.properties",
          "name": "org.nuxeo.ecm.permissions.properties",
          "requirements": [],
          "resolutionOrder": 227,
          "services": [],
          "startOrder": 220,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.permissions.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 permissions properties.\n\n      Here are more details about some of them:\n      <ul>\n        <li>\n          <strong>nuxeo.permissions.acl.enricher.compatibility</strong>: if true, make the ACLJsonEnricher output compatible\n          with the Nuxeo 6.0 'acls' enricher output. It duplicates the 'aces' array in the 'ace' field.\n        </li>\n      </ul>\n\n      @since 9.1\n    </documentation>\n\n    <property name=\"nuxeo.permissions.acl.enricher.compatibility\">false</property>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/properties-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-permissions-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.permissions",
      "id": "org.nuxeo.ecm.permissions",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Permissions\r\nBundle-SymbolicName: org.nuxeo.ecm.permissions;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/directories-contrib.xml,OSGI-INF/listeners-con\r\n trib.xml,OSGI-INF/notifications-contrib.xml,OSGI-INF/marshallers-contri\r\n b.xml,OSGI-INF/operations-contrib.xml,OSGI-INF/properties-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 227,
      "minResolutionOrder": 222,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-kv",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.kv",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.kv.KeyValueServiceImpl",
          "declaredStartOrder": -500,
          "documentation": "\n    The Key/Value service allows registration and access to KeyValueStores\n    to store simple values associated to keys.\n  \n",
          "documentationHtml": "<p>\nThe Key/Value service allows registration and access to KeyValueStores\nto store simple values associated to keys.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.kv.KeyValueService",
              "descriptors": [
                "org.nuxeo.runtime.kv.KeyValueStoreDescriptor"
              ],
              "documentation": "\n      Defines the implementations of the Key/Value stores:\n      <code>\n    <store class=\"org.nuxeo.runtime.kv.MemKeyValueStore\" name=\"default\"/>\n</code>\n\n      The class must implement org.nuxeo.runtime.kv.KeyValueStoreProvider.\n    \n",
              "documentationHtml": "<p>\nDefines the implementations of the Key/Value stores:\n</p><p></p><pre><code>    &lt;store class&#61;&#34;org.nuxeo.runtime.kv.MemKeyValueStore&#34; name&#61;&#34;default&#34;/&gt;\n</code></pre><p>\nThe class must implement org.nuxeo.runtime.kv.KeyValueStoreProvider.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.kv/org.nuxeo.runtime.kv.KeyValueService/ExtensionPoints/org.nuxeo.runtime.kv.KeyValueService--configuration",
              "id": "org.nuxeo.runtime.kv.KeyValueService--configuration",
              "label": "configuration (org.nuxeo.runtime.kv.KeyValueService)",
              "name": "configuration",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.kv.KeyValueService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.kv/org.nuxeo.runtime.kv.KeyValueService/Contributions/org.nuxeo.runtime.kv.KeyValueService--configuration",
              "id": "org.nuxeo.runtime.kv.KeyValueService--configuration",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.kv.KeyValueService",
                "name": "org.nuxeo.runtime.kv.KeyValueService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.kv.KeyValueService\">\n    <store class=\"org.nuxeo.runtime.kv.MemKeyValueStore\" name=\"default\">\n    </store>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.kv/org.nuxeo.runtime.kv.KeyValueService",
          "name": "org.nuxeo.runtime.kv.KeyValueService",
          "requirements": [],
          "resolutionOrder": 573,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.kv.KeyValueService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.kv/org.nuxeo.runtime.kv.KeyValueService/Services/org.nuxeo.runtime.kv.KeyValueService",
              "id": "org.nuxeo.runtime.kv.KeyValueService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 11,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.kv.KeyValueService\" version=\"1.0\">\n\n  <documentation>\n    The Key/Value service allows registration and access to KeyValueStores\n    to store simple values associated to keys.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.kv.KeyValueService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.runtime.kv.KeyValueServiceImpl\" />\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Defines the implementations of the Key/Value stores:\n      <code>\n        <store name=\"default\" class=\"org.nuxeo.runtime.kv.MemKeyValueStore\"/>\n      </code>\n      The class must implement org.nuxeo.runtime.kv.KeyValueStoreProvider.\n    </documentation>\n\n    <object class=\"org.nuxeo.runtime.kv.KeyValueStoreDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.runtime.kv.KeyValueService\" point=\"configuration\">\n    <store name=\"default\" class=\"org.nuxeo.runtime.kv.MemKeyValueStore\">\n    </store>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/keyvalue-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-kv-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.kv",
      "id": "org.nuxeo.runtime.kv",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.runtime.kv\r\nNuxeo-Component: OSGI-INF/keyvalue-service.xml\r\n\r\n",
      "maxResolutionOrder": 573,
      "minResolutionOrder": 573,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-query",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.query",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that defines the default maxPageSize to use when no\n      value is defined on the page provider contribution.\n      Value '0' means no limit.\n    \n",
              "documentationHtml": "<p>\nProperty that defines the default maxPageSize to use when no\nvalue is defined on the page provider contribution.\nValue &#39;0&#39; means no limit.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.query/org.nuxeo.ecm.core.query.properties/Contributions/org.nuxeo.ecm.core.query.properties--configuration",
              "id": "org.nuxeo.ecm.core.query.properties--configuration",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that defines the default maxPageSize to use when no\n      value is defined on the page provider contribution.\n      Value '0' means no limit.\n    </documentation>\n    <property name=\"nuxeo.pageprovider.default-max-page-size\">1000</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.query/org.nuxeo.ecm.core.query.properties",
          "name": "org.nuxeo.ecm.core.query.properties",
          "requirements": [],
          "resolutionOrder": 138,
          "services": [],
          "startOrder": 135,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.query.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that defines the default maxPageSize to use when no\n      value is defined on the page provider contribution.\n      Value '0' means no limit.\n    </documentation>\n    <property name=\"nuxeo.pageprovider.default-max-page-size\">1000</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/core-query-properties.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-query-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.query",
      "id": "org.nuxeo.ecm.core.query",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.core.query,org.nuxeo.ecm.core.query.sql,or\r\n g.nuxeo.ecm.core.query.sql.model,org.nuxeo.ecm.core.query.sql.parser\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.ecm.core.query\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nImport-Package: java_cup.runtime,org.joda.time,org.joda.time.base,org.jo\r\n da.time.format,org.nuxeo.common.collections,org.nuxeo.common.utils,org.\r\n nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm\r\n .core.api.impl\r\nBundle-SymbolicName: org.nuxeo.ecm.core.query;singleton:=true\r\nNuxeo-Component: OSGI-INF/core-query-properties.xml\r\n\r\n",
      "maxResolutionOrder": 138,
      "minResolutionOrder": 138,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-management",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.management",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.management.ServerLocatorService",
          "declaredStartOrder": null,
          "documentation": "<p>Locate or define mbeans server that will be available to the resource publisher.</p>\n",
          "documentationHtml": "<p>\n</p><p>Locate or define mbeans server that will be available to the resource publisher.</p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.management.ServerLocator",
              "descriptors": [
                "org.nuxeo.runtime.management.ServerLocatorDescriptor"
              ],
              "documentation": "<p>Here is the information that have to be provided :\n      the server <emph>domain</emph> name,\n      is this mbean server the <emph>default</emph> server,\n      is this mbean server already <emph>exist</emph>,\n      the <emph>rmiPort</emph> where this mbean server is registered into.</p>\n<p>The following line figures out the use :<br/>\n      &lt;locator domain=\"org.nuxeo\" default=\"true\" exist=\"false\" rmiPort=\"2100\"/&gt;\n      </p>\n",
              "documentationHtml": "<p>\n</p><p>Here is the information that have to be provided :\nthe server domain name,\nis this mbean server the default server,\nis this mbean server already exist,\nthe rmiPort where this mbean server is registered into.</p>\n<p>The following line figures out the use :<br />\n&lt;locator domain&#61;&#34;org.nuxeo&#34; default&#61;&#34;true&#34; exist&#61;&#34;false&#34; rmiPort&#61;&#34;2100&#34;/&gt;\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management/org.nuxeo.runtime.management.ServerLocator/ExtensionPoints/org.nuxeo.runtime.management.ServerLocator--locators",
              "id": "org.nuxeo.runtime.management.ServerLocator--locators",
              "label": "locators (org.nuxeo.runtime.management.ServerLocator)",
              "name": "locators",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management/org.nuxeo.runtime.management.ServerLocator",
          "name": "org.nuxeo.runtime.management.ServerLocator",
          "requirements": [],
          "resolutionOrder": 592,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.management.ServerLocator",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management/org.nuxeo.runtime.management.ServerLocator/Services/org.nuxeo.runtime.management.ServerLocator",
              "id": "org.nuxeo.runtime.management.ServerLocator",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 670,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.management.ServerLocator\">\n\n  <implementation class=\"org.nuxeo.runtime.management.ServerLocatorService\" />\n\n  <documentation>\n  <p>Locate or define mbeans server that will be available to the resource publisher.</p>\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.management.ServerLocator\" />\n  </service>\n\n  <extension-point name=\"locators\">\n\n    <documentation>\n      <p>Here is the information that have to be provided :\n      the server <emph>domain</emph> name,\n      is this mbean server the <emph>default</emph> server,\n      is this mbean server already <emph>exist</emph>,\n      the <emph>rmiPort</emph> where this mbean server is registered into.</p>\n      <p>The following line figures out the use :<br/>\n      &lt;locator domain=\"org.nuxeo\" default=\"true\" exist=\"false\" rmiPort=\"2100\"/&gt;\n      </p>\n    </documentation>\n\n    <object class=\"org.nuxeo.runtime.management.ServerLocatorDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/management-server-locator-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.management.ResourcePublisherService",
          "declaredStartOrder": null,
          "documentation": "\n\tManagement resource publishers, resources can be nuxeo services or factories.\n\t\n",
          "documentationHtml": "<p>\nManagement resource publishers, resources can be nuxeo services or factories.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.management.ResourcePublisher",
              "descriptors": [
                "org.nuxeo.runtime.management.ServiceDescriptor"
              ],
              "documentation": "<p>Publish a nuxeo service as a management resource.</p>\n<p>Here is the parameters description :\n        the <emph>name</emph> is used as a shortcut name,\n        the <emph>ifaceClass</emph> is used to locate the service,\n        the <emph>class</emph> is instrumented for publishing management information.</p>\n<p>The following line figures out how we have published the runtime management service itself.\n        <br/>&lt;service name=\"managementResourcePublisher\" class=\"org.nuxeo.runtime.management.ResourcePublisher\" ifaceClass=\"prg.nuxeo.runtime.management.ResourcePublisherService\"&gt;\n        </p>\n",
              "documentationHtml": "<p>\n</p><p>Publish a nuxeo service as a management resource.</p>\n<p>Here is the parameters description :\nthe name is used as a shortcut name,\nthe ifaceClass is used to locate the service,\nthe class is instrumented for publishing management information.</p>\n<p>The following line figures out how we have published the runtime management service itself.\n<br />&lt;service name&#61;&#34;managementResourcePublisher&#34; class&#61;&#34;org.nuxeo.runtime.management.ResourcePublisher&#34; ifaceClass&#61;&#34;prg.nuxeo.runtime.management.ResourcePublisherService&#34;&gt;\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management/org.nuxeo.runtime.management.ResourcePublisher/ExtensionPoints/org.nuxeo.runtime.management.ResourcePublisher--services",
              "id": "org.nuxeo.runtime.management.ResourcePublisher--services",
              "label": "services (org.nuxeo.runtime.management.ResourcePublisher)",
              "name": "services",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.management.ResourcePublisher",
              "descriptors": [
                "org.nuxeo.runtime.management.ResourceFactoryDescriptor"
              ],
              "documentation": "<p>Publish a class that will be call backed at initialization time for\n        registering resources.</p>\n<p>The following information have to be provided : the fully qualified factory <emph>class</emph> name.\n\tThe referenced class should implement <emph>ResourceFactory</emph> class.</p>\n<p>The following line figures out how to publish a factory.<br/>\n\t&lt;factory class=\"my.FactoryClass\"&gt;\n\t</p>\n",
              "documentationHtml": "<p>\n</p><p>Publish a class that will be call backed at initialization time for\nregistering resources.</p>\n<p>The following information have to be provided : the fully qualified factory class name.\nThe referenced class should implement ResourceFactory class.</p>\n<p>The following line figures out how to publish a factory.<br />\n&lt;factory class&#61;&#34;my.FactoryClass&#34;&gt;\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management/org.nuxeo.runtime.management.ResourcePublisher/ExtensionPoints/org.nuxeo.runtime.management.ResourcePublisher--factories",
              "id": "org.nuxeo.runtime.management.ResourcePublisher--factories",
              "label": "factories (org.nuxeo.runtime.management.ResourcePublisher)",
              "name": "factories",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.management.ResourcePublisher",
              "descriptors": [
                "org.nuxeo.runtime.management.ShortcutDescriptor"
              ],
              "documentation": "<p>Define a shortcuts to a published resource.</p>\n<p>Nuxeo's published resources are published by the service using that shortcut</p>\n<p>The following information have to be provided : the shortcut <emph>name</emph>, the management <emph>qualifiedName</emph> and the mbean server <emph>locator</emph> pattern.</p>\n<p>The following line figures out how using it.<br/>\n        &lt;shortcut name=\"publisher\" qualifiedName=\"org.nuxeo:name=managementResourcePublisher,type=service\" locator=\"org.nuxeo\"/&gt;\n        </p>\n",
              "documentationHtml": "<p>\n</p><p>Define a shortcuts to a published resource.</p>\n<p>Nuxeo&#39;s published resources are published by the service using that shortcut</p>\n<p>The following information have to be provided : the shortcut name, the management qualifiedName and the mbean server locator pattern.</p>\n<p>The following line figures out how using it.<br />\n&lt;shortcut name&#61;&#34;publisher&#34; qualifiedName&#61;&#34;org.nuxeo:name&#61;managementResourcePublisher,type&#61;service&#34; locator&#61;&#34;org.nuxeo&#34;/&gt;\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management/org.nuxeo.runtime.management.ResourcePublisher/ExtensionPoints/org.nuxeo.runtime.management.ResourcePublisher--shortcuts",
              "id": "org.nuxeo.runtime.management.ResourcePublisher--shortcuts",
              "label": "shortcuts (org.nuxeo.runtime.management.ResourcePublisher)",
              "name": "shortcuts",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.management.ResourcePublisher--services",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management/org.nuxeo.runtime.management.ResourcePublisher/Contributions/org.nuxeo.runtime.management.ResourcePublisher--services",
              "id": "org.nuxeo.runtime.management.ResourcePublisher--services",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.management.ResourcePublisher",
                "name": "org.nuxeo.runtime.management.ResourcePublisher",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"services\" target=\"org.nuxeo.runtime.management.ResourcePublisher\">\n    <service class=\"org.nuxeo.runtime.management.ResourcePublisher\" ifaceClass=\"prg.nuxeo.runtime.management.ResourcePublisherService\" name=\"managementResourcePublisher\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management/org.nuxeo.runtime.management.ResourcePublisher",
          "name": "org.nuxeo.runtime.management.ResourcePublisher",
          "requirements": [
            "org.nuxeo.runtime.management.ServerLocator"
          ],
          "resolutionOrder": 593,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.management.ResourcePublisher",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management/org.nuxeo.runtime.management.ResourcePublisher/Services/org.nuxeo.runtime.management.ResourcePublisher",
              "id": "org.nuxeo.runtime.management.ResourcePublisher",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 669,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.management.ResourcePublisher\">\n\n\t<documentation>\n\tManagement resource publishers, resources can be nuxeo services or factories.\n\t</documentation>\n\n  <implementation class=\"org.nuxeo.runtime.management.ResourcePublisherService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.management.ResourcePublisher\" />\n  </service>\n\n  <require>org.nuxeo.runtime.management.ServerLocator</require>\n\n  <extension-point name=\"services\">\n    <documentation>\n        <p>Publish a nuxeo service as a management resource.</p>\n        <p>Here is the parameters description :\n        the <emph>name</emph> is used as a shortcut name,\n        the <emph>ifaceClass</emph> is used to locate the service,\n        the <emph>class</emph> is instrumented for publishing management information.</p>\n        <p>The following line figures out how we have published the runtime management service itself.\n        <br/>&lt;service name=\"managementResourcePublisher\" class=\"org.nuxeo.runtime.management.ResourcePublisher\" ifaceClass=\"prg.nuxeo.runtime.management.ResourcePublisherService\"&gt;\n        </p>\n    </documentation>\n    <object class=\"org.nuxeo.runtime.management.ServiceDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"factories\">\n      <documentation>\n        <p>Publish a class that will be call backed at initialization time for\n        registering resources.</p>\n\t<p>The following information have to be provided : the fully qualified factory <emph>class</emph> name.\n\tThe referenced class should implement <emph>ResourceFactory</emph> class.</p>\n\t<p>The following line figures out how to publish a factory.<br/>\n\t&lt;factory class=\"my.FactoryClass\"&gt;\n\t</p>\n      </documentation>\n    <object class=\"org.nuxeo.runtime.management.ResourceFactoryDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"shortcuts\">\n      <documentation>\n        <p>Define a shortcuts to a published resource.</p>\n        <p>Nuxeo's published resources are published by the service using that shortcut</p>\n        <p>The following information have to be provided : the shortcut <emph>name</emph>, the management <emph>qualifiedName</emph> and the mbean server <emph>locator</emph> pattern.</p>\n        <p>The following line figures out how using it.<br/>\n        &lt;shortcut name=\"publisher\" qualifiedName=\"org.nuxeo:name=managementResourcePublisher,type=service\" locator=\"org.nuxeo\"/&gt;\n        </p>\n      </documentation>\n    <object class=\"org.nuxeo.runtime.management.ShortcutDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.runtime.management.ResourcePublisher\"\n    point=\"services\">\n    <service name=\"managementResourcePublisher\" class=\"org.nuxeo.runtime.management.ResourcePublisher\" ifaceClass=\"prg.nuxeo.runtime.management.ResourcePublisherService\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/management-resource-publisher-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-management-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.management",
      "id": "org.nuxeo.runtime.management",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.runtime.management,org.nuxeo.runtime.managemen\r\n t.inspector\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Name: org.nuxeo.runtime.management\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nNuxeo-Component: OSGI-INF/management-resource-publisher-service.xml,OSGI\r\n -INF/management-server-locator-service.xml\r\nImport-Package: javax.management,javax.management.modelmbean,javax.manag\r\n ement.remote,javax.management.remote.rmi,org.apache.commons.lang,org.ap\r\n ache.commons.logging,org.nuxeo.common.xmap.annotation,org.nuxeo.runtime\r\n .api,org.nuxeo.runtime.model,org.osgi.framework;version=\"1.4\"\r\nBundle-SymbolicName: org.nuxeo.runtime.management;singleton:=true\r\nEclipse-BuddyPolicy: dependent\r\n\r\n",
      "maxResolutionOrder": 593,
      "minResolutionOrder": 592,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.util.LocationManagerService",
          "declaredStartOrder": null,
          "documentation": "\n    This service manage the different repository locations that can be accessed via the platform.\n    This service is available via a EJB3 facade that is used to retrive the lis of available cores.\n  \n",
          "documentationHtml": "<p>\nThis service manage the different repository locations that can be accessed via the platform.\nThis service is available via a EJB3 facade that is used to retrive the lis of available cores.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.util.LocationManagerService",
              "descriptors": [
                "org.nuxeo.ecm.platform.util.LocationManagerPluginExtension"
              ],
              "documentation": "\n      This extension point can be used to register new repository locations (new core instances).\n      The location registry is typically used to build the list of available servers on the first screen of the web app.\n      The XML extension can contain a arbitrary number of location declaration if the form:\n      <locationManagerPlugin>\n    <locationEnabled>true</locationEnabled>\n    <locationName>pgsql</locationName>\n</locationManagerPlugin>\n\n\n      This extension point can be used to disable a previously declared location:\n      <locationManagerPlugin>\n    <locationEnabled>false</locationEnabled>\n    <locationName>demo</locationName>\n</locationManagerPlugin>\n\n\n\n      The locationURI tag must point on an existing core instance that was declared using :\n      <extension\n    point=\"repository\" target=\"org.nuxeo.ecm.core.repository.RepositoryService\">...</extension>\n",
              "documentationHtml": "<p>\nThis extension point can be used to register new repository locations (new core instances).\nThe location registry is typically used to build the list of available servers on the first screen of the web app.\nThe XML extension can contain a arbitrary number of location declaration if the form:\n\ntrue\npgsql\n\n</p><p>\nThis extension point can be used to disable a previously declared location:\n\nfalse\ndemo\n\n</p><p>\nThe locationURI tag must point on an existing core instance that was declared using :\n...</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.util.LocationManagerService/ExtensionPoints/org.nuxeo.ecm.platform.util.LocationManagerService--location",
              "id": "org.nuxeo.ecm.platform.util.LocationManagerService--location",
              "label": "location (org.nuxeo.ecm.platform.util.LocationManagerService)",
              "name": "location",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.util.LocationManagerService",
          "name": "org.nuxeo.ecm.platform.util.LocationManagerService",
          "requirements": [],
          "resolutionOrder": 228,
          "services": [],
          "startOrder": 648,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.util.LocationManagerService\">\n\n  <documentation>\n    This service manage the different repository locations that can be accessed via the platform.\n    This service is available via a EJB3 facade that is used to retrive the lis of available cores.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.util.LocationManagerService\" version=\"1.0.0\"/>\n\n  <extension-point name=\"location\">\n    <documentation>\n      This extension point can be used to register new repository locations (new core instances).\n      The location registry is typically used to build the list of available servers on the first screen of the web app.\n      The XML extension can contain a arbitrary number of location declaration if the form:\n      <locationManagerPlugin>\n        <locationEnabled>true</locationEnabled>\n        <locationName>pgsql</locationName>\n      </locationManagerPlugin>\n\n      This extension point can be used to disable a previously declared location:\n      <locationManagerPlugin>\n        <locationEnabled>false</locationEnabled>\n        <locationName>demo</locationName>\n      </locationManagerPlugin>\n\n      The locationURI tag must point on an existing core instance that was declared using :\n      <extension target=\"org.nuxeo.ecm.core.repository.RepositoryService\" point=\"repository\">...</extension>\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.util.LocationManagerPluginExtension\"/>\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/locationmanager-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Default server configuration for Nuxeo 5.\n    \n",
              "documentationHtml": "<p>\nDefault server configuration for Nuxeo 5.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.util.LocationManagerService--location",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform/locationManagerComponentContribute/Contributions/locationManagerComponentContribute--location",
              "id": "locationManagerComponentContribute--location",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.util.LocationManagerService",
                "name": "org.nuxeo.ecm.platform.util.LocationManagerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"location\" target=\"org.nuxeo.ecm.platform.util.LocationManagerService\">\n    <documentation>\n      Default server configuration for Nuxeo 5.\n    </documentation>\n\n    <locationManagerPlugin>\n      <locationEnabled>true</locationEnabled>\n      <locationName>default</locationName>\n    </locationManagerPlugin>\n\n    <!--  \t\t<locationManagerPlugin>\n           <locationEnabled>true</locationEnabled>\n          <locationName>pgsql</locationName>\n        </locationManagerPlugin>\n         <locationManagerPlugin>\n           <locationEnabled>true</locationEnabled>\n          <locationName>demo2</locationName>\n        </locationManagerPlugin>\n    -->\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform/locationManagerComponentContribute",
          "name": "locationManagerComponentContribute",
          "requirements": [],
          "resolutionOrder": 229,
          "services": [],
          "startOrder": 26,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"locationManagerComponentContribute\">\n\n  <extension target=\"org.nuxeo.ecm.platform.util.LocationManagerService\" point=\"location\">\n    <documentation>\n      Default server configuration for Nuxeo 5.\n    </documentation>\n\n    <locationManagerPlugin>\n      <locationEnabled>true</locationEnabled>\n      <locationName>default</locationName>\n    </locationManagerPlugin>\n\n    <!--  \t\t<locationManagerPlugin>\n           <locationEnabled>true</locationEnabled>\n          <locationName>pgsql</locationName>\n        </locationManagerPlugin>\n         <locationManagerPlugin>\n           <locationEnabled>true</locationEnabled>\n          <locationName>demo2</locationName>\n        </locationManagerPlugin>\n    -->\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/locationmanager-plugins-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform",
      "id": "org.nuxeo.ecm.platform",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.defaultPermissions,org.nuxeo.ecm.\r\n platform.ejb,org.nuxeo.ecm.platform.interfaces.ejb,org.nuxeo.ecm.platfo\r\n rm.interfaces.local,org.nuxeo.ecm.platform.util;platform=split\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: web\r\nBundle-Localization: plugin\r\nBundle-Name: NXPlatform\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nRequire-Bundle: org.nuxeo.ecm.platform.api;visibility:=reexport\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/locationmanager-contrib.xml,OSGI-INF/locationm\r\n anager-plugins-contrib.xml\r\nImport-Package: javax.ejb,org.apache.commons.logging,org.nuxeo.common.xm\r\n ap.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=s\r\n plit,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.api.security,org.nu\r\n xeo.ecm.core.api.security.impl,org.nuxeo.ecm.directory;api=split,org.nu\r\n xeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform\r\n\r\n",
      "maxResolutionOrder": 229,
      "minResolutionOrder": 228,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.api"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-schema",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.schema",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.schema.types.resolver.ObjectResolverServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    This components allows to extend XSD field definition by providing a way to resolve simple type as\n    external entity references.\n  \n",
          "documentationHtml": "<p>\nThis components allows to extend XSD field definition by providing a way to resolve simple type as\nexternal entity references.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.schema.ObjectResolverService",
              "descriptors": [
                "org.nuxeo.ecm.core.schema.types.resolver.ObjectResolverDescriptor"
              ],
              "documentation": "\n\n      Extension Point to register an external entity resolver. You must provide an XSD type derived from xs:string and\n      registered under namespace http://www.nuxeo.org/ecm/schemas/core/external-references/. The resolver class must\n      implement org.nuxeo.ecm.core.schema.types.resolver.ObjectResolver.\n      Example :\n      <resolver\n    class=\"org.mycompany.product.ProductNuxeoResolver\" type=\"productReference\"/>\n\n\n\n      By default, a constraint is added to documents about to be saved in order to validate if the property reference\n      an existing external entity. You can disable this validation by setting attribute validation to false, for instance:\n      <code\n    xmlns:ref=\"http://www.nuxeo.org/ecm/schemas/core/external-references/\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n    <xs:element name=\"lastContributor\">\n        <xs:simpleType>\n            <xs:restriction base=\"xs:string\"\n                ref:resolver=\"userManagerResolver\" ref:type=\"user\" ref:validation=\"false\"/>\n        </xs:simpleType>\n    </xs:element>\n</code>\n",
              "documentationHtml": "<p>\nExtension Point to register an external entity resolver. You must provide an XSD type derived from xs:string and\nregistered under namespace http://www.nuxeo.org/ecm/schemas/core/external-references/. The resolver class must\nimplement org.nuxeo.ecm.core.schema.types.resolver.ObjectResolver.\nExample :\n\n</p><p>\nBy default, a constraint is added to documents about to be saved in order to validate if the property reference\nan existing external entity. You can disable this validation by setting attribute validation to false, for instance:\n<code>\n\n\n\n\n\n</code></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.ObjectResolverService/ExtensionPoints/org.nuxeo.ecm.core.schema.ObjectResolverService--resolvers",
              "id": "org.nuxeo.ecm.core.schema.ObjectResolverService--resolvers",
              "label": "resolvers (org.nuxeo.ecm.core.schema.ObjectResolverService)",
              "name": "resolvers",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.ObjectResolverService",
          "name": "org.nuxeo.ecm.core.schema.ObjectResolverService",
          "requirements": [],
          "resolutionOrder": 139,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.schema.ObjectResolverService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.ObjectResolverService/Services/org.nuxeo.ecm.core.schema.types.resolver.ObjectResolverService",
              "id": "org.nuxeo.ecm.core.schema.types.resolver.ObjectResolverService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 585,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.core.schema.ObjectResolverService\" version=\"1.0.0\">\n  <documentation>\n    This components allows to extend XSD field definition by providing a way to resolve simple type as\n    external entity references.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.schema.types.resolver.ObjectResolverService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.schema.types.resolver.ObjectResolverServiceImpl\" />\n\n  <extension-point name=\"resolvers\">\n\n    <documentation>\n      Extension Point to register an external entity resolver. You must provide an XSD type derived from xs:string and\n      registered under namespace http://www.nuxeo.org/ecm/schemas/core/external-references/. The resolver class must\n      implement org.nuxeo.ecm.core.schema.types.resolver.ObjectResolver.\n      Example :\n      <resolver type=\"productReference\" class=\"org.mycompany.product.ProductNuxeoResolver\" />\n\n      By default, a constraint is added to documents about to be saved in order to validate if the property reference\n      an existing external entity. You can disable this validation by setting attribute validation to false, for instance:\n      <code xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\n            xmlns:ref=\"http://www.nuxeo.org/ecm/schemas/core/external-references/\">\n        <xs:element name=\"lastContributor\">\n          <xs:simpleType>\n            <xs:restriction base=\"xs:string\" ref:resolver=\"userManagerResolver\" ref:type=\"user\" ref:validation=\"false\" />\n          </xs:simpleType>\n        </xs:element>\n      </code>\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.schema.types.resolver.ObjectResolverDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/ObjectResolverService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.schema.TypeService",
          "declaredStartOrder": -100,
          "documentation": "\n    Manage document types and schemas.\n    Allows registrering new types defined using XSD schemas\n    @author Bogdan Stefanescu (bs@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nManage document types and schemas.\nAllows registrering new types defined using XSD schemas\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.schema.TypeService",
              "descriptors": [
                "org.nuxeo.ecm.core.schema.TypeConfiguration"
              ],
              "documentation": "\n      Type manager configuration.\n      <p/>\n\n      This contains default prefetch options and clearComplexPropertyBeforeSet options. For example:\n      <code>\n    <configuration>\n        <prefetch>common, dublincore</prefetch>\n        <clearComplexPropertyBeforeSet>true</clearComplexPropertyBeforeSet>\n        <allowVersionWriteForDublinCore>false</allowVersionWriteForDublinCore>\n    </configuration>\n</code>\n\n      Note that since 11.1, setting fields, such as dc:modified, as prefetch is DEPRECATED:\n      only schema names are supported.\n\n      Note that setting clearComplexPropertyBeforeSet to false is DEPRECATED since 9.3.\n      Note that setting allowVersionWriteForDublinCore to true is DEPRECATED since 10.3.\n    \n",
              "documentationHtml": "<p>\nType manager configuration.\n</p><p>\nThis contains default prefetch options and clearComplexPropertyBeforeSet options. For example:\n</p><p></p><pre><code>    &lt;configuration&gt;\n        &lt;prefetch&gt;common, dublincore&lt;/prefetch&gt;\n        &lt;clearComplexPropertyBeforeSet&gt;true&lt;/clearComplexPropertyBeforeSet&gt;\n        &lt;allowVersionWriteForDublinCore&gt;false&lt;/allowVersionWriteForDublinCore&gt;\n    &lt;/configuration&gt;\n</code></pre><p>\nNote that since 11.1, setting fields, such as dc:modified, as prefetch is DEPRECATED:\nonly schema names are supported.\n</p><p>\nNote that setting clearComplexPropertyBeforeSet to false is DEPRECATED since 9.3.\nNote that setting allowVersionWriteForDublinCore to true is DEPRECATED since 10.3.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.TypeService/ExtensionPoints/org.nuxeo.ecm.core.schema.TypeService--configuration",
              "id": "org.nuxeo.ecm.core.schema.TypeService--configuration",
              "label": "configuration (org.nuxeo.ecm.core.schema.TypeService)",
              "name": "configuration",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.schema.TypeService",
              "descriptors": [
                "org.nuxeo.ecm.core.schema.DocumentTypeDescriptor",
                "org.nuxeo.ecm.core.schema.FacetDescriptor",
                "org.nuxeo.ecm.core.schema.ProxiesDescriptor"
              ],
              "documentation": "\n      Extension Point to register new document types and facets.\n      <p/>\n\n      Document types may implement several schemas and extends other\n      document types. You can compare document types with java\n      classes and schemas with java interfaces. Document types may\n      also contains several facets that define a behavior.\n      <p/>\n\n      The prefetch element defines what fields are synchronously\n      indexed, and are made available in search results listings.\n      <p/>\n\n      A doctype XML extension may contain several 'doctype' elements.\n      A doctype element may look like this:\n\n      <code>\n    <doctype extends=\"Document\" name=\"File\">\n        <schema name=\"common\"/>\n        <schema name=\"file\"/>\n        <schema name=\"dublincore\"/>\n        <schema name=\"uid\"/>\n        <facet name=\"Downloadable\"/>\n        <facet name=\"Versionable\"/>\n        <prefetch>dc:title, dc:modified, uid.uid</prefetch>\n    </doctype>\n</code>\n\n\n      Document types may also specify subtypes, which are sets of other\n      document types that can be created inside the this document type\n      being defined.\n      <p/>\n\n      This configuration only applies in the UI and will not affect\n      documents created through APIs (e.g. REST, Java)\n      This can be achieved as follows:\n\n      <code>\n    <doctype extends=\"Document\" name=\"SomeFolder\">\n        <subtypes>\n            <type>File</type>\n        </subtypes>\n    </doctype>\n</code>\n\n\n      When extending a doctype, forbidden subtypes can also be specified\n      to prevent a specific type from being created.\n      <p/>\n\n      This configuration only applies in the UI and will not affect\n      documents created through APIs (e.g. REST, Java)\n\n      <code>\n    <doctype append=\"true\" name=\"SomeFolder\">\n        <subtypes>\n            <type>SomeOtherFile</type>\n        </subtypes>\n        <subtypes-forbidden>\n            <type>File</type>\n        </subtypes-forbidden>\n    </doctype>\n</code>\n\n\n      Facets are also defined by this extension point.\n      They can have zero or more schemas:\n\n      <code>\n    <facet name=\"MyFacet\" perDocumentQuery=\"false\"/>\n    <facet name=\"MyFacetWithData\">\n        <schema name=\"myschema\"/>\n        <schema name=\"otherschema\"/>\n    </facet>\n    <facet enabled=\"false\" name=\"MyOldFacet\"/>\n</code>\n\n\n      Queries using ecm:mixinType on facets marked with\n      perDocumentQuery=\"false\" will not match any document where\n      this facet has been added using DocumentModel.addFacet() and does\n      not belong to the document type (this is done for performance reasons).\n\n      Facets with enabled=false will be ignored in all document types\n      still referencing them, and will not be returned when listing available facets.\n\n      It's also possible to associate one or more schemas to all proxies:\n      <code>\n    <proxies>\n        <schema name=\"myschema\"/>\n    </proxies>\n</code>\n",
              "documentationHtml": "<p>\nExtension Point to register new document types and facets.\n</p><p>\nDocument types may implement several schemas and extends other\ndocument types. You can compare document types with java\nclasses and schemas with java interfaces. Document types may\nalso contains several facets that define a behavior.\n</p><p>\nThe prefetch element defines what fields are synchronously\nindexed, and are made available in search results listings.\n</p><p>\nA doctype XML extension may contain several &#39;doctype&#39; elements.\nA doctype element may look like this:\n</p><p>\n</p><pre><code>    &lt;doctype extends&#61;&#34;Document&#34; name&#61;&#34;File&#34;&gt;\n        &lt;schema name&#61;&#34;common&#34;/&gt;\n        &lt;schema name&#61;&#34;file&#34;/&gt;\n        &lt;schema name&#61;&#34;dublincore&#34;/&gt;\n        &lt;schema name&#61;&#34;uid&#34;/&gt;\n        &lt;facet name&#61;&#34;Downloadable&#34;/&gt;\n        &lt;facet name&#61;&#34;Versionable&#34;/&gt;\n        &lt;prefetch&gt;dc:title, dc:modified, uid.uid&lt;/prefetch&gt;\n    &lt;/doctype&gt;\n</code></pre><p>\nDocument types may also specify subtypes, which are sets of other\ndocument types that can be created inside the this document type\nbeing defined.\n</p><p>\nThis configuration only applies in the UI and will not affect\ndocuments created through APIs (e.g. REST, Java)\nThis can be achieved as follows:\n</p><p>\n</p><pre><code>    &lt;doctype extends&#61;&#34;Document&#34; name&#61;&#34;SomeFolder&#34;&gt;\n        &lt;subtypes&gt;\n            &lt;type&gt;File&lt;/type&gt;\n        &lt;/subtypes&gt;\n    &lt;/doctype&gt;\n</code></pre><p>\nWhen extending a doctype, forbidden subtypes can also be specified\nto prevent a specific type from being created.\n</p><p>\nThis configuration only applies in the UI and will not affect\ndocuments created through APIs (e.g. REST, Java)\n</p><p>\n</p><pre><code>    &lt;doctype append&#61;&#34;true&#34; name&#61;&#34;SomeFolder&#34;&gt;\n        &lt;subtypes&gt;\n            &lt;type&gt;SomeOtherFile&lt;/type&gt;\n        &lt;/subtypes&gt;\n        &lt;subtypes-forbidden&gt;\n            &lt;type&gt;File&lt;/type&gt;\n        &lt;/subtypes-forbidden&gt;\n    &lt;/doctype&gt;\n</code></pre><p>\nFacets are also defined by this extension point.\nThey can have zero or more schemas:\n</p><p>\n</p><pre><code>    &lt;facet name&#61;&#34;MyFacet&#34; perDocumentQuery&#61;&#34;false&#34;/&gt;\n    &lt;facet name&#61;&#34;MyFacetWithData&#34;&gt;\n        &lt;schema name&#61;&#34;myschema&#34;/&gt;\n        &lt;schema name&#61;&#34;otherschema&#34;/&gt;\n    &lt;/facet&gt;\n    &lt;facet enabled&#61;&#34;false&#34; name&#61;&#34;MyOldFacet&#34;/&gt;\n</code></pre><p>\nQueries using ecm:mixinType on facets marked with\nperDocumentQuery&#61;&#34;false&#34; will not match any document where\nthis facet has been added using DocumentModel.addFacet() and does\nnot belong to the document type (this is done for performance reasons).\n</p><p>\nFacets with enabled&#61;false will be ignored in all document types\nstill referencing them, and will not be returned when listing available facets.\n</p><p>\nIt&#39;s also possible to associate one or more schemas to all proxies:\n</p><p></p><pre><code>    &lt;proxies&gt;\n        &lt;schema name&#61;&#34;myschema&#34;/&gt;\n    &lt;/proxies&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.TypeService/ExtensionPoints/org.nuxeo.ecm.core.schema.TypeService--doctype",
              "id": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "label": "doctype (org.nuxeo.ecm.core.schema.TypeService)",
              "name": "doctype",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.schema.TypeService",
              "descriptors": [
                "org.nuxeo.ecm.core.schema.SchemaBindingDescriptor",
                "org.nuxeo.ecm.core.schema.PropertyDescriptor"
              ],
              "documentation": "\n      Extension Point to register new schemas.\n      <p/>\n\n      Schemas are defined using XSD files.\n      The schema extension XML may containg several 'schema' objects as\n      the following ones:\n      <code>\n    <schema name=\"common\" src=\"schema/common.xsd\"/>\n    <schema name=\"dublincore\" prefix=\"dc\" src=\"schema/dublincore.xsd\"/>\n</code>\n\n      The <i>name</i>\n attribute uniquely identify the schema, the <i>src</i>\n attribute specify\n      the path to that schema (relative to the bundle root) and the <i>prefix</i>\n is used as\n      a prefix (short name) of the schema namespace.\n      The schema namespace is the targetNamespace defined inside the XSD file\n      <p/>\n\n      Note that multiple schemas can share the same target namespace and prefix\n      <p/>\n\n      You can also create a Nuxeo Schema from a sub part of the XSD schema.\n      For that you can use the xsdRootElement attribute to indicate the complex type to use.\n      <code>\n    <schema name=\"employeeSchema\" src=\"schema/testExtension.xsd\" xsdRootElement=\"employee\"/>\n</code>\n\n      A schema can be completely disabled with:\n      <code>\n    <schema enabled=\"false\" name=\"myOldSchema\"/>\n</code>\n\n      Schemas with enabled=false will be ignored in all document types and facets\n      still referencing them, and will not be returned when listing available schemas.\n\n      Extension Point is also used to register additional property information, called property characteristic, such as:\n      <ul>\n    <li>secured: only administrators can edit it</li>\n    <li>deprecation: flag property as deprecated or removed</li>\n</ul>\n\n      XML extensions may contain any number of 'property' elements of the form:\n      <code>\n    <property name=\"creator\" schema=\"dublincore\" secured=\"true\"/>\n    <property deprecation=\"deprecated\" name=\"size\" schema=\"common\"/>\n    <property deprecation=\"removed\" fallback=\"content/name\"\n        name=\"filename\" schema=\"file\"/>\n</code>\n\n\n      Properties declared with secured attribute can only be edited by administrators.\n      <p/>\n\n      Properties declared with deprecation attribute enable deprecation mechanism inside Nuxeo Platform.\n      This generates WARN message of usage to help to remove deprecated usage.\n      <p/>\n\n      A contribution is one of these types:\n      <ul>\n    <li>deprecated: property still exists in schema definition, but it'll be removed in next version</li>\n    <li>removed: property has been removed from schema definition, relax platform behavior. This will avoid Nuxeo\n          property not found exceptions for remaining use of the property\n        </li>\n</ul>\n\n      The fallback attribute is optional, its value has to be a xpath referencing an existing property in the same\n      schema than deprecated/removed property.\n      When presents, it is used:\n      <ul>\n    <li>to set the value to the fallback property</li>\n    <li>to get the value from the fallback property if it exists</li>\n</ul>\n\n      Note: for a deprecated property, setValue also set value to property and getValue get value from property if\n      fallback value is null.\n      <p/>\n\n      For example, the contribution below enables WARN message of usage of property <i>file:filename</i>\n. This will also\n      get/set the value from/to <i>file:content/name</i>\n for deprecated usage of <i>file:filename</i>\n property.\n      <code>\n    <property deprecation=\"deprecated\" fallback=\"content/name\"\n        name=\"filename\" schema=\"file\"/>\n</code>\n\n      As it, each usage of this property will automatically fallback on the fallback and avoid exception from platform.\n      This will also allows to import document declaring the removed property.\n    \n",
              "documentationHtml": "<p>\nExtension Point to register new schemas.\n</p><p>\nSchemas are defined using XSD files.\nThe schema extension XML may containg several &#39;schema&#39; objects as\nthe following ones:\n</p><p></p><pre><code>    &lt;schema name&#61;&#34;common&#34; src&#61;&#34;schema/common.xsd&#34;/&gt;\n    &lt;schema name&#61;&#34;dublincore&#34; prefix&#61;&#34;dc&#34; src&#61;&#34;schema/dublincore.xsd&#34;/&gt;\n</code></pre><p>\nThe <i>name</i>\nattribute uniquely identify the schema, the <i>src</i>\nattribute specify\nthe path to that schema (relative to the bundle root) and the <i>prefix</i>\nis used as\na prefix (short name) of the schema namespace.\nThe schema namespace is the targetNamespace defined inside the XSD file\n</p><p>\nNote that multiple schemas can share the same target namespace and prefix\n</p><p>\nYou can also create a Nuxeo Schema from a sub part of the XSD schema.\nFor that you can use the xsdRootElement attribute to indicate the complex type to use.\n</p><p></p><pre><code>    &lt;schema name&#61;&#34;employeeSchema&#34; src&#61;&#34;schema/testExtension.xsd&#34; xsdRootElement&#61;&#34;employee&#34;/&gt;\n</code></pre><p>\nA schema can be completely disabled with:\n</p><p></p><pre><code>    &lt;schema enabled&#61;&#34;false&#34; name&#61;&#34;myOldSchema&#34;/&gt;\n</code></pre><p>\nSchemas with enabled&#61;false will be ignored in all document types and facets\nstill referencing them, and will not be returned when listing available schemas.\n</p><p>\nExtension Point is also used to register additional property information, called property characteristic, such as:\n</p><ul><li>secured: only administrators can edit it</li><li>deprecation: flag property as deprecated or removed</li></ul>\n<p>\nXML extensions may contain any number of &#39;property&#39; elements of the form:\n</p><p></p><pre><code>    &lt;property name&#61;&#34;creator&#34; schema&#61;&#34;dublincore&#34; secured&#61;&#34;true&#34;/&gt;\n    &lt;property deprecation&#61;&#34;deprecated&#34; name&#61;&#34;size&#34; schema&#61;&#34;common&#34;/&gt;\n    &lt;property deprecation&#61;&#34;removed&#34; fallback&#61;&#34;content/name&#34;\n        name&#61;&#34;filename&#34; schema&#61;&#34;file&#34;/&gt;\n</code></pre><p>\nProperties declared with secured attribute can only be edited by administrators.\n</p><p>\nProperties declared with deprecation attribute enable deprecation mechanism inside Nuxeo Platform.\nThis generates WARN message of usage to help to remove deprecated usage.\n</p><p>\nA contribution is one of these types:\n</p><ul><li>deprecated: property still exists in schema definition, but it&#39;ll be removed in next version</li><li>removed: property has been removed from schema definition, relax platform behavior. This will avoid Nuxeo\nproperty not found exceptions for remaining use of the property\n</li></ul>\n<p>\nThe fallback attribute is optional, its value has to be a xpath referencing an existing property in the same\nschema than deprecated/removed property.\nWhen presents, it is used:\n</p><ul><li>to set the value to the fallback property</li><li>to get the value from the fallback property if it exists</li></ul>\n<p>\nNote: for a deprecated property, setValue also set value to property and getValue get value from property if\nfallback value is null.\n</p><p>\nFor example, the contribution below enables WARN message of usage of property <i>file:filename</i>\n. This will also\nget/set the value from/to <i>file:content/name</i>\nfor deprecated usage of <i>file:filename</i>\nproperty.\n</p><p></p><pre><code>    &lt;property deprecation&#61;&#34;deprecated&#34; fallback&#61;&#34;content/name&#34;\n        name&#61;&#34;filename&#34; schema&#61;&#34;file&#34;/&gt;\n</code></pre><p>\nAs it, each usage of this property will automatically fallback on the fallback and avoid exception from platform.\nThis will also allows to import document declaring the removed property.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.TypeService/ExtensionPoints/org.nuxeo.ecm.core.schema.TypeService--schema",
              "id": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "label": "schema (org.nuxeo.ecm.core.schema.TypeService)",
              "name": "schema",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.schema.TypeService",
              "descriptors": [
                "org.nuxeo.ecm.core.schema.PropertyDeprecationDescriptor"
              ],
              "documentation": "\n      Extension Point to register deprecated/removed properties.\n      XML extensions may contain any number of 'property' elements of the form:\n      <code>\n    <property deprecated=\"true\" name=\"size\" schema=\"common\"/>\n    <property fallback=\"content/name\" name=\"filename\" schema=\"file\"/>\n</code>\n\n      A property contributed to this extension point enables deprecation mechanisms inside Nuxeo Platform.\n      This generates WARN message of usage to help to remove deprecated usage.\n      <p/>\n\n      A contribution is one of these types:\n      <ul>\n    <li>deprecated: property still exists in schema definition, but it'll be removed in next version</li>\n    <li>removed: property has been removed from schema definition, relax platform behavior. This will avoid Nuxeo\n          property not found exceptions for remaining use of the property\n        </li>\n</ul>\n\n      The fallback attribute is optional, its value has to be a xpath referencing an existing property in the same\n      schema than removed/deprecated property.\n      When presents, it is used:\n      <ul>\n    <li>to set the value to the fallback property</li>\n    <li>to get the value from the fallback property if it exists</li>\n</ul>\n\n      Note: for a deprecated property, setValue also set value to property and getValue get value from property if\n      fallback value is null.\n      <p/>\n\n      For example, the contribution below enables WARN message of usage of property <i>file:filename</i>\n. This will also\n      get/set the value from/to <i>file:content/name</i>\n for deprecated usage of <i>file:filename</i>\n property.\n      <code>\n    <property fallback=\"content/name\" name=\"filename\" schema=\"file\"/>\n</code>\n\n      As it, each usage of this property will automatically fallback on the fallback and avoid exception from platform.\n      This will also allows to import document declaring the removed property.\n      <p/>\n\n      @since 9.2\n      @deprecated since 11.1, use schema extension point with PropertyDescriptor object\n    \n",
              "documentationHtml": "<p>\nExtension Point to register deprecated/removed properties.\nXML extensions may contain any number of &#39;property&#39; elements of the form:\n</p><p></p><pre><code>    &lt;property deprecated&#61;&#34;true&#34; name&#61;&#34;size&#34; schema&#61;&#34;common&#34;/&gt;\n    &lt;property fallback&#61;&#34;content/name&#34; name&#61;&#34;filename&#34; schema&#61;&#34;file&#34;/&gt;\n</code></pre><p>\nA property contributed to this extension point enables deprecation mechanisms inside Nuxeo Platform.\nThis generates WARN message of usage to help to remove deprecated usage.\n</p><p>\nA contribution is one of these types:\n</p><ul><li>deprecated: property still exists in schema definition, but it&#39;ll be removed in next version</li><li>removed: property has been removed from schema definition, relax platform behavior. This will avoid Nuxeo\nproperty not found exceptions for remaining use of the property\n</li></ul>\n<p>\nThe fallback attribute is optional, its value has to be a xpath referencing an existing property in the same\nschema than removed/deprecated property.\nWhen presents, it is used:\n</p><ul><li>to set the value to the fallback property</li><li>to get the value from the fallback property if it exists</li></ul>\n<p>\nNote: for a deprecated property, setValue also set value to property and getValue get value from property if\nfallback value is null.\n</p><p>\nFor example, the contribution below enables WARN message of usage of property <i>file:filename</i>\n. This will also\nget/set the value from/to <i>file:content/name</i>\nfor deprecated usage of <i>file:filename</i>\nproperty.\n</p><p></p><pre><code>    &lt;property fallback&#61;&#34;content/name&#34; name&#61;&#34;filename&#34; schema&#61;&#34;file&#34;/&gt;\n</code></pre><p>\nAs it, each usage of this property will automatically fallback on the fallback and avoid exception from platform.\nThis will also allows to import document declaring the removed property.\n</p><p>\n&#64;since 9.2\n&#64;deprecated since 11.1, use schema extension point with PropertyDescriptor object\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.TypeService/ExtensionPoints/org.nuxeo.ecm.core.schema.TypeService--deprecation",
              "id": "org.nuxeo.ecm.core.schema.TypeService--deprecation",
              "label": "deprecation (org.nuxeo.ecm.core.schema.TypeService)",
              "name": "deprecation",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.TypeService",
          "name": "org.nuxeo.ecm.core.schema.TypeService",
          "requirements": [
            "org.nuxeo.ecm.core.schema.ObjectResolverService"
          ],
          "resolutionOrder": 140,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.schema.TypeService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.TypeService/Services/org.nuxeo.ecm.core.schema.SchemaManager",
              "id": "org.nuxeo.ecm.core.schema.SchemaManager",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.schema.TypeService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.TypeService/Services/org.nuxeo.ecm.core.schema.TypeProvider",
              "id": "org.nuxeo.ecm.core.schema.TypeProvider",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.schema.TypeService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.TypeService/Services/org.nuxeo.ecm.core.schema.PropertyCharacteristicHandler",
              "id": "org.nuxeo.ecm.core.schema.PropertyCharacteristicHandler",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 14,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.schema.TypeService\" version=\"1.0.0\">\n  <documentation>\n    Manage document types and schemas.\n    Allows registrering new types defined using XSD schemas\n    @author Bogdan Stefanescu (bs@nuxeo.com)\n  </documentation>\n\n  <require>org.nuxeo.ecm.core.schema.ObjectResolverService</require>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.schema.SchemaManager\" />\n    <provide interface=\"org.nuxeo.ecm.core.schema.TypeProvider\" />\n    <provide interface=\"org.nuxeo.ecm.core.schema.PropertyCharacteristicHandler\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.core.schema.TypeService\" />\n\n  <extension-point name=\"configuration\">\n\n    <documentation>\n      Type manager configuration.\n      <p />\n      This contains default prefetch options and clearComplexPropertyBeforeSet options. For example:\n      <code>\n        <configuration>\n          <prefetch>common, dublincore</prefetch>\n          <clearComplexPropertyBeforeSet>true</clearComplexPropertyBeforeSet>\n          <allowVersionWriteForDublinCore>false</allowVersionWriteForDublinCore>\n        </configuration>\n      </code>\n      Note that since 11.1, setting fields, such as dc:modified, as prefetch is DEPRECATED:\n      only schema names are supported.\n\n      Note that setting clearComplexPropertyBeforeSet to false is DEPRECATED since 9.3.\n      Note that setting allowVersionWriteForDublinCore to true is DEPRECATED since 10.3.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.schema.TypeConfiguration\" />\n\n  </extension-point>\n\n  <extension-point name=\"doctype\">\n\n    <documentation>\n      Extension Point to register new document types and facets.\n      <p />\n      Document types may implement several schemas and extends other\n      document types. You can compare document types with java\n      classes and schemas with java interfaces. Document types may\n      also contains several facets that define a behavior.\n      <p />\n      The prefetch element defines what fields are synchronously\n      indexed, and are made available in search results listings.\n      <p />\n      A doctype XML extension may contain several 'doctype' elements.\n      A doctype element may look like this:\n\n      <code>\n        <doctype name=\"File\" extends=\"Document\">\n          <schema name=\"common\" />\n          <schema name=\"file\" />\n          <schema name=\"dublincore\" />\n          <schema name=\"uid\" />\n          <facet name=\"Downloadable\" />\n          <facet name=\"Versionable\" />\n          <prefetch>dc:title, dc:modified, uid.uid</prefetch>\n        </doctype>\n      </code>\n\n      Document types may also specify subtypes, which are sets of other\n      document types that can be created inside the this document type\n      being defined.\n      <p />\n      This configuration only applies in the UI and will not affect\n      documents created through APIs (e.g. REST, Java)\n      This can be achieved as follows:\n\n      <code>\n        <doctype name=\"SomeFolder\" extends=\"Document\">\n          <subtypes>\n            <type>File</type>\n          </subtypes>\n        </doctype>\n      </code>\n\n      When extending a doctype, forbidden subtypes can also be specified\n      to prevent a specific type from being created.\n      <p />\n      This configuration only applies in the UI and will not affect\n      documents created through APIs (e.g. REST, Java)\n\n      <code>\n        <doctype name=\"SomeFolder\" append=\"true\">\n          <subtypes>\n            <type>SomeOtherFile</type>\n          </subtypes>\n          <subtypes-forbidden>\n            <type>File</type>\n          </subtypes-forbidden>\n        </doctype>\n      </code>\n\n      Facets are also defined by this extension point.\n      They can have zero or more schemas:\n\n      <code>\n        <facet name=\"MyFacet\" perDocumentQuery=\"false\" />\n        <facet name=\"MyFacetWithData\">\n          <schema name=\"myschema\" />\n          <schema name=\"otherschema\" />\n        </facet>\n        <facet name=\"MyOldFacet\" enabled=\"false\" />\n      </code>\n\n      Queries using ecm:mixinType on facets marked with\n      perDocumentQuery=\"false\" will not match any document where\n      this facet has been added using DocumentModel.addFacet() and does\n      not belong to the document type (this is done for performance reasons).\n\n      Facets with enabled=false will be ignored in all document types\n      still referencing them, and will not be returned when listing available facets.\n\n      It's also possible to associate one or more schemas to all proxies:\n      <code>\n        <proxies>\n          <schema name=\"myschema\" />\n        </proxies>\n      </code>\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.schema.DocumentTypeDescriptor\" />\n    <object class=\"org.nuxeo.ecm.core.schema.FacetDescriptor\" />\n    <object class=\"org.nuxeo.ecm.core.schema.ProxiesDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"schema\">\n\n    <documentation>\n      Extension Point to register new schemas.\n      <p />\n      Schemas are defined using XSD files.\n      The schema extension XML may containg several 'schema' objects as\n      the following ones:\n      <code>\n        <schema name=\"common\" src=\"schema/common.xsd\" />\n        <schema name=\"dublincore\" prefix=\"dc\" src=\"schema/dublincore.xsd\" />\n      </code>\n      The <i>name</i> attribute uniquely identify the schema, the <i>src</i> attribute specify\n      the path to that schema (relative to the bundle root) and the <i>prefix</i> is used as\n      a prefix (short name) of the schema namespace.\n      The schema namespace is the targetNamespace defined inside the XSD file\n      <p />\n      Note that multiple schemas can share the same target namespace and prefix\n      <p />\n      You can also create a Nuxeo Schema from a sub part of the XSD schema.\n      For that you can use the xsdRootElement attribute to indicate the complex type to use.\n      <code>\n        <schema name=\"employeeSchema\" src=\"schema/testExtension.xsd\" xsdRootElement=\"employee\" />\n      </code>\n      A schema can be completely disabled with:\n      <code>\n        <schema name=\"myOldSchema\" enabled=\"false\" />\n      </code>\n      Schemas with enabled=false will be ignored in all document types and facets\n      still referencing them, and will not be returned when listing available schemas.\n\n      Extension Point is also used to register additional property information, called property characteristic, such as:\n      <ul>\n        <li>secured: only administrators can edit it</li>\n        <li>deprecation: flag property as deprecated or removed</li>\n      </ul>\n      XML extensions may contain any number of 'property' elements of the form:\n      <code>\n        <property schema=\"dublincore\" name=\"creator\" secured=\"true\" />\n        <property schema=\"common\" name=\"size\" deprecation=\"deprecated\" />\n        <property schema=\"file\" name=\"filename\" deprecation=\"removed\" fallback=\"content/name\" />\n      </code>\n\n      Properties declared with secured attribute can only be edited by administrators.\n      <p />\n      Properties declared with deprecation attribute enable deprecation mechanism inside Nuxeo Platform.\n      This generates WARN message of usage to help to remove deprecated usage.\n      <p />\n      A contribution is one of these types:\n      <ul>\n        <li>deprecated: property still exists in schema definition, but it'll be removed in next version</li>\n        <li>removed: property has been removed from schema definition, relax platform behavior. This will avoid Nuxeo\n          property not found exceptions for remaining use of the property\n        </li>\n      </ul>\n      The fallback attribute is optional, its value has to be a xpath referencing an existing property in the same\n      schema than deprecated/removed property.\n      When presents, it is used:\n      <ul>\n        <li>to set the value to the fallback property</li>\n        <li>to get the value from the fallback property if it exists</li>\n      </ul>\n      Note: for a deprecated property, setValue also set value to property and getValue get value from property if\n      fallback value is null.\n      <p />\n      For example, the contribution below enables WARN message of usage of property <i>file:filename</i>. This will also\n      get/set the value from/to <i>file:content/name</i> for deprecated usage of <i>file:filename</i> property.\n      <code>\n        <property schema=\"file\" name=\"filename\" deprecation=\"deprecated\" fallback=\"content/name\" />\n      </code>\n      As it, each usage of this property will automatically fallback on the fallback and avoid exception from platform.\n      This will also allows to import document declaring the removed property.\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.schema.SchemaBindingDescriptor\" />\n    <object class=\"org.nuxeo.ecm.core.schema.PropertyDescriptor\" />\n\n  </extension-point>\n\n  <extension-point name=\"deprecation\">\n\n    <documentation>\n      Extension Point to register deprecated/removed properties.\n      XML extensions may contain any number of 'property' elements of the form:\n      <code>\n        <property schema=\"common\" name=\"size\" deprecated=\"true\" />\n        <property schema=\"file\" name=\"filename\" fallback=\"content/name\" />\n      </code>\n      A property contributed to this extension point enables deprecation mechanisms inside Nuxeo Platform.\n      This generates WARN message of usage to help to remove deprecated usage.\n      <p />\n      A contribution is one of these types:\n      <ul>\n        <li>deprecated: property still exists in schema definition, but it'll be removed in next version</li>\n        <li>removed: property has been removed from schema definition, relax platform behavior. This will avoid Nuxeo\n          property not found exceptions for remaining use of the property\n        </li>\n      </ul>\n      The fallback attribute is optional, its value has to be a xpath referencing an existing property in the same\n      schema than removed/deprecated property.\n      When presents, it is used:\n      <ul>\n        <li>to set the value to the fallback property</li>\n        <li>to get the value from the fallback property if it exists</li>\n      </ul>\n      Note: for a deprecated property, setValue also set value to property and getValue get value from property if\n      fallback value is null.\n      <p />\n      For example, the contribution below enables WARN message of usage of property <i>file:filename</i>. This will also\n      get/set the value from/to <i>file:content/name</i> for deprecated usage of <i>file:filename</i> property.\n      <code>\n        <property schema=\"file\" name=\"filename\" fallback=\"content/name\" />\n      </code>\n      As it, each usage of this property will automatically fallback on the fallback and avoid exception from platform.\n      This will also allows to import document declaring the removed property.\n      <p />\n      @since 9.2\n      @deprecated since 11.1, use schema extension point with PropertyDescriptor object\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.core.schema.PropertyDeprecationDescriptor\" />\n\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/SchemaService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    This component is contributing the common schemas used by other schemas.\n  \n",
          "documentationHtml": "<p>\nThis component is contributing the common schemas used by other schemas.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.common/Contributions/org.nuxeo.ecm.core.schema.common--schema",
              "id": "org.nuxeo.ecm.core.schema.common--schema",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"base\" src=\"schema/base.xsd\"/>\n    <schema name=\"core-types\" src=\"schema/core-types.xsd\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema/org.nuxeo.ecm.core.schema.common",
          "name": "org.nuxeo.ecm.core.schema.common",
          "requirements": [],
          "resolutionOrder": 141,
          "services": [],
          "startOrder": 138,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.schema.common\" version=\"1.0.0\">\n\n  <documentation>\n    This component is contributing the common schemas used by other schemas.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"base\" src=\"schema/base.xsd\"/>\n    <schema name=\"core-types\" src=\"schema/core-types.xsd\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/SchemaContrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-schema-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.schema",
      "id": "org.nuxeo.ecm.core.schema",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.core.schema,org.nuxeo.ecm.core.schema.type\r\n s,org.nuxeo.ecm.core.schema.types.constraints,org.nuxeo.ecm.core.schema\r\n .types.primitives,org.nuxeo.ecm.core.schema.utils\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.ecm.core.schema\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nNuxeo-Component: OSGI-INF/ObjectResolverService.xml, OSGI-INF/SchemaServ\r\n ice.xml, OSGI-INF/SchemaContrib.xml\r\nImport-Package: com.sun.xml.xsom,com.sun.xml.xsom.impl,com.sun.xml.xsom.\r\n parser,org.apache.commons.logging,org.nuxeo.common.utils,org.nuxeo.comm\r\n on.xmap.annotation,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.ru\r\n ntime.model,org.xml.sax\r\nBundle-SymbolicName: org.nuxeo.ecm.core.schema;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 141,
      "minResolutionOrder": 139,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.api",
      "components": [],
      "fileName": "nuxeo-platform-api-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.api",
      "id": "org.nuxeo.ecm.platform.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.api,org.nuxeo.ecm.platform.api.lo\r\n gin,org.nuxeo.ecm.platform.util;api=split;mandatory:=split\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Localization: plugin\r\nBundle-Name: ECM Platform API\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.api\r\nImport-Package: javax.naming,javax.security.auth.callback,javax.security\r\n .auth.login,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.nuxe\r\n o.ecm.core.api.repository,org.nuxeo.ecm.directory;api=split,org.nuxeo.r\r\n untime,org.nuxeo.runtime.api,org.nuxeo.runtime.model\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-metrics",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.metrics",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.metrics.MetricsServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Filter and Report Dropwizzard Metrics and Tracing.\n  \n",
          "documentationHtml": "<p>\nFilter and Report Dropwizzard Metrics and Tracing.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.metrics.MetricsService",
              "descriptors": [
                "org.nuxeo.runtime.metrics.MetricsConfigurationDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.metrics/org.nuxeo.runtime.metrics.MetricsService/ExtensionPoints/org.nuxeo.runtime.metrics.MetricsService--configuration",
              "id": "org.nuxeo.runtime.metrics.MetricsService--configuration",
              "label": "configuration (org.nuxeo.runtime.metrics.MetricsService)",
              "name": "configuration",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.metrics.MetricsService",
              "descriptors": [
                "org.nuxeo.runtime.metrics.MetricsReporterDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.metrics/org.nuxeo.runtime.metrics.MetricsService/ExtensionPoints/org.nuxeo.runtime.metrics.MetricsService--reporter",
              "id": "org.nuxeo.runtime.metrics.MetricsService--reporter",
              "label": "reporter (org.nuxeo.runtime.metrics.MetricsService)",
              "name": "reporter",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.metrics/org.nuxeo.runtime.metrics.MetricsService",
          "name": "org.nuxeo.runtime.metrics.MetricsService",
          "requirements": [],
          "resolutionOrder": 599,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.metrics.MetricsService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.metrics/org.nuxeo.runtime.metrics.MetricsService/Services/org.nuxeo.runtime.metrics.MetricsService",
              "id": "org.nuxeo.runtime.metrics.MetricsService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 671,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.metrics.MetricsService\">\n\n  <documentation>\n    Filter and Report Dropwizzard Metrics and Tracing.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.metrics.MetricsService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.runtime.metrics.MetricsServiceImpl\" />\n\n  <extension-point name=\"configuration\">\n    <object class=\"org.nuxeo.runtime.metrics.MetricsConfigurationDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"reporter\">\n    <object class=\"org.nuxeo.runtime.metrics.MetricsReporterDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/runtime-metrics-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-metrics-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.metrics",
      "id": "org.nuxeo.runtime.metrics",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Runtime Metrics\r\nBundle-SymbolicName: org.nuxeo.runtime.metrics;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/runtime-metrics-service.xml\r\n\r\n",
      "maxResolutionOrder": 599,
      "minResolutionOrder": 599,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "# About nuxeo-runtime-metrics\n\n\nSince Nuxeo 5.7 Coda Hale Yammer Metrics is used to add metrics to Nuxeo.\nThis module is here to configure the metrics reporter and add\ndefault metrics.\n\nFor testing you can run a graphite/grafana stack using the provided [docker compose](./docker/graphite-grafana):\n```bash\ncd ./docker/graphite-grafana\ndocker-compose up -d\n```\n\nThen configure your `nuxeo.conf` to report metrics and restart Nuxeo:\n```bash\nmetrics.graphite.enabled=true\nmetrics.graphite.host=localhost\nmetrics.graphite.port=2003\nmetrics.graphite.period=30\nmetrics.tomcat.enabled=true\nmetrics.log4j.enabled=true\n```\n\nAccess Grafana using [http://localhost:3000](http://localhost:3000) with user: admin pwd: admin,\nyou should have a Nuxeo Grafana dashboard up and running.\n\nGraphite is also reachable [http://localhost:8000](http://localhost:8000)\n\nTo stop Grafana (loosing all data):\n```bash\ndocker-compose down\n```\n\nFor production you should use different retentions and docker volumes to persist data.\n\n\nYou can also find old example of json graphite dashboard [graphite](./graphite) directory.\nTo use it from Graphite Dashboard > Edit Dashboard, paste the content\n\n\nSee <http://doc.nuxeo.org/> for full documentation.\nSee <http://metrics.codahale.com/> for Metrics documentation.\n",
        "digest": "e709985965abbc5a7ce17367f086b346",
        "encoding": "UTF-8",
        "length": 1282,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-search",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.core.search",
      "components": [
        {
          "@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.search/org.nuxeo.ecm.core.search.indexing/Contributions/org.nuxeo.ecm.core.search.indexing--domainEventProducer",
              "id": "org.nuxeo.ecm.core.search.indexing--domainEventProducer",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"domainEventProducer\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <domainEventProducer class=\"org.nuxeo.ecm.core.search.index.IndexingDomainEventProducer\" name=\"indexingDomain\">\n      <stream codec=\"avro\" name=\"source/indexing\" partitions=\"4\"/>\n    </domainEventProducer>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.indexing",
          "name": "org.nuxeo.ecm.core.search.indexing",
          "requirements": [],
          "resolutionOrder": 146,
          "services": [],
          "startOrder": 144,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.search.indexing\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"domainEventProducer\">\n    <domainEventProducer name=\"indexingDomain\" class=\"org.nuxeo.ecm.core.search.index.IndexingDomainEventProducer\">\n      <stream name=\"source/indexing\" partitions=\"${nuxeo.search.indexing.defaultPartitions:=4}\" codec=\"avro\" />\n    </domainEventProducer>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/indexing-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.search/org.nuxeo.ecm.core.search.indexing.stream.processor/Contributions/org.nuxeo.ecm.core.search.indexing.stream.processor--actions",
              "id": "org.nuxeo.ecm.core.search.indexing.stream.processor--actions",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"250\" defaultScroller=\"repository\" enabled=\"true\" inputStream=\"bulk/indexing\" name=\"indexing\"/>\n    <action batchSize=\"25\" bucketSize=\"1000\" defaultScroller=\"repository\" enabled=\"true\" exclusive=\"true\" inputStream=\"bulk/indexingBackground\" name=\"indexingBackground\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.indexing.stream.processor/Contributions/org.nuxeo.ecm.core.search.indexing.stream.processor--streamProcessor",
              "id": "org.nuxeo.ecm.core.search.indexing.stream.processor--streamProcessor",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <!-- ongoing indexing almost real time -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.search.index.IndexingProcessor\" defaultConcurrency=\"4\" defaultPartitions=\"12\" enabled=\"true\" name=\"indexing\">\n      <policy batchCapacity=\"20\" batchThreshold=\"250ms\" continueOnFailure=\"true\" delay=\"3s\" maxDelay=\"60s\" maxRetries=\"4\" name=\"default\"/>\n    </streamProcessor>\n\n    <!-- ongoing indexing async -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.search.index.IndexingAction\" defaultConcurrency=\"4\" defaultPartitions=\"8\" enabled=\"true\" name=\"indexingBulk\">\n      <policy continueOnFailure=\"true\" delay=\"3s\" maxDelay=\"60s\" maxRetries=\"4\" name=\"default\"/>\n    </streamProcessor>\n\n    <!-- full reindexing -->\n    <streamProcessor class=\"org.nuxeo.ecm.core.search.index.IndexingBackgroundAction\" defaultConcurrency=\"4\" defaultPartitions=\"8\" enabled=\"true\" name=\"indexingBackgroundBulk\">\n      <policy continueOnFailure=\"true\" delay=\"3s\" maxDelay=\"60s\" maxRetries=\"4\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.indexing.stream.processor",
          "name": "org.nuxeo.ecm.core.search.indexing.stream.processor",
          "requirements": [],
          "resolutionOrder": 147,
          "services": [],
          "startOrder": 145,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.search.indexing.stream.processor\">\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"indexing\" defaultScroller=\"repository\" inputStream=\"bulk/indexing\" bucketSize=\"250\" batchSize=\"25\"\n      enabled=\"${nuxeo.search.indexing.enabled:=true}\" />\n    <action name=\"indexingBackground\" defaultScroller=\"repository\" inputStream=\"bulk/indexingBackground\"\n      bucketSize=\"1000\" batchSize=\"25\" exclusive=\"true\" enabled=\"${nuxeo.search.indexing.enabled:=true}\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <!-- ongoing indexing almost real time -->\n    <streamProcessor name=\"indexing\" class=\"org.nuxeo.ecm.core.search.index.IndexingProcessor\"\n      defaultConcurrency=\"${nuxeo.search.stream.indexing.defaultConcurrency:=4}\"\n      defaultPartitions=\"${nuxeo.search.stream.indexing.defaultPartitions:=12}\"\n      enabled=\"${nuxeo.search.indexing.enabled:=true}\">\n      <policy name=\"default\" maxRetries=\"4\" delay=\"3s\" maxDelay=\"60s\" continueOnFailure=\"true\"\n        batchCapacity=\"${nuxeo.search.stream.indexing.batch.size:=20}\"\n        batchThreshold=\"${nuxeo.search.stream.indexing.batch.threshold:=250ms}\" />\n    </streamProcessor>\n\n    <!-- ongoing indexing async -->\n    <streamProcessor name=\"indexingBulk\" class=\"org.nuxeo.ecm.core.search.index.IndexingAction\"\n      defaultConcurrency=\"${nuxeo.search.stream.indexingAsync.defaultConcurrency:=4}\"\n      defaultPartitions=\"${nuxeo.search.stream.indexingAsync.defaultPartitions:=8}\"\n      enabled=\"${nuxeo.search.indexing.enabled:=true}\">\n      <policy name=\"default\" maxRetries=\"4\" delay=\"3s\" maxDelay=\"60s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n\n    <!-- full reindexing -->\n    <streamProcessor name=\"indexingBackgroundBulk\" class=\"org.nuxeo.ecm.core.search.index.IndexingBackgroundAction\"\n      defaultConcurrency=\"${nuxeo.search.stream.reindexing.defaultConcurrency:=4}\"\n      defaultPartitions=\"${nuxeo.search.stream.reindexing.defaultPartitions:=8}\"\n      enabled=\"${nuxeo.search.indexing.enabled:=true}\">\n      <policy name=\"default\" maxRetries=\"4\" delay=\"3s\" maxDelay=\"60s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/indexing-stream-processor-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.search--searchClient",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.client.repository.factory.contrib/Contributions/org.nuxeo.ecm.core.search.client.repository.factory.contrib--searchClient",
              "id": "org.nuxeo.ecm.core.search.client.repository.factory.contrib--searchClient",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.search",
                "name": "org.nuxeo.ecm.core.search",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"searchClient\" target=\"org.nuxeo.ecm.core.search\">\n    <searchClient factory=\"org.nuxeo.ecm.core.search.client.repository.RepositorySearchClientFactory\" name=\"repository\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.client.repository.factory.contrib",
          "name": "org.nuxeo.ecm.core.search.client.repository.factory.contrib",
          "requirements": [],
          "resolutionOrder": 148,
          "services": [],
          "startOrder": 142,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.search.client.repository.factory.contrib\" version=\"1.0\">\n  <extension target=\"org.nuxeo.ecm.core.search\" point=\"searchClient\">\n    <searchClient name=\"repository\" factory=\"org.nuxeo.ecm.core.search.client.repository.RepositorySearchClientFactory\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/repository-search-client-factory-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.search.client.repository.RepositorySearchClientFactory",
          "declaredStartOrder": 109,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.search.client.repository",
              "descriptors": [
                "org.nuxeo.ecm.core.search.client.repository.RepositorySearchClientDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.client.repository/ExtensionPoints/org.nuxeo.ecm.core.search.client.repository--searchClient",
              "id": "org.nuxeo.ecm.core.search.client.repository--searchClient",
              "label": "searchClient (org.nuxeo.ecm.core.search.client.repository)",
              "name": "searchClient",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.client.repository",
          "name": "org.nuxeo.ecm.core.search.client.repository",
          "requirements": [],
          "resolutionOrder": 149,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.search.client.repository",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.client.repository/Services/org.nuxeo.ecm.core.search.client.repository.RepositorySearchClientFactory",
              "id": "org.nuxeo.ecm.core.search.client.repository.RepositorySearchClientFactory",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 541,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.search.client.repository\" version=\"1.0\">\n\n  <implementation class=\"org.nuxeo.ecm.core.search.client.repository.RepositorySearchClientFactory\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.search.client.repository.RepositorySearchClientFactory\" />\n  </service>\n\n  <extension-point name=\"searchClient\">\n    <object class=\"org.nuxeo.ecm.core.search.client.repository.RepositorySearchClientDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/repository-search-client-factory-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.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.client.repository.scroll.contrib/Contributions/org.nuxeo.ecm.core.search.client.repository.scroll.contrib--scroll",
              "id": "org.nuxeo.ecm.core.search.client.repository.scroll.contrib--scroll",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.ecm.core.search.SearchServiceScroll\" name=\"repository_search\" type=\"document\">\n      <option name=\"searchIndex\">repository</option>\n    </scroll>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.client.repository.scroll.contrib",
          "name": "org.nuxeo.ecm.core.search.client.repository.scroll.contrib",
          "requirements": [],
          "resolutionOrder": 150,
          "services": [],
          "startOrder": 143,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.search.client.repository.scroll.contrib\" version=\"1.0\">\n  <extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll type=\"document\" name=\"repository_search\" class=\"org.nuxeo.ecm.core.search.SearchServiceScroll\">\n      <option name=\"searchIndex\">repository</option>\n    </scroll>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/repository-search-client-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.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.scroll.contrib/Contributions/org.nuxeo.ecm.core.search.scroll.contrib--scroll",
              "id": "org.nuxeo.ecm.core.search.scroll.contrib--scroll",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.ecm.core.search.SearchServiceScroll\" default=\"true\" name=\"search\" type=\"document\">\n      <option name=\"searchIndex\">repository</option>\n    </scroll>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search.scroll.contrib",
          "name": "org.nuxeo.ecm.core.search.scroll.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.scroll.contrib.default"
          ],
          "resolutionOrder": 151,
          "services": [],
          "startOrder": 146,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.search.scroll.contrib\" version=\"1.0\">\n  <require>org.nuxeo.ecm.core.scroll.contrib.default</require>\n  <extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll type=\"document\" name=\"search\" default=\"true\" class=\"org.nuxeo.ecm.core.search.SearchServiceScroll\">\n      <option name=\"searchIndex\">${nuxeo.search.client.default.scroller.index.name:=repository}</option>\n    </scroll>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/scroll-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.core.search.SearchComponent",
          "declaredStartOrder": 110,
          "documentation": "\n    The Search Service.\n  \n",
          "documentationHtml": "<p>\nThe Search Service.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.search",
              "descriptors": [
                "org.nuxeo.ecm.core.search.SearchClientDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search/ExtensionPoints/org.nuxeo.ecm.core.search--searchClient",
              "id": "org.nuxeo.ecm.core.search--searchClient",
              "label": "searchClient (org.nuxeo.ecm.core.search)",
              "name": "searchClient",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.core.search",
              "descriptors": [
                "org.nuxeo.ecm.core.search.SearchIndexDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search/ExtensionPoints/org.nuxeo.ecm.core.search--searchIndex",
              "id": "org.nuxeo.ecm.core.search--searchIndex",
              "label": "searchIndex (org.nuxeo.ecm.core.search)",
              "name": "searchIndex",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search",
          "name": "org.nuxeo.ecm.core.search",
          "requirements": [],
          "resolutionOrder": 152,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.search",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search/Services/org.nuxeo.ecm.core.search.SearchService",
              "id": "org.nuxeo.ecm.core.search.SearchService",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.core.search",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search/org.nuxeo.ecm.core.search/Services/org.nuxeo.ecm.core.search.SearchIndexingService",
              "id": "org.nuxeo.ecm.core.search.SearchIndexingService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 542,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.core.search\" version=\"1.0\">\n\n  <documentation>\n    The Search Service.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.core.search.SearchComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.core.search.SearchService\" />\n    <provide interface=\"org.nuxeo.ecm.core.search.SearchIndexingService\" />\n  </service>\n\n  <extension-point name=\"searchClient\">\n    <object class=\"org.nuxeo.ecm.core.search.SearchClientDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"searchIndex\">\n    <object class=\"org.nuxeo.ecm.core.search.SearchIndexDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/search-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-search-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.core.search",
      "id": "org.nuxeo.ecm.core.search",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Core Search\r\nBundle-SymbolicName: org.nuxeo.ecm.core.search;singleton:=true\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/indexing-domain-event-producer-contrib.xml, OS\r\n GI-INF/indexing-stream-processor-contrib.xml, OSGI-INF/repository-searc\r\n h-client-factory-contrib.xml, OSGI-INF/repository-search-client-factory\r\n -service.xml, OSGI-INF/repository-search-client-scroll-contrib.xml, OSG\r\n I-INF/scroll-contrib.xml, OSGI-INF/search-service.xml\r\n\r\n",
      "maxResolutionOrder": 152,
      "minResolutionOrder": 146,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audio-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/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": "2025.7.12",
              "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    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.ecm.types",
          "name": "org.nuxeo.ecm.platform.audio.ecm.types",
          "requirements": [],
          "resolutionOrder": 233,
          "services": [],
          "startOrder": 224,
          "version": "2025.7.12",
          "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    </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/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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 234,
          "services": [],
          "startOrder": 476,
          "version": "2025.7.12",
          "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/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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.filemanager.contrib",
          "name": "org.nuxeo.ecm.platform.audio.filemanager.contrib",
          "requirements": [],
          "resolutionOrder": 235,
          "services": [],
          "startOrder": 225,
          "version": "2025.7.12",
          "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/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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "name": "org.nuxeo.ecm.core.api.thumbnail.ThumbnailService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.audio.core/org.nuxeo.ecm.platform.audio.service.thumbnailfactory",
          "name": "org.nuxeo.ecm.platform.audio.service.thumbnailfactory",
          "requirements": [],
          "resolutionOrder": 236,
          "services": [],
          "startOrder": 227,
          "version": "2025.7.12",
          "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/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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 407,
          "services": [],
          "startOrder": 226,
          "version": "2025.7.12",
          "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/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": 33,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 437,
          "services": [],
          "startOrder": 475,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audio.core",
      "id": "org.nuxeo.ecm.platform.audio.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\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": 437,
      "minResolutionOrder": 233,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.types.api",
        "org.nuxeo.ecm.core.api"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-el",
      "artifactVersion": "2025.7.12",
      "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.query",
          "org.nuxeo.ecm.core.schema",
          "org.nuxeo.ecm.core.search",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.el",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.el.ELServiceComponent",
          "declaredStartOrder": null,
          "documentation": "\n    The action service provides extension points related to EL.\n  \n",
          "documentationHtml": "<p>\nThe action service provides extension points related to EL.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.el.service",
              "descriptors": [
                "org.nuxeo.ecm.platform.el.ELContextFactoryDescriptor"
              ],
              "documentation": "\n      The class defining the ELContext factory. This is used by high-level UI components\n      like Seam/JSF that need to provided extended EL context when evaluating certain\n      expressions.\n\n      Example:\n\n      <code>\n    <factory class=\"com.example.ELContextFactoryImpl\"/>\n</code>\n",
              "documentationHtml": "<p>\nThe class defining the ELContext factory. This is used by high-level UI components\nlike Seam/JSF that need to provided extended EL context when evaluating certain\nexpressions.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;factory class&#61;&#34;com.example.ELContextFactoryImpl&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.platform.el/org.nuxeo.ecm.platform.el.service/ExtensionPoints/org.nuxeo.ecm.platform.el.service--elContextFactory",
              "id": "org.nuxeo.ecm.platform.el.service--elContextFactory",
              "label": "elContextFactory (org.nuxeo.ecm.platform.el.service)",
              "name": "elContextFactory",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.platform.el/org.nuxeo.ecm.platform.el.service",
          "name": "org.nuxeo.ecm.platform.el.service",
          "requirements": [],
          "resolutionOrder": 122,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.el.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.platform.el/org.nuxeo.ecm.platform.el.service/Services/org.nuxeo.ecm.platform.el.ELService",
              "id": "org.nuxeo.ecm.platform.el.ELService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 613,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.el.service\">\n  <documentation>\n    The action service provides extension points related to EL.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.el.ELServiceComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.el.ELService\" />\n  </service>\n\n  <extension-point name=\"elContextFactory\">\n    <documentation>\n      The class defining the ELContext factory. This is used by high-level UI components\n      like Seam/JSF that need to provided extended EL context when evaluating certain\n      expressions.\n\n      Example:\n\n      <code>\n        <factory class=\"com.example.ELContextFactoryImpl\" />\n      </code>\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.el.ELContextFactoryDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/el-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-core-el-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/org.nuxeo.ecm.platform.el",
      "id": "org.nuxeo.ecm.platform.el",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.el\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Localization: plugin\r\nBundle-Name: Nuxeo Platform Expression Language\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nImport-Package: javax.ejb,org.apache.commons.logging,org.nuxeo.ecm.core;\r\n api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.model\r\n ,org.nuxeo.ecm.core.api.model.impl,org.nuxeo.ecm.directory;api=split\r\nNuxeo-Component: OSGI-INF/el-service.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.el;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 122,
      "minResolutionOrder": 122,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-migration",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.migration",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.migration.MigrationServiceImpl",
          "declaredStartOrder": -490,
          "documentation": "\n    The Migration service allows registration and access to migration configurations.\n    A migration configuration contains different states and steps to migrate between these states.\n  \n",
          "documentationHtml": "<p>\nThe Migration service allows registration and access to migration configurations.\nA migration configuration contains different states and steps to migrate between these states.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.migration.MigrationService",
              "descriptors": [
                "org.nuxeo.runtime.migration.MigrationDescriptor"
              ],
              "documentation": "\n      Defines migrations:\n      <code>\n    <migration id=\"my_migration\">\n        <description label=\"my_migration\">My Migration</description>\n        <state id=\"v1\">\n            <description label=\"my_migration.state.v1\">Initial state</description>\n        </state>\n          ... other states ...\n\n          <step\n            fromState=\"v1\" id=\"first\" toState=\"v2\">\n            <description label=\"my_migration.step.first\">First step of the migration, from v1 to v2</description>\n            <class>my.class.Migratorv1v2</class>\n        </step>\n          ... other steps ...\n        </migration>\n</code>\n\n      The migrator class for each step must implement Runnable.\n    \n",
              "documentationHtml": "<p>\nDefines migrations:\n</p><p></p><pre><code>    &lt;migration id&#61;&#34;my_migration&#34;&gt;\n        &lt;description label&#61;&#34;my_migration&#34;&gt;My Migration&lt;/description&gt;\n        &lt;state id&#61;&#34;v1&#34;&gt;\n            &lt;description label&#61;&#34;my_migration.state.v1&#34;&gt;Initial state&lt;/description&gt;\n        &lt;/state&gt;\n          ... other states ...\n\n          &lt;step\n            fromState&#61;&#34;v1&#34; id&#61;&#34;first&#34; toState&#61;&#34;v2&#34;&gt;\n            &lt;description label&#61;&#34;my_migration.step.first&#34;&gt;First step of the migration, from v1 to v2&lt;/description&gt;\n            &lt;class&gt;my.class.Migratorv1v2&lt;/class&gt;\n        &lt;/step&gt;\n          ... other steps ...\n        &lt;/migration&gt;\n</code></pre><p>\nThe migrator class for each step must implement Runnable.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.migration/org.nuxeo.runtime.migration.MigrationService/ExtensionPoints/org.nuxeo.runtime.migration.MigrationService--configuration",
              "id": "org.nuxeo.runtime.migration.MigrationService--configuration",
              "label": "configuration (org.nuxeo.runtime.migration.MigrationService)",
              "name": "configuration",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.migration/org.nuxeo.runtime.migration.MigrationService",
          "name": "org.nuxeo.runtime.migration.MigrationService",
          "requirements": [
            "org.nuxeo.runtime.kv.KeyValueService"
          ],
          "resolutionOrder": 603,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.migration.MigrationService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.migration/org.nuxeo.runtime.migration.MigrationService/Services/org.nuxeo.runtime.migration.MigrationService",
              "id": "org.nuxeo.runtime.migration.MigrationService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 12,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.migration.MigrationService\" version=\"1.0\">\n\n  <documentation>\n    The Migration service allows registration and access to migration configurations.\n    A migration configuration contains different states and steps to migrate between these states.\n  </documentation>\n\n  <require>org.nuxeo.runtime.kv.KeyValueService</require>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.migration.MigrationService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.runtime.migration.MigrationServiceImpl\" />\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Defines migrations:\n      <code>\n        <migration id=\"my_migration\">\n          <description label=\"my_migration\">My Migration</description>\n          <state id=\"v1\">\n            <description label=\"my_migration.state.v1\">Initial state</description>\n          </state>\n          ... other states ...\n\n          <step id=\"first\" fromState=\"v1\" toState=\"v2\">\n            <description label=\"my_migration.step.first\">First step of the migration, from v1 to v2</description>\n            <class>my.class.Migratorv1v2</class>\n          </step>\n          ... other steps ...\n        </migration>\n      </code>\n      The migrator class for each step must implement Runnable.\n    </documentation>\n\n    <object class=\"org.nuxeo.runtime.migration.MigrationDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/migration-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-migration-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.migration",
      "id": "org.nuxeo.runtime.migration",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.runtime.migration\r\nNuxeo-Component: OSGI-INF/migration-service.xml\r\n\r\n",
      "maxResolutionOrder": 603,
      "minResolutionOrder": 603,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-audit-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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.audit.service.AuditComponent--backendFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent.defaultContrib/Contributions/org.nuxeo.audit.service.AuditComponent.defaultContrib--backendFactory",
              "id": "org.nuxeo.audit.service.AuditComponent.defaultContrib--backendFactory",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"backendFactory\" target=\"org.nuxeo.audit.service.AuditComponent\">\n    <backend factory=\"org.nuxeo.audit.mem.MemAuditBackendFactory\" name=\"default\"/>\n  </extension>"
            },
            {
              "@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 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 the place to declare them NXAudit side.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.audit.service.AuditComponent--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent.defaultContrib/Contributions/org.nuxeo.audit.service.AuditComponent.defaultContrib--event",
              "id": "org.nuxeo.audit.service.AuditComponent.defaultContrib--event",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.audit.service.AuditComponent\">\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 the place to declare them NXAudit side.\n    </documentation>\n\n    <!-- login events -->\n    <event name=\"loginSuccess\"/>\n    <event name=\"loginFailed\"/>\n    <event name=\"logout\"/>\n    <!-- document 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=\"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    <!-- blob events -->\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    <!-- retention events -->\n    <event name=\"retentionActiveChanged\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retentionActive}\" key=\"retentionActive\"/>\n      </extendedInfos>\n    </event>\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    <!-- user and group events -->\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=\"search\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.searchDocumentModelAsJson}\" key=\"searchDocumentModel\"/>\n        <extendedInfo expression=\"${message.properties.aggregates}\" key=\"aggregates\"/>\n        <extendedInfo expression=\"${message.properties.aggregatesMatches}\" key=\"aggregatesMatches\"/>\n        <extendedInfo expression=\"${message.properties.effectiveQuery}\" key=\"effectiveQuery\"/>\n        <extendedInfo expression=\"${message.properties.pageIndex}\" key=\"pageIndex\"/>\n        <extendedInfo expression=\"${message.properties.resultsCountInPage}\" key=\"resultsCountInPage\"/>\n        <extendedInfo expression=\"${message.properties.resultsCount}\" key=\"resultsCount\"/>\n        <extendedInfo expression=\"${message.properties.pageProviderName}\" key=\"pageProviderName\"/>\n        <extendedInfo expression=\"${message.properties.queryParams}\" key=\"queryParams\"/>\n        <extendedInfo expression=\"${message.properties.params}\" key=\"params\"/>\n        <extendedInfo expression=\"${message.properties.executionTimeMs}\" key=\"executionTimeMs\"/>\n        <extendedInfo expression=\"${message.properties.searchFields}\" key=\"searchFields\"/>\n      </extendedInfos>\n    </event>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent.defaultContrib",
          "name": "org.nuxeo.audit.service.AuditComponent.defaultContrib",
          "requirements": [],
          "resolutionOrder": 237,
          "services": [],
          "startOrder": 42,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.service.AuditComponent.defaultContrib\">\n\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" point=\"backendFactory\">\n    <backend name=\"default\" factory=\"${nuxeo.audit.backend.default.factory:=}\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" 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 the place to declare them NXAudit side.\n    </documentation>\n\n    <!-- login events -->\n    <event name=\"loginSuccess\" />\n    <event name=\"loginFailed\" />\n    <event name=\"logout\" />\n    <!-- document 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=\"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    <!-- blob events -->\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    <!-- retention events -->\n    <event name=\"retentionActiveChanged\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.retentionActive}\" key=\"retentionActive\" />\n      </extendedInfos>\n    </event>\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    <!-- user and group events -->\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=\"search\">\n      <extendedInfos>\n        <extendedInfo expression=\"${message.properties.searchDocumentModelAsJson}\" key=\"searchDocumentModel\" />\n        <extendedInfo expression=\"${message.properties.aggregates}\" key=\"aggregates\" />\n        <extendedInfo expression=\"${message.properties.aggregatesMatches}\" key=\"aggregatesMatches\" />\n        <extendedInfo expression=\"${message.properties.effectiveQuery}\" key=\"effectiveQuery\" />\n        <extendedInfo expression=\"${message.properties.pageIndex}\" key=\"pageIndex\" />\n        <extendedInfo expression=\"${message.properties.resultsCountInPage}\" key=\"resultsCountInPage\" />\n        <extendedInfo expression=\"${message.properties.resultsCount}\" key=\"resultsCount\" />\n        <extendedInfo expression=\"${message.properties.pageProviderName}\" key=\"pageProviderName\" />\n        <extendedInfo expression=\"${message.properties.queryParams}\" key=\"queryParams\" />\n        <extendedInfo expression=\"${message.properties.params}\" key=\"params\" />\n        <extendedInfo expression=\"${message.properties.executionTimeMs}\" key=\"executionTimeMs\" />\n        <extendedInfo expression=\"${message.properties.searchFields}\" key=\"searchFields\" />\n      </extendedInfos>\n    </event>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/audit-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.audit.PageProviderservice.contrib"
          ],
          "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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.PageProviderService.contrib/Contributions/org.nuxeo.audit.PageProviderService.contrib--providers",
              "id": "org.nuxeo.audit.PageProviderService.contrib--providers",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.audit.provider.AuditPageProvider\" name=\"EVENTS_VIEW\">\n      <property name=\"coreSession\">#{documentManager}</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.audit.provider.AuditPageProvider\" name=\"DOCUMENT_HISTORY_PROVIDER_OLD\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          docUUID = ?\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.audit.provider.DocumentHistoryPageProvider\" 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.audit.provider.AuditPageProvider\" name=\"ADMIN_HISTORY\">\n      <property name=\"coreSession\"/>\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.audit.provider.AuditPageProvider\" name=\"LATEST_AUDITED_CREATED_USERS_OR_GROUPS_PROVIDER\">\n      <pattern>\n        SELECT * FROM LogEntry WHERE category = 'userGroup' AND eventId IN ('user_created', 'group_created')\n      </pattern>\n      <sort ascending=\"false\" column=\"eventDate\"/>\n      <pageSize>5</pageSize>\n      <maxPageSize>100</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.audit.provider.LatestCreatedUsersOrGroupsPageProvider\" name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\">\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.PageProviderService.contrib",
          "name": "org.nuxeo.audit.PageProviderService.contrib",
          "requirements": [],
          "resolutionOrder": 238,
          "services": [],
          "startOrder": 36,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.PageProviderService.contrib\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.ecm.platform.audit.PageProviderservice.contrib</alias>\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n\n    <genericPageProvider name=\"EVENTS_VIEW\" class=\"org.nuxeo.audit.provider.AuditPageProvider\">\n      <property name=\"coreSession\">#{documentManager}</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\" class=\"org.nuxeo.audit.provider.AuditPageProvider\">\n      <searchDocumentType>BasicAuditSearch</searchDocumentType>\n      <whereClause>\n        <fixedPart>\n          docUUID = ?\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\" class=\"org.nuxeo.audit.provider.DocumentHistoryPageProvider\">\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.audit.provider.AuditPageProvider\">\n      <property name=\"coreSession\" />\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.audit.provider.AuditPageProvider\">\n      <pattern>\n        SELECT * FROM LogEntry WHERE category = 'userGroup' AND eventId IN ('user_created', 'group_created')\n      </pattern>\n      <sort column=\"eventDate\" ascending=\"false\" />\n      <pageSize>5</pageSize>\n      <maxPageSize>100</maxPageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"LATEST_CREATED_USERS_OR_GROUPS_PROVIDER\"\n                         class=\"org.nuxeo.audit.provider.LatestCreatedUsersOrGroupsPageProvider\">\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/audit-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.audit.service.AuditComponent",
          "declaredStartOrder": 70,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "descriptors": [
                "org.nuxeo.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.audit.service.AuditComponent\">\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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/ExtensionPoints/org.nuxeo.audit.service.AuditComponent--event",
              "id": "org.nuxeo.audit.service.AuditComponent--event",
              "label": "event (org.nuxeo.audit.service.AuditComponent)",
              "name": "event",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "descriptors": [
                "org.nuxeo.audit.service.extension.ExtendedInfoDescriptor"
              ],
              "documentation": "\n      This service registered extended info mappings.\n      <p/>\n\n      This service is used to evaluate EL expression using document as context\n      registering 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\nregistering results into a map indexed by names.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/ExtensionPoints/org.nuxeo.audit.service.AuditComponent--extendedInfo",
              "id": "org.nuxeo.audit.service.AuditComponent--extendedInfo",
              "label": "extendedInfo (org.nuxeo.audit.service.AuditComponent)",
              "name": "extendedInfo",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "descriptors": [
                "org.nuxeo.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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/ExtensionPoints/org.nuxeo.audit.service.AuditComponent--adapter",
              "id": "org.nuxeo.audit.service.AuditComponent--adapter",
              "label": "adapter (org.nuxeo.audit.service.AuditComponent)",
              "name": "adapter",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "descriptors": [
                "org.nuxeo.audit.service.extension.AuditBackendFactoryDescriptor"
              ],
              "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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/ExtensionPoints/org.nuxeo.audit.service.AuditComponent--backendFactory",
              "id": "org.nuxeo.audit.service.AuditComponent--backendFactory",
              "label": "backendFactory (org.nuxeo.audit.service.AuditComponent)",
              "name": "backendFactory",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent",
          "name": "org.nuxeo.audit.service.AuditComponent",
          "requirements": [],
          "resolutionOrder": 239,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/Services/org.nuxeo.audit.service.AuditBackend",
              "id": "org.nuxeo.audit.service.AuditBackend",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.audit.service.AuditComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.service.AuditComponent/Services/org.nuxeo.audit.service.AuditService",
              "id": "org.nuxeo.audit.service.AuditService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 534,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.service.AuditComponent\">\n\n  <implementation class=\"org.nuxeo.audit.service.AuditComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.audit.service.AuditBackend\" />\n    <provide interface=\"org.nuxeo.audit.service.AuditService\" />\n  </service>\n\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.audit.service.AuditComponent\" 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.audit.service.extension.EventDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"extendedInfo\">\n    <documentation>\n      This service registered extended info mappings.\n      <p />\n      This service is used to evaluate EL expression using document as context\n      registering results into a map indexed by names.\n    </documentation>\n\n    <object class=\"org.nuxeo.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.audit.service.extension.AdapterDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"backendFactory\">\n    <documentation>\n      Allows to register a backend implementation for the Audit Service\n    </documentation>\n\n    <object class=\"org.nuxeo.audit.service.extension.AuditBackendFactoryDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/audit-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.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.listener.StreamAuditEventListener/Contributions/org.nuxeo.audit.listener.StreamAuditEventListener--listener",
              "id": "org.nuxeo.audit.listener.StreamAuditEventListener--listener",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.listener.StreamAuditEventListener/Contributions/org.nuxeo.audit.listener.StreamAuditEventListener--streamProcessor",
              "id": "org.nuxeo.audit.listener.StreamAuditEventListener--streamProcessor",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.listener.StreamAuditEventListener",
          "name": "org.nuxeo.audit.listener.StreamAuditEventListener",
          "requirements": [],
          "resolutionOrder": 240,
          "services": [],
          "startOrder": 41,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.audit.listener.StreamAuditEventListener\">\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.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.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/audit-stream-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.platform.audit.core.types-contrib"
          ],
          "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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.core.types-contrib/Contributions/org.nuxeo.audit.core.types-contrib--schema",
              "id": "org.nuxeo.audit.core.types-contrib--schema",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.core.types-contrib/Contributions/org.nuxeo.audit.core.types-contrib--doctype",
              "id": "org.nuxeo.audit.core.types-contrib--doctype",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.core.types-contrib",
          "name": "org.nuxeo.audit.core.types-contrib",
          "requirements": [],
          "resolutionOrder": 241,
          "services": [],
          "startOrder": 37,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.core.types-contrib\" version=\"1.0\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.ecm.platform.audit.core.types-contrib</alias>\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",
          "aliases": [
            "org.nuxeo.audit.directoryContrib"
          ],
          "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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directory.contrib/Contributions/org.nuxeo.audit.directory.contrib--directories",
              "id": "org.nuxeo.audit.directory.contrib--directories",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.directory.contrib",
          "name": "org.nuxeo.audit.directory.contrib",
          "requirements": [],
          "resolutionOrder": 242,
          "services": [],
          "startOrder": 38,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.directory.contrib\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.audit.directoryContrib</alias>\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",
          "aliases": [
            "org.nuxeo.ecm.platform.audit.io.marshallers"
          ],
          "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/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.io.marshallers/Contributions/org.nuxeo.audit.io.marshallers--marshallers",
              "id": "org.nuxeo.audit.io.marshallers--marshallers",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- preview document enricher -->\n    <register class=\"org.nuxeo.audit.io.LogEntryJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.audit.io.LogEntryJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.audit.io.LogEntryListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.audit.io.LogEntryCSVWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.audit.io.LogEntryListCSVWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.io.marshallers",
          "name": "org.nuxeo.audit.io.marshallers",
          "requirements": [],
          "resolutionOrder": 244,
          "services": [],
          "startOrder": 40,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.io.marshallers\" version=\"1.0.0\">\n  <!-- Alias is deprecated since 2025.0 -->\n  <alias>org.nuxeo.ecm.platform.audit.io.marshallers</alias>\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.audit.io.LogEntryJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.audit.io.LogEntryJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.audit.io.LogEntryListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.audit.io.LogEntryCSVWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.audit.io.LogEntryListCSVWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.audit.mem.MemAuditBackendFactory",
          "declaredStartOrder": 69,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.mem.MemAuditBackendFactory",
          "name": "org.nuxeo.audit.mem.MemAuditBackendFactory",
          "requirements": [],
          "resolutionOrder": 245,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.audit.mem.MemAuditBackendFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.audit.mem.MemAuditBackendFactory/Services/org.nuxeo.audit.mem.MemAuditBackendFactory",
              "id": "org.nuxeo.audit.mem.MemAuditBackendFactory",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 533,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.audit.mem.MemAuditBackendFactory\">\n\n  <implementation class=\"org.nuxeo.audit.mem.MemAuditBackendFactory\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.audit.mem.MemAuditBackendFactory\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/mem-audit-backend-factory-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "declaredStartOrder": null,
          "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    @deprecated since 2025.0, this component and all its content is deprecated, you should use APIs located under\n    org.nuxeo.audit.\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>\n&#64;deprecated since 2025.0, this component and all its content is deprecated, you should use APIs located under\norg.nuxeo.audit.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.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/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": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.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/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": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "descriptors": [
                "org.nuxeo.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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit/org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "name": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
          "requirements": [
            "org.nuxeo.runtime.metrics.MetricsService"
          ],
          "resolutionOrder": 602,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.audit.service.NXAuditEventsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 606,
          "version": "2025.7.12",
          "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    @deprecated since 2025.0, this component and all its content is deprecated, you should use APIs located under\n    org.nuxeo.audit.\n  </documentation>\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.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.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.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</component>\n",
          "xmlFileName": "/OSGI-INF/nxaudit-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-audit-core-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.audit",
      "id": "org.nuxeo.ecm.platform.audit",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nNuxeo-Component: OSGI-INF/audit-contrib.xml,OSGI-INF/audit-pageprovider-\r\n contrib.xml,OSGI-INF/audit-service.xml,OSGI-INF/audit-stream-contrib.xm\r\n l,OSGI-INF/nxaudit-service.xml,OSGI-INF/core-type-contrib.xml,OSGI-INF/\r\n directories-contrib.xml,OSGI-INF/marshallers-contrib.xml,OSGI-INF/mem-a\r\n udit-backend-factory-service.xml\r\n\r\n",
      "maxResolutionOrder": 602,
      "minResolutionOrder": 237,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-mongodb",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.mongodb",
      "components": [
        {
          "@type": "NXComponent",
          "aliases": [
            "org.nuxeo.ecm.core.mongodb.MongoDBComponent",
            "org.nuxeo.mongodb.core.MongoDBComponent"
          ],
          "componentClass": "org.nuxeo.runtime.mongodb.MongoDBComponent",
          "declaredStartOrder": 40,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "aliases": [
                "org.nuxeo.ecm.core.mongodb.MongoDBComponent--connection",
                "org.nuxeo.mongodb.core.MongoDBComponent--connection"
              ],
              "componentId": "org.nuxeo.runtime.mongodb.MongoDBComponent",
              "descriptors": [
                "org.nuxeo.runtime.mongodb.MongoDBConnectionConfig"
              ],
              "documentation": "\n      Extension point used to configure access to a MongoDB server or cluster. The service will return the 'default'\n      access if the asked one hasn't been contributed.\n\n      This sets up a MongoClient; server is mandatory.\n      <code>\n    <connection>\n        <server>mongodb://bob:pass@localhost:27017,otherhost:27018/mydb?replicaSet=test;connectTimeoutMS=300000</server>\n        <dbname>mydb</dbname>\n        <ssl>true</ssl>\n        <trustStorePath>/path/to/cacerts.jks</trustStorePath>\n        <trustStorePassword>changeit</trustStorePassword>\n        <trustStoreType>jks</trustStoreType>\n        <keyStorePath>/path/to/keystore.jks</keyStorePath>\n        <keyStorePassword>changeit</keyStorePassword>\n        <keyStoreType>jks</keyStoreType>\n    </connection>\n</code>\n\n      See http://docs.mongodb.org/manual/reference/connection-string/ for the mongodb:// URI syntax.\n    \n",
              "documentationHtml": "<p>\nExtension point used to configure access to a MongoDB server or cluster. The service will return the &#39;default&#39;\naccess if the asked one hasn&#39;t been contributed.\n</p><p>\nThis sets up a MongoClient; server is mandatory.\n</p><p></p><pre><code>    &lt;connection&gt;\n        &lt;server&gt;mongodb://bob:pass&#64;localhost:27017,otherhost:27018/mydb?replicaSet&#61;test;connectTimeoutMS&#61;300000&lt;/server&gt;\n        &lt;dbname&gt;mydb&lt;/dbname&gt;\n        &lt;ssl&gt;true&lt;/ssl&gt;\n        &lt;trustStorePath&gt;/path/to/cacerts.jks&lt;/trustStorePath&gt;\n        &lt;trustStorePassword&gt;changeit&lt;/trustStorePassword&gt;\n        &lt;trustStoreType&gt;jks&lt;/trustStoreType&gt;\n        &lt;keyStorePath&gt;/path/to/keystore.jks&lt;/keyStorePath&gt;\n        &lt;keyStorePassword&gt;changeit&lt;/keyStorePassword&gt;\n        &lt;keyStoreType&gt;jks&lt;/keyStoreType&gt;\n    &lt;/connection&gt;\n</code></pre><p>\nSee http://docs.mongodb.org/manual/reference/connection-string/ for the mongodb:// URI syntax.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.mongodb/org.nuxeo.runtime.mongodb.MongoDBComponent/ExtensionPoints/org.nuxeo.runtime.mongodb.MongoDBComponent--connection",
              "id": "org.nuxeo.runtime.mongodb.MongoDBComponent--connection",
              "label": "connection (org.nuxeo.runtime.mongodb.MongoDBComponent)",
              "name": "connection",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.mongodb/org.nuxeo.runtime.mongodb.MongoDBComponent",
          "name": "org.nuxeo.runtime.mongodb.MongoDBComponent",
          "requirements": [],
          "resolutionOrder": 604,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.mongodb.MongoDBComponent",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.mongodb/org.nuxeo.runtime.mongodb.MongoDBComponent/Services/org.nuxeo.runtime.mongodb.MongoDBConnectionService",
              "id": "org.nuxeo.runtime.mongodb.MongoDBConnectionService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 531,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.runtime.mongodb.MongoDBComponent\">\n\n  <alias>org.nuxeo.mongodb.core.MongoDBComponent</alias>\n  <alias>org.nuxeo.ecm.core.mongodb.MongoDBComponent</alias>\n\n  <implementation class=\"org.nuxeo.runtime.mongodb.MongoDBComponent\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.mongodb.MongoDBConnectionService\"/>\n  </service>\n\n  <extension-point name=\"connection\">\n    <documentation>\n      Extension point used to configure access to a MongoDB server or cluster. The service will return the 'default'\n      access if the asked one hasn't been contributed.\n\n      This sets up a MongoClient; server is mandatory.\n      <code>\n        <connection>\n          <server>mongodb://bob:pass@localhost:27017,otherhost:27018/mydb?replicaSet=test;connectTimeoutMS=300000</server>\n          <dbname>mydb</dbname>\n          <ssl>true</ssl>\n          <trustStorePath>/path/to/cacerts.jks</trustStorePath>\n          <trustStorePassword>********</trustStorePassword>\n          <trustStoreType>jks</trustStoreType>\n          <keyStorePath>/path/to/keystore.jks</keyStorePath>\n          <keyStorePassword>********</keyStorePassword>\n          <keyStoreType>jks</keyStoreType>\n        </connection>\n      </code>\n      See http://docs.mongodb.org/manual/reference/connection-string/ for the mongodb:// URI syntax.\n    </documentation>\n\n    <object class=\"org.nuxeo.runtime.mongodb.MongoDBConnectionConfig\"/>\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/mongodb-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-mongodb-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.mongodb",
      "id": "org.nuxeo.runtime.mongodb",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo Runtime MongoDB\r\nBundle-SymbolicName: org.nuxeo.runtime.mongodb;singleton:=true\r\nNuxeo-Component: OSGI-INF/mongodb-service.xml\r\n\r\n",
      "maxResolutionOrder": 604,
      "minResolutionOrder": 604,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-collections-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.collections.core",
      "components": [
        {
          "@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/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collection.lifecycle/Contributions/org.nuxeo.ecm.collection.lifecycle--types",
              "id": "org.nuxeo.ecm.collection.lifecycle--types",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"Collection\">default</type>\n      <type name=\"Collections\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collection.lifecycle",
          "name": "org.nuxeo.ecm.collection.lifecycle",
          "requirements": [],
          "resolutionOrder": 247,
          "services": [],
          "startOrder": 83,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.collection.lifecycle\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"Collection\">default</type>\n      <type name=\"Collections\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-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.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.pageprovider/Contributions/org.nuxeo.ecm.collections.pageprovider--providers",
              "id": "org.nuxeo.ecm.collections.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": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"default_collection\">\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) */\n        dc:title ILIKE '?%' AND ecm:mixinType = 'Collection' AND ecm:primaryType != 'Favorites' AND\n        ecm:isProxy = 0 AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_collections\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"true\">\n        SELECT * FROM Document WHERE /*+ES: INDEX(dc:title.fulltext) OPERATOR(match_phrase_prefix) */\n        dc:title ILIKE :searchTerm AND ecm:mixinType = 'Collection' AND\n        ecm:primaryType != 'Favorites' AND\n        ecm:isProxy = 0 AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n      <parameter>#{currentUser.name}</parameter>\n      <sort ascending=\"false\" column=\"dc:modified\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"default_collection_candidate\">\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) */ dc:title ILIKE '?%'\n        AND ecm:mixinType != 'SystemDocument' AND ecm:mixinType !=\n        'NotCollectionMember' AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"default_content_collection\">\n      <pattern>\n        SELECT * FROM Document where ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isTrashed = 0\n        AND collectionMember:collectionIds/* = ?\n      </pattern>\n      <sort ascending=\"true\" column=\"dc:title\"/>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"ordered_content_collection\">\n      <pattern>\n        SELECT collection:documentIds/* FROM Document where ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0\n        AND ecm:uuid = ?\n      </pattern>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"all_collections\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Collection' AND\n        ecm:isProxy = 0 AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n      <pageSize>1000</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.pageprovider",
          "name": "org.nuxeo.ecm.collections.pageprovider",
          "requirements": [],
          "resolutionOrder": 248,
          "services": [],
          "startOrder": 87,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.collections.pageprovider\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"default_collection\">\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) */\n        dc:title ILIKE '?%' AND ecm:mixinType = 'Collection' AND ecm:primaryType != 'Favorites' AND\n        ecm:isProxy = 0 AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"user_collections\">\n      <pattern quoteParameters=\"true\" escapeParameters=\"true\">\n        SELECT * FROM Document WHERE /*+ES: INDEX(dc:title.fulltext) OPERATOR(match_phrase_prefix) */\n        dc:title ILIKE :searchTerm AND ecm:mixinType = 'Collection' AND\n        ecm:primaryType != 'Favorites' AND\n        ecm:isProxy = 0 AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n      <parameter>#{currentUser.name}</parameter>\n      <sort column=\"dc:modified\" ascending=\"false\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"default_collection_candidate\">\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) */ dc:title ILIKE '?%'\n        AND ecm:mixinType != 'SystemDocument' AND ecm:mixinType !=\n        'NotCollectionMember' AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"default_content_collection\">\n      <pattern>\n        SELECT * FROM Document where ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isTrashed = 0\n        AND collectionMember:collectionIds/* = ?\n      </pattern>\n      <sort column=\"dc:title\" ascending=\"true\" />\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"ordered_content_collection\">\n      <pattern>\n        SELECT collection:documentIds/* FROM Document where ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0\n        AND ecm:uuid = ?\n      </pattern>\n      <pageSize>50</pageSize>\n    </coreQueryPageProvider>\n\n    <coreQueryPageProvider name=\"all_collections\">\n      <property name=\"maxResults\">PAGE_SIZE</property>\n      <pattern>\n        SELECT * FROM Document WHERE ecm:mixinType = 'Collection' AND\n        ecm:isProxy = 0 AND ecm:mixinType != 'HiddenInNavigation' AND\n        ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n      <pageSize>1000</pageSize>\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.collections.core.CollectionManagerImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Collection generic service.\n\n    @author Guillaume Renard (grenard@nuxeo.com)\n    @since 5.9.3\n  \n",
          "documentationHtml": "<p>\nCollection generic service.\n</p><p>\n&#64;since 5.9.3\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.api.CollectionManager",
          "name": "org.nuxeo.ecm.collections.api.CollectionManager",
          "requirements": [],
          "resolutionOrder": 249,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.collections.api.CollectionManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.api.CollectionManager/Services/org.nuxeo.ecm.collections.api.CollectionManager",
              "id": "org.nuxeo.ecm.collections.api.CollectionManager",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 559,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.collections.api.CollectionManager\">\n\n  <documentation>\n    Collection generic service.\n\n    @author Guillaume Renard (grenard@nuxeo.com)\n    @since 5.9.3\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.collections.core.CollectionManagerImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.collections.api.CollectionManager\"/>\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-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.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.adapter/Contributions/org.nuxeo.ecm.collections.adapter--adapters",
              "id": "org.nuxeo.ecm.collections.adapter--adapters",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.collections.core.adapter.Collection\" factory=\"org.nuxeo.ecm.collections.core.adapter.CollectionAdapterFactory\"/>\n    <adapter class=\"org.nuxeo.ecm.collections.core.adapter.CollectionMember\" factory=\"org.nuxeo.ecm.collections.core.adapter.CollectionMemberAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.adapter",
          "name": "org.nuxeo.ecm.collections.adapter",
          "requirements": [],
          "resolutionOrder": 250,
          "services": [],
          "startOrder": 84,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.collections.adapter\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.collections.core.adapter.Collection\"\n      factory=\"org.nuxeo.ecm.collections.core.adapter.CollectionAdapterFactory\" />\n    <adapter class=\"org.nuxeo.ecm.collections.core.adapter.CollectionMember\"\n      factory=\"org.nuxeo.ecm.collections.core.adapter.CollectionMemberAdapterFactory\" />\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/collection-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.security.SecurityService--permissions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.security/Contributions/org.nuxeo.ecm.collections.security--permissions",
              "id": "org.nuxeo.ecm.collections.security--permissions",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"permissions\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <permission name=\"ReadCanCollect\">\n      <include>Read</include>\n      <include>WriteProperties</include>\n    </permission>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--permissionsVisibility",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.security/Contributions/org.nuxeo.ecm.collections.security--permissionsVisibility",
              "id": "org.nuxeo.ecm.collections.security--permissionsVisibility",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"permissionsVisibility\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n\n    <visibility type=\"Collection\">\n      <item order=\"20\" show=\"true\">ReadCanCollect</item>\n    </visibility>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.security",
          "name": "org.nuxeo.ecm.collections.security",
          "requirements": [
            "org.nuxeo.ecm.core.security.defaultPermissions"
          ],
          "resolutionOrder": 251,
          "services": [],
          "startOrder": 88,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.collections.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=\"ReadCanCollect\">\n      <include>Read</include>\n      <include>WriteProperties</include>\n    </permission>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\"\n    point=\"permissionsVisibility\">\n\n    <visibility type=\"Collection\">\n      <item show=\"true\" order=\"20\">ReadCanCollect</item>\n    </visibility>\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/collection-security-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/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.listener/Contributions/org.nuxeo.ecm.collections.listener--listener",
              "id": "org.nuxeo.ecm.collections.listener--listener",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener class=\"org.nuxeo.ecm.collections.core.listener.DuplicatedCollectionListener\" name=\"duplicatedCollectionListener\">\n      <event>documentCreatedByCopy</event>\n      <event>documentCheckedIn</event>\n    </listener>\n    <listener class=\"org.nuxeo.ecm.collections.core.listener.RemovedCollectionListener\" name=\"removedCollectionListener\">\n      <event>documentRemoved</event>\n    </listener>\n    <listener class=\"org.nuxeo.ecm.collections.core.listener.RestoredCollectionListener\" name=\"restoredCollectionListener\">\n      <event>beforeRestoringDocument</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.listener",
          "name": "org.nuxeo.ecm.collections.listener",
          "requirements": [],
          "resolutionOrder": 252,
          "services": [],
          "startOrder": 86,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.collections.listener\">\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"duplicatedCollectionListener\"\n      class=\"org.nuxeo.ecm.collections.core.listener.DuplicatedCollectionListener\">\n      <event>documentCreatedByCopy</event>\n      <event>documentCheckedIn</event>\n    </listener>\n    <listener name=\"removedCollectionListener\"\n      class=\"org.nuxeo.ecm.collections.core.listener.RemovedCollectionListener\">\n      <event>documentRemoved</event>\n    </listener>\n    <listener name=\"restoredCollectionListener\"\n      class=\"org.nuxeo.ecm.collections.core.listener.RestoredCollectionListener\">\n      <event>beforeRestoringDocument</event>\n    </listener>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-event-handlers-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/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.workmanager/Contributions/org.nuxeo.ecm.collections.workmanager--queues",
              "id": "org.nuxeo.ecm.collections.workmanager--queues",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"collections\">\n      <maxThreads>1</maxThreads>\n      <category>duplicateCollectionMember</category>\n      <category>removedCollectionMember</category>\n      <category>removedCollection</category>\n      <category>removeFromCollection</category>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.workmanager",
          "name": "org.nuxeo.ecm.collections.workmanager",
          "requirements": [],
          "resolutionOrder": 253,
          "services": [],
          "startOrder": 89,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.collections.workmanager\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"collections\">\n      <maxThreads>1</maxThreads>\n      <category>duplicateCollectionMember</category>\n      <category>removedCollectionMember</category>\n      <category>removedCollection</category>\n      <category>removeFromCollection</category>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-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.api.versioning.VersioningService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.core.versioning.policies/Contributions/org.nuxeo.ecm.collections.core.versioning.policies--policies",
              "id": "org.nuxeo.ecm.collections.core.versioning.policies--policies",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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-collection-before-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>collection-actions</filter-id>\n    </policy>\n    <policy beforeUpdate=\"false\" id=\"no-versioning-for-collection-after-update\" increment=\"NONE\" order=\"2\">\n      <filter-id>collection-actions</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/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.core.versioning.policies/Contributions/org.nuxeo.ecm.collections.core.versioning.policies--filters",
              "id": "org.nuxeo.ecm.collections.core.versioning.policies--filters",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.versioning.VersioningService",
                "name": "org.nuxeo.ecm.core.api.versioning.VersioningService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\">\n    <filter class=\"org.nuxeo.ecm.collections.core.versioning.NoVersioningCollectionPolicyFilter\" id=\"collection-actions\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.core.versioning.policies",
          "name": "org.nuxeo.ecm.collections.core.versioning.policies",
          "requirements": [
            "org.nuxeo.ecm.platform.el.service"
          ],
          "resolutionOrder": 254,
          "services": [],
          "startOrder": 85,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.collections.core.versioning.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    <!-- 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-collection-before-update\" beforeUpdate=\"true\" increment=\"NONE\" order=\"2\">\n      <filter-id>collection-actions</filter-id>\n    </policy>\n    <policy id=\"no-versioning-for-collection-after-update\" beforeUpdate=\"false\" increment=\"NONE\" order=\"2\">\n      <filter-id>collection-actions</filter-id>\n    </policy>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.versioning.VersioningService\" point=\"filters\">\n    <filter id=\"collection-actions\" class=\"org.nuxeo.ecm.collections.core.versioning.NoVersioningCollectionPolicyFilter\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/collection-versioning-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/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.favorites.coreTypes/Contributions/org.nuxeo.ecm.favorites.coreTypes--doctype",
              "id": "org.nuxeo.ecm.favorites.coreTypes--doctype",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"Document\" name=\"Favorites\">\n      <facet name=\"Collection\"/>\n      <facet name=\"NotCollectionMember\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"common\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.favorites.coreTypes",
          "name": "org.nuxeo.ecm.favorites.coreTypes",
          "requirements": [],
          "resolutionOrder": 255,
          "services": [],
          "startOrder": 185,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.favorites.coreTypes\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"Favorites\" extends=\"Document\">\n      <facet name=\"Collection\" />\n      <facet name=\"NotCollectionMember\" />\n      <schema name=\"dublincore\" />\n      <schema name=\"common\" />\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/favorites-core-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.collections.core.FavoritesManagerImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Favorites generic service.\n\n    @author Guillaume Renard (grenard@nuxeo.com)\n    @since 5.9.4\n  \n",
          "documentationHtml": "<p>\nFavorites generic service.\n</p><p>\n&#64;since 5.9.4\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.api.FavoritesManager",
          "name": "org.nuxeo.ecm.collections.api.FavoritesManager",
          "requirements": [],
          "resolutionOrder": 256,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.collections.api.FavoritesManager",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.collections.api.FavoritesManager/Services/org.nuxeo.ecm.collections.api.FavoritesManager",
              "id": "org.nuxeo.ecm.collections.api.FavoritesManager",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 560,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.collections.api.FavoritesManager\">\n\n  <documentation>\n    Favorites generic service.\n\n    @author Guillaume Renard (grenard@nuxeo.com)\n    @since 5.9.4\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.collections.core.FavoritesManagerImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.collections.api.FavoritesManager\"/>\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/favorites-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.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.favorites.lifecycle/Contributions/org.nuxeo.ecm.favorites.lifecycle--types",
              "id": "org.nuxeo.ecm.favorites.lifecycle--types",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"Favorites\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.favorites.lifecycle",
          "name": "org.nuxeo.ecm.favorites.lifecycle",
          "requirements": [],
          "resolutionOrder": 257,
          "services": [],
          "startOrder": 187,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.favorites.lifecycle\">\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\"\n    point=\"types\">\n    <types>\n      <type name=\"Favorites\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/favorites-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.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.favorites.jsonEnrichers/Contributions/org.nuxeo.ecm.favorites.jsonEnrichers--marshallers",
              "id": "org.nuxeo.ecm.favorites.jsonEnrichers--marshallers",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.collections.core.io.FavoritesJsonEnricher\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.collections.core.io.CollectionsJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core/org.nuxeo.ecm.favorites.jsonEnrichers",
          "name": "org.nuxeo.ecm.favorites.jsonEnrichers",
          "requirements": [],
          "resolutionOrder": 258,
          "services": [],
          "startOrder": 186,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.favorites.jsonEnrichers\">\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.collections.core.io.FavoritesJsonEnricher\"\n      enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.collections.core.io.CollectionsJsonEnricher\"\n      enable=\"true\" />\n  </extension>\n</component>",
          "xmlFileName": "/OSGI-INF/json-enrichers-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-collections-core-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.collections.core",
      "id": "org.nuxeo.ecm.platform.collections.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nBundle-Name: Nuxeo ECM Collections\r\nNuxeo-Component: OSGI-INF/collection-lifecycle-contrib.xml,OSGI-INF/coll\r\n ection-pageprovider-contrib.xml,OSGI-INF/collection-service.xml,OSGI-IN\r\n F/collection-adapter-contrib.xml,OSGI-INF/collection-security-contrib.x\r\n ml,OSGI-INF/collection-event-handlers-contrib.xml,OSGI-INF/collection-w\r\n orkmanager-contrib.xml,OSGI-INF/collection-versioning-contrib.xml,OSGI-\r\n INF/favorites-core-types-contrib.xml,OSGI-INF/favorites-service.xml,OSG\r\n I-INF/favorites-lifecycle-contrib.xml,OSGI-INF/json-enrichers-contrib.x\r\n ml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.collections.core;singleton:=\r\n true\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\n\r\n",
      "maxResolutionOrder": 258,
      "minResolutionOrder": 247,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-deploy",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.nuxeo-runtime-deploy",
      "components": [],
      "fileName": "nuxeo-runtime-deploy-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.nuxeo-runtime-deploy",
      "id": "org.nuxeo.runtime.nuxeo-runtime-deploy",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.runtime.deployment.preprocessor.install.comman\r\n ds,org.nuxeo.runtime.deployment.preprocessor.template,org.nuxeo.runtime\r\n .deployment.preprocessor.install,org.nuxeo.runtime.deployment.preproces\r\n sor,org.nuxeo.runtime.deployment.preprocessor.install.filters\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.runtime.nuxeo-runtime-deploy\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nImport-Package: org.apache.commons.logging,org.nuxeo.common,org.nuxeo.co\r\n mmon.collections,org.nuxeo.common.utils,org.nuxeo.common.xmap,org.nuxeo\r\n .common.xmap.annotation,org.w3c.dom\r\nBundle-SymbolicName: org.nuxeo.runtime.nuxeo-runtime-deploy;singleton:=t\r\n rue\r\n\r\n",
      "maxResolutionOrder": null,
      "minResolutionOrder": null,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-pubsub",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.pubsub",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.pubsub.PubSubServiceImpl",
          "declaredStartOrder": -490,
          "documentation": "\n    The PubSub service allows cross-instance notifications through simple messages sent to topics.\n  \n",
          "documentationHtml": "<p>\nThe PubSub service allows cross-instance notifications through simple messages sent to topics.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.pubsub.PubSubService",
              "descriptors": [
                "org.nuxeo.runtime.pubsub.PubSubProviderDescriptor"
              ],
              "documentation": "\n      Defines the implementation of the PubSub service:\n      <code>\n    <provider class=\"org.nuxeo.runtime.pubsub.MemPubSubProvider\"/>\n</code>\n\n      The class must implement org.nuxeo.runtime.pubsub.PubSubProvider.\n\n      This component comes with a Nuxeo Stream PubSubProvider implementation:\n      <code>\n    <provider class=\"org.nuxeo.runtime.pubsub.StreamPubSubProvider\">\n        <option name=\"logConfig\">default</option>\n        <option name=\"logName\">pubsub</option>\n        <option name=\"codec\">avroBinary</option>\n    </provider>\n</code>\n",
              "documentationHtml": "<p>\nDefines the implementation of the PubSub service:\n</p><p></p><pre><code>    &lt;provider class&#61;&#34;org.nuxeo.runtime.pubsub.MemPubSubProvider&#34;/&gt;\n</code></pre><p>\nThe class must implement org.nuxeo.runtime.pubsub.PubSubProvider.\n</p><p>\nThis component comes with a Nuxeo Stream PubSubProvider implementation:\n</p><p></p><pre><code>    &lt;provider class&#61;&#34;org.nuxeo.runtime.pubsub.StreamPubSubProvider&#34;&gt;\n        &lt;option name&#61;&#34;logConfig&#34;&gt;default&lt;/option&gt;\n        &lt;option name&#61;&#34;logName&#34;&gt;pubsub&lt;/option&gt;\n        &lt;option name&#61;&#34;codec&#34;&gt;avroBinary&lt;/option&gt;\n    &lt;/provider&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.pubsub/org.nuxeo.runtime.pubsub.PubSubService/ExtensionPoints/org.nuxeo.runtime.pubsub.PubSubService--configuration",
              "id": "org.nuxeo.runtime.pubsub.PubSubService--configuration",
              "label": "configuration (org.nuxeo.runtime.pubsub.PubSubService)",
              "name": "configuration",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.pubsub/org.nuxeo.runtime.pubsub.PubSubService",
          "name": "org.nuxeo.runtime.pubsub.PubSubService",
          "requirements": [],
          "resolutionOrder": 606,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.pubsub.PubSubService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.pubsub/org.nuxeo.runtime.pubsub.PubSubService/Services/org.nuxeo.runtime.pubsub.PubSubService",
              "id": "org.nuxeo.runtime.pubsub.PubSubService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 13,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.pubsub.PubSubService\" version=\"1.0\">\n\n  <documentation>\n    The PubSub service allows cross-instance notifications through simple messages sent to topics.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.pubsub.PubSubService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.runtime.pubsub.PubSubServiceImpl\" />\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Defines the implementation of the PubSub service:\n      <code>\n        <provider class=\"org.nuxeo.runtime.pubsub.MemPubSubProvider\"/>\n      </code>\n      The class must implement org.nuxeo.runtime.pubsub.PubSubProvider.\n\n      This component comes with a Nuxeo Stream PubSubProvider implementation:\n      <code>\n        <provider class=\"org.nuxeo.runtime.pubsub.StreamPubSubProvider\">\n          <option name=\"logConfig\">default</option>\n          <option name=\"logName\">pubsub</option>\n          <option name=\"codec\">avroBinary</option>\n        </provider>\n      </code>\n    </documentation>\n\n    <object class=\"org.nuxeo.runtime.pubsub.PubSubProviderDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pubsub-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.pubsub.ClusterActionServiceImpl",
          "declaredStartOrder": -990,
          "documentation": "\n    The ClusterActionPubSubService allows to send simple action to another nodes.\n  \n",
          "documentationHtml": "<p>\nThe ClusterActionPubSubService allows to send simple action to another nodes.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.pubsub/org.nuxeo.runtime.pubsub.ClusterActionService",
          "name": "org.nuxeo.runtime.pubsub.ClusterActionService",
          "requirements": [
            "org.nuxeo.runtime.pubsub.PubSubService",
            "org.nuxeo.runtime.cluster.ClusterService"
          ],
          "resolutionOrder": 607,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.pubsub.ClusterActionService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.pubsub/org.nuxeo.runtime.pubsub.ClusterActionService/Services/org.nuxeo.runtime.pubsub.ClusterActionService",
              "id": "org.nuxeo.runtime.pubsub.ClusterActionService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 3,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.pubsub.ClusterActionService\" version=\"1.0\">\n\n  <require>org.nuxeo.runtime.cluster.ClusterService</require>\n  <require>org.nuxeo.runtime.pubsub.PubSubService</require>\n\n  <documentation>\n    The ClusterActionPubSubService allows to send simple action to another nodes.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.pubsub.ClusterActionService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.runtime.pubsub.ClusterActionServiceImpl\" />\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/cluster-action-pubsub-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-pubsub-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.pubsub",
      "id": "org.nuxeo.runtime.pubsub",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.runtime.pubsub;singleton:=true\r\nNuxeo-Component: OSGI-INF/pubsub-service.xml, OSGI-INF/cluster-action-pu\r\n bsub-service.xml\r\n\r\n",
      "maxResolutionOrder": 607,
      "minResolutionOrder": 606,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-commandline-executor",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.commandline.executor",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
          "declaredStartOrder": null,
          "documentation": "\n    The CommandLineExecutor component let you define command line call using the command extension point.\n    You can call those commands with your own arguments like blobs or properties. The result is available\n    in the ExecResult object.\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe CommandLineExecutor component let you define command line call using the command extension point.\nYou can call those commands with your own arguments like blobs or properties. The result is available\nin the ExecResult object.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.commandline.executor.service.EnvironmentDescriptor"
              ],
              "documentation": "\n      Extension point to contribute environment configuration.\n\n      Available options are:\n      - name: comma-separated string attribute used as the environment parameters scope.\n      It can be empty to set environment parameters common to all commands, equal to a command name to set parameters\n      for that command only, or equal to a command line to set parameters common to all commands using that command line.\n      You can associate multiple commands using a comma as separator.\n\n      - workingDirectory: the Folder when command should be executed. Default is the system temporary folder.\n\n      - parameters/parameter\n\n      @author Thierry Delprat (td@nuxeo.com)\n\n      CommandLine contribution\n      example:\n      <code>\n    <environment name=\"aCommandName,aCommandLine\">\n        <parameters>\n            <parameter name=\"SOME_VAR\">some value</parameter>\n        </parameters>\n    </environment>\n</code>\n",
              "documentationHtml": "<p>\nExtension point to contribute environment configuration.\n</p><p>\nAvailable options are:\n- name: comma-separated string attribute used as the environment parameters scope.\nIt can be empty to set environment parameters common to all commands, equal to a command name to set parameters\nfor that command only, or equal to a command line to set parameters common to all commands using that command line.\nYou can associate multiple commands using a comma as separator.\n</p><p>\n- workingDirectory: the Folder when command should be executed. Default is the system temporary folder.\n</p><p>\n- parameters/parameter\n</p><p>\nCommandLine contribution\nexample:\n</p><p></p><pre><code>    &lt;environment name&#61;&#34;aCommandName,aCommandLine&#34;&gt;\n        &lt;parameters&gt;\n            &lt;parameter name&#61;&#34;SOME_VAR&#34;&gt;some value&lt;/parameter&gt;\n        &lt;/parameters&gt;\n    &lt;/environment&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.commandline.executor/org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent/ExtensionPoints/org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--environment",
              "id": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--environment",
              "label": "environment (org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent)",
              "name": "environment",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineDescriptor"
              ],
              "documentation": "\n      Extension point to contribute new commands.\n\n      Available options are:\n      - name: string attribute used as the command identifier.\n\n      - enabled: boolean attribute, command is unavailable if false.\n\n      - commandLine: the command to execute.\n\n      - parameterString: the parameters to pass to the command. Parameters like #{parameter} represents a file. So you\n      can use either a path to a file or a blob. Parameters like %parameters are literals.\n\n      - winParameterString: Same as above but used in windows environments. For instance you have to use double quotes\n      in windows instead of simple quote.\n\n      - winCommand: command to execute specifically for windows. Use commandLine is WinCommand is null;\n\n      @since 8.4\n      - testParameterString: the parameters to pass to the CommandTester. The CommandTester will run the command with\n      these params\n\n      @since 8.4\n      - winTestParameterString: same as above but used in windows environments.\n\n      - tester:  name of the CommandTester. The CommandTester defined in commandTester extension point. Default is\n      DefaultCommandTester, which looks if the command is available.\n\n      - readOutput: Boolean, default is true. If false, command output is never read.\n\n      - installationDirective: a String that is returned instead of the usual output when the command isn't available.\n\n      CommandLine contribution example:\n      <code>\n    <command enabled=\"true\" name=\"myCommand\">\n        <commandLine>commandName</commandLine>\n        <parameterString> -any -parameters '%specific' %parameters #{blobOrPath}</parameterString>\n        <winParameterString> -any -parameters \"%specific\" %parameters \" #{blobOrPath}</winParameterString>\n        <testParameterString> -any -parameters</testParameterString>\n        <winTestParameterString> -any -specific -windows -parameters</winTestParameterString>\n        <installationDirective>You need to install commandName.</installationDirective>\n    </command>\n</code>\n\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nExtension point to contribute new commands.\n</p><p>\nAvailable options are:\n- name: string attribute used as the command identifier.\n</p><p>\n- enabled: boolean attribute, command is unavailable if false.\n</p><p>\n- commandLine: the command to execute.\n</p><p>\n- parameterString: the parameters to pass to the command. Parameters like #{parameter} represents a file. So you\ncan use either a path to a file or a blob. Parameters like %parameters are literals.\n</p><p>\n- winParameterString: Same as above but used in windows environments. For instance you have to use double quotes\nin windows instead of simple quote.\n</p><p>\n- winCommand: command to execute specifically for windows. Use commandLine is WinCommand is null;\n</p><p>\n&#64;since 8.4\n- testParameterString: the parameters to pass to the CommandTester. The CommandTester will run the command with\nthese params\n</p><p>\n&#64;since 8.4\n- winTestParameterString: same as above but used in windows environments.\n</p><p>\n- tester:  name of the CommandTester. The CommandTester defined in commandTester extension point. Default is\nDefaultCommandTester, which looks if the command is available.\n</p><p>\n- readOutput: Boolean, default is true. If false, command output is never read.\n</p><p>\n- installationDirective: a String that is returned instead of the usual output when the command isn&#39;t available.\n</p><p>\nCommandLine contribution example:\n</p><p></p><pre><code>    &lt;command enabled&#61;&#34;true&#34; name&#61;&#34;myCommand&#34;&gt;\n        &lt;commandLine&gt;commandName&lt;/commandLine&gt;\n        &lt;parameterString&gt; -any -parameters &#39;%specific&#39; %parameters #{blobOrPath}&lt;/parameterString&gt;\n        &lt;winParameterString&gt; -any -parameters &#34;%specific&#34; %parameters &#34; #{blobOrPath}&lt;/winParameterString&gt;\n        &lt;testParameterString&gt; -any -parameters&lt;/testParameterString&gt;\n        &lt;winTestParameterString&gt; -any -specific -windows -parameters&lt;/winTestParameterString&gt;\n        &lt;installationDirective&gt;You need to install commandName.&lt;/installationDirective&gt;\n    &lt;/command&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.commandline.executor/org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent/ExtensionPoints/org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--command",
              "id": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--command",
              "label": "command (org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent)",
              "name": "command",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
              "descriptors": [
                "org.nuxeo.ecm.platform.commandline.executor.service.CommandTesterDescriptor"
              ],
              "documentation": "\n      Extension point to contribute new command testers.\n      It's a class that provides a way to test if a command is installed on the target server OS.\n\n      Available options are:\n      -name: the name of the commandTester.\n\n      -class: the class\n      implementing CommandTester interface.\n\n      Command tester contribution example:\n      <code>\n    <commandTester\n        class=\"org.nuxeo.ecm.platform.commandline.executor.service.cmdtesters.DefaultCommandTester\" name=\"DefaultCommandTester\"/>\n</code>\n\n\n      @author Thierry Delprat (td@nuxeo.com)\n    \n",
              "documentationHtml": "<p>\nExtension point to contribute new command testers.\nIt&#39;s a class that provides a way to test if a command is installed on the target server OS.\n</p><p>\nAvailable options are:\n-name: the name of the commandTester.\n</p><p>\n-class: the class\nimplementing CommandTester interface.\n</p><p>\nCommand tester contribution example:\n</p><p></p><pre><code>    &lt;commandTester\n        class&#61;&#34;org.nuxeo.ecm.platform.commandline.executor.service.cmdtesters.DefaultCommandTester&#34; name&#61;&#34;DefaultCommandTester&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.commandline.executor/org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent/ExtensionPoints/org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--commandTester",
              "id": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--commandTester",
              "label": "commandTester (org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent)",
              "name": "commandTester",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.commandline.executor/org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
          "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
          "requirements": [],
          "resolutionOrder": 259,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.commandline.executor/org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent/Services/org.nuxeo.ecm.platform.commandline.executor.api.CommandLineExecutorService",
              "id": "org.nuxeo.ecm.platform.commandline.executor.api.CommandLineExecutorService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 607,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n  <implementation class=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\" />\n\n  <documentation>\n    The CommandLineExecutor component let you define command line call using the command extension point.\n    You can call those commands with your own arguments like blobs or properties. The result is available\n    in the ExecResult object.\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.commandline.executor.api.CommandLineExecutorService\" />\n  </service>\n\n  <extension-point name=\"environment\">\n    <documentation>\n      Extension point to contribute environment configuration.\n\n      Available options are:\n      - name: comma-separated string attribute used as the environment parameters scope.\n      It can be empty to set environment parameters common to all commands, equal to a command name to set parameters\n      for that command only, or equal to a command line to set parameters common to all commands using that command line.\n      You can associate multiple commands using a comma as separator.\n\n      - workingDirectory: the Folder when command should be executed. Default is the system temporary folder.\n\n      - parameters/parameter\n\n      @author Thierry Delprat (td@nuxeo.com)\n\n      CommandLine contribution\n      example:\n      <code>\n        <environment name=\"aCommandName,aCommandLine\">\n          <parameters>\n            <parameter name=\"SOME_VAR\">some value</parameter>\n          </parameters>\n        </environment>\n      </code>\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.commandline.executor.service.EnvironmentDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"command\">\n    <documentation>\n      Extension point to contribute new commands.\n\n      Available options are:\n      - name: string attribute used as the command identifier.\n\n      - enabled: boolean attribute, command is unavailable if false.\n\n      - commandLine: the command to execute.\n\n      - parameterString: the parameters to pass to the command. Parameters like #{parameter} represents a file. So you\n      can use either a path to a file or a blob. Parameters like %parameters are literals.\n\n      - winParameterString: Same as above but used in windows environments. For instance you have to use double quotes\n      in windows instead of simple quote.\n\n      - winCommand: command to execute specifically for windows. Use commandLine is WinCommand is null;\n\n      @since 8.4\n      - testParameterString: the parameters to pass to the CommandTester. The CommandTester will run the command with\n      these params\n\n      @since 8.4\n      - winTestParameterString: same as above but used in windows environments.\n\n      - tester:  name of the CommandTester. The CommandTester defined in commandTester extension point. Default is\n      DefaultCommandTester, which looks if the command is available.\n\n      - readOutput: Boolean, default is true. If false, command output is never read.\n\n      - installationDirective: a String that is returned instead of the usual output when the command isn't available.\n\n      CommandLine contribution example:\n      <code>\n        <command name=\"myCommand\" enabled=\"true\">\n          <commandLine>commandName</commandLine>\n          <parameterString> -any -parameters '%specific' %parameters #{blobOrPath}</parameterString>\n          <winParameterString> -any -parameters \"%specific\" %parameters \" #{blobOrPath}</winParameterString>\n          <testParameterString> -any -parameters</testParameterString>\n          <winTestParameterString> -any -specific -windows -parameters</winTestParameterString>\n          <installationDirective>You need to install commandName.</installationDirective>\n        </command>\n      </code>\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"commandTester\">\n    <documentation>\n      Extension point to contribute new command testers.\n      It's a class that provides a way to test if a command is installed on the target server OS.\n\n      Available options are:\n      -name: the name of the commandTester.\n\n      -class: the class\n      implementing CommandTester interface.\n\n      Command tester contribution example:\n      <code>\n        <commandTester name=\"DefaultCommandTester\"\n          class=\"org.nuxeo.ecm.platform.commandline.executor.service.cmdtesters.DefaultCommandTester\">\n        </commandTester>\n      </code>\n\n      @author Thierry Delprat (td@nuxeo.com)\n    </documentation>\n    <object class=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandTesterDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/commandline-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "Default environment parameters.\n",
              "documentationHtml": "<p>\nDefault environment parameters.</p>",
              "extensionPoint": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--environment",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.commandline.executor/org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib/Contributions/org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib--environment",
              "id": "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib--environment",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"environment\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n    <documentation>Default environment parameters.</documentation>\n    <environment>\n      <parameters>\n        <!-- TMPDIR is the canonical Unix environment variable specified in various Unix and similar standards -->\n        <!-- TMP, TEMP and TEMPDIR are alternatively used by non-POSIX OS or non-standard programs -->\n        <!-- Windows/DOS programs randomly use TMP or TEMP environment variables -->\n        <parameter name=\"TMPDIR\">********</parameter>\n        <parameter name=\"TMP\">********</parameter>\n        <parameter name=\"TEMP\">********</parameter>\n        <parameter name=\"TEMPDIR\">********</parameter>\n      </parameters>\n    </environment>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "Simple default tester that only checks for command existence in the system path.\n",
              "documentationHtml": "<p>\nSimple default tester that only checks for command existence in the system path.</p>",
              "extensionPoint": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent--commandTester",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.commandline.executor/org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib/Contributions/org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib--commandTester",
              "id": "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib--commandTester",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"commandTester\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n    <documentation>Simple default tester that only checks for command existence in the system path.</documentation>\n    <commandTester class=\"org.nuxeo.ecm.platform.commandline.executor.service.cmdtesters.DefaultCommandTester\" name=\"DefaultCommandTester\">\n    </commandTester>\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.ecm.platform.commandline.executor/org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib/Contributions/org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib--command",
              "id": "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib--command",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n    <!-- timeout is used to set a time limit when running command, this definition checks if timeout is available -->\n    <command enabled=\"true\" name=\"timeout\">\n      <commandLine>timeout</commandLine>\n      <parameterString>--version</parameterString>\n    </command>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.commandline.executor/org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib",
          "name": "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib",
          "requirements": [],
          "resolutionOrder": 260,
          "services": [],
          "startOrder": 228,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\" point=\"environment\">\n    <documentation>Default environment parameters.</documentation>\n    <environment>\n      <parameters>\n        <!-- TMPDIR is the canonical Unix environment variable specified in various Unix and similar standards -->\n        <!-- TMP, TEMP and TEMPDIR are alternatively used by non-POSIX OS or non-standard programs -->\n        <!-- Windows/DOS programs randomly use TMP or TEMP environment variables -->\n        <parameter name=\"TMPDIR\">********</parameter>\n        <parameter name=\"TMP\">********</parameter>\n        <parameter name=\"TEMP\">********</parameter>\n        <parameter name=\"TEMPDIR\">********</parameter>\n      </parameters>\n    </environment>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\" point=\"commandTester\">\n    <documentation>Simple default tester that only checks for command existence in the system path.</documentation>\n    <commandTester name=\"DefaultCommandTester\" class=\"org.nuxeo.ecm.platform.commandline.executor.service.cmdtesters.DefaultCommandTester\">\n    </commandTester>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\" point=\"command\">\n    <!-- timeout is used to set a time limit when running command, this definition checks if timeout is available -->\n    <command name=\"timeout\" enabled=\"true\">\n      <commandLine>timeout</commandLine>\n      <parameterString>--version</parameterString>\n    </command>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/commandline-default-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-commandline-executor-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.commandline.executor",
      "id": "org.nuxeo.ecm.platform.commandline.executor",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.commandline.executor.api,org.nuxe\r\n o.ecm.platform.commandline.executor.service,org.nuxeo.ecm.platform.comm\r\n andline.executor.service.cmdtesters,org.nuxeo.ecm.platform.commandline.\r\n executor.service.executors\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Localization: plugin\r\nBundle-Name: Nuxeo CommandLine Executor\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/commandline-framework.xml,OSGI-INF/commandline\r\n -default-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.directory;api=split,org.nuxeo.osgi,org.\r\n nuxeo.runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.commandline.executor\r\n\r\n",
      "maxResolutionOrder": 260,
      "minResolutionOrder": 259,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-content-template-manager",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": 279,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.content.template.service.ContentTemplateService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 611,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/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": 280,
          "services": [],
          "startOrder": 246,
          "version": "2025.7.12",
          "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/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": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.content.template/org.nuxeo.ecm.platform.content.template.listener",
          "name": "org.nuxeo.ecm.platform.content.template.listener",
          "requirements": [],
          "resolutionOrder": 282,
          "services": [],
          "startOrder": 245,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.content.template",
      "id": "org.nuxeo.ecm.platform.content.template",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\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\",org.apache.commons.log\r\n ging,org.jboss.util,org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core\r\n ;api=split,org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.secu\r\n rity,org.nuxeo.ecm.core.event,org.nuxeo.ecm.core.event.impl,org.nuxeo.e\r\n cm.core.repository,org.nuxeo.ecm.directory;api=split,org.nuxeo.osgi,org\r\n .nuxeo.runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.content.template;singleton=t\r\n rue\r\n\r\n",
      "maxResolutionOrder": 282,
      "minResolutionOrder": 279,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.core.api"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-reload",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.reload",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.reload.ReloadComponent",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.reload/org.nuxeo.runtime.reload",
          "name": "org.nuxeo.runtime.reload",
          "requirements": [],
          "resolutionOrder": 608,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.reload",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.reload/org.nuxeo.runtime.reload/Services/org.nuxeo.runtime.reload.ReloadService",
              "id": "org.nuxeo.runtime.reload.ReloadService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 673,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.reload\">\n\n  <implementation class=\"org.nuxeo.runtime.reload.ReloadComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.reload.ReloadService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/reload-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-reload-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.reload",
      "id": "org.nuxeo.runtime.reload",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo Runtime Reload\r\nBundle-SymbolicName: org.nuxeo.runtime.reload;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Localization: bundle\r\nBundle-Category: runtime\r\nExport-Package: org.nuxeo.runtime.reload,\r\nBundle-ClassPath: .\r\nRequire-Bundle: org.nuxeo.runtime\r\nEclipse-LazyStart: true\r\nNuxeo-Component: OSGI-INF/reload-service.xml\r\n\r\n",
      "maxResolutionOrder": 608,
      "minResolutionOrder": 608,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.runtime"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-convert",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.convert",
      "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/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.convert.plugins/Contributions/org.nuxeo.ecm.platform.convert.plugins--converter",
              "id": "org.nuxeo.ecm.platform.convert.plugins--converter",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.UTF8CharsetConverter\" name=\"2utf8\">\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/csv</sourceMimeType>\n      <sourceMimeType>text/tsv</sourceMimeType>\n      <destinationMimeType>text/xml</destinationMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <destinationMimeType>text/csv</destinationMimeType>\n      <destinationMimeType>text/tsv</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.Zip2HtmlConverter\" name=\"zip2html\">\n      <destinationMimeType>text/html</destinationMimeType>\n      <sourceMimeType>application/zip</sourceMimeType>\n      <sourceMimeType>application/x-zip-compressed</sourceMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.WordPerfect2TextConverter\" name=\"wpd2text\">\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">wpd2text</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\" name=\"wpd2html\">\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.PDF2HtmlConverter\" name=\"pdf2html\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">pdftohtml</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\" name=\"pdf2text\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">pdftotext</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.PDF2ImageConverter\" name=\"pdf2image\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n      <destinationMimeType>image/gif</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">converter</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.Image2PDFConverter\" name=\"image2pdf\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">converter</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\" name=\"any2ods\">\n      <destinationMimeType>application/vnd.oasis.opendocument.spreadsheet</destinationMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/vnd.ms-excel</sourceMimeType>\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n      </sourceMimeType>\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.calc</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc.template</sourceMimeType>\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\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">ods</parameter>\n      </parameters>\n\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\" name=\"any2odp\">\n      <destinationMimeType>application/vnd.oasis.opendocument.presentation</destinationMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/vnd.ms-powerpoint</sourceMimeType>\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </sourceMimeType>\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.impress</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress.template</sourceMimeType>\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation-template\n      </sourceMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">odp</parameter>\n      </parameters>\n\n    </converter>\n\n    <converter bypassIfSameMimeType=\"true\" class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\" name=\"any2pdf\">\n      <destinationMimeType>application/pdf</destinationMimeType>\n\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <sourceMimeType>application/json</sourceMimeType>\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/partial</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <sourceMimeType>application/rtf</sourceMimeType>\n      <sourceMimeType>text/csv</sourceMimeType>\n      <sourceMimeType>text/tsv</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      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">pdf</parameter>\n      </parameters>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\" name=\"office2html\">\n      <destinationMimeType>text/html</destinationMimeType>\n\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\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      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">html</parameter>\n      </parameters>\n\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.Md2HtmlConverter\" name=\"md2html\">\n      <destinationMimeType>text/html</destinationMimeType>\n      <sourceMimeType>text/x-web-markdown</sourceMimeType>\n    </converter>\n\n    <converter name=\"md2pdf\">\n      <conversionSteps>\n        <subconverter>md2html</subconverter>\n        <subconverter>any2pdf</subconverter>\n      </conversionSteps>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.IWork2PDFConverter\" name=\"iwork2pdf\">\n      <destinationMimeType>application/pdf</destinationMimeType>\n      <sourceMimeType>application/vnd.apple.iwork</sourceMimeType>\n      <sourceMimeType>application/vnd.apple.pages</sourceMimeType>\n      <sourceMimeType>application/vnd.apple.numbers</sourceMimeType>\n      <sourceMimeType>application/vnd.apple.keynote</sourceMimeType>\n    </converter>\n\n    <converter name=\"iwork2html\">\n      <conversionSteps>\n        <subconverter>iwork2pdf</subconverter>\n        <subconverter>pdf2html</subconverter>\n      </conversionSteps>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.convert.plugins",
          "name": "org.nuxeo.ecm.platform.convert.plugins",
          "requirements": [],
          "resolutionOrder": 283,
          "services": [],
          "startOrder": 250,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.convert.plugins\">\n\n  <extension target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\" point=\"converter\">\n\n    <converter name=\"2utf8\" class=\"org.nuxeo.ecm.platform.convert.plugins.UTF8CharsetConverter\">\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/csv</sourceMimeType>\n      <sourceMimeType>text/tsv</sourceMimeType>\n      <destinationMimeType>text/xml</destinationMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <destinationMimeType>text/csv</destinationMimeType>\n      <destinationMimeType>text/tsv</destinationMimeType>\n    </converter>\n\n    <converter name=\"zip2html\" class=\"org.nuxeo.ecm.platform.convert.plugins.Zip2HtmlConverter\">\n      <destinationMimeType>text/html</destinationMimeType>\n      <sourceMimeType>application/zip</sourceMimeType>\n      <sourceMimeType>application/x-zip-compressed</sourceMimeType>\n    </converter>\n\n    <converter name=\"wpd2text\" class=\"org.nuxeo.ecm.platform.convert.plugins.WordPerfect2TextConverter\">\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">wpd2text</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"wpd2html\" class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\">\n      <sourceMimeType>application/wordperfect</sourceMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n    </converter>\n\n    <converter name=\"pdf2html\" class=\"org.nuxeo.ecm.platform.convert.plugins.PDF2HtmlConverter\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>text/html</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">pdftohtml</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"pdf2text\" class=\"org.nuxeo.ecm.platform.convert.plugins.CommandLineConverter\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>text/plain</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">pdftotext</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"pdf2image\" class=\"org.nuxeo.ecm.platform.convert.plugins.PDF2ImageConverter\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <destinationMimeType>image/jpeg</destinationMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n      <destinationMimeType>image/gif</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">converter</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"image2pdf\" class=\"org.nuxeo.ecm.platform.convert.plugins.Image2PDFConverter\">\n      <sourceMimeType>image/*</sourceMimeType>\n      <sourceMimeType>application/illustrator</sourceMimeType>\n      <sourceMimeType>application/photoshop</sourceMimeType>\n      <sourceMimeType>application/postscript</sourceMimeType>\n      <destinationMimeType>application/pdf</destinationMimeType>\n      <parameters>\n        <parameter name=\"CommandLineName\">converter</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"any2ods\" class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\">\n      <destinationMimeType>application/vnd.oasis.opendocument.spreadsheet</destinationMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/vnd.ms-excel</sourceMimeType>\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\n      </sourceMimeType>\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.calc</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.calc.template</sourceMimeType>\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\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">ods</parameter>\n      </parameters>\n\n    </converter>\n\n    <converter name=\"any2odp\" class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\">\n      <destinationMimeType>application/vnd.oasis.opendocument.presentation</destinationMimeType>\n\n      <!-- Microsoft office documents -->\n      <sourceMimeType>application/vnd.ms-powerpoint</sourceMimeType>\n      <!-- Microsoft office 2007 documents -->\n      <sourceMimeType>\n        application/vnd.openxmlformats-officedocument.presentationml.presentation\n      </sourceMimeType>\n      <!-- OpenOffice.org 1.x documents -->\n      <sourceMimeType>application/vnd.sun.xml.impress</sourceMimeType>\n      <sourceMimeType>application/vnd.sun.xml.impress.template</sourceMimeType>\n      <!-- OpenOffice.org 2.x documents -->\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation\n      </sourceMimeType>\n      <sourceMimeType>\n        application/vnd.oasis.opendocument.presentation-template\n      </sourceMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">odp</parameter>\n      </parameters>\n\n    </converter>\n\n    <converter name=\"any2pdf\" class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\"\n               bypassIfSameMimeType=\"true\">\n      <destinationMimeType>application/pdf</destinationMimeType>\n\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <sourceMimeType>application/json</sourceMimeType>\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/partial</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <sourceMimeType>application/rtf</sourceMimeType>\n      <sourceMimeType>text/csv</sourceMimeType>\n      <sourceMimeType>text/tsv</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      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">pdf</parameter>\n      </parameters>\n    </converter>\n\n    <converter name=\"office2html\" class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\">\n      <destinationMimeType>text/html</destinationMimeType>\n\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\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      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">html</parameter>\n      </parameters>\n\n    </converter>\n\n    <converter name=\"md2html\" class=\"org.nuxeo.ecm.platform.convert.plugins.Md2HtmlConverter\">\n      <destinationMimeType>text/html</destinationMimeType>\n      <sourceMimeType>text/x-web-markdown</sourceMimeType>\n    </converter>\n\n    <converter name=\"md2pdf\">\n      <conversionSteps>\n        <subconverter>md2html</subconverter>\n        <subconverter>any2pdf</subconverter>\n      </conversionSteps>\n    </converter>\n\n    <converter name=\"iwork2pdf\" class=\"org.nuxeo.ecm.platform.convert.plugins.IWork2PDFConverter\">\n      <destinationMimeType>application/pdf</destinationMimeType>\n      <sourceMimeType>application/vnd.apple.iwork</sourceMimeType>\n      <sourceMimeType>application/vnd.apple.pages</sourceMimeType>\n      <sourceMimeType>application/vnd.apple.numbers</sourceMimeType>\n      <sourceMimeType>application/vnd.apple.keynote</sourceMimeType>\n    </converter>\n\n    <converter name=\"iwork2html\">\n      <conversionSteps>\n        <subconverter>iwork2pdf</subconverter>\n        <subconverter>pdf2html</subconverter>\n      </conversionSteps>\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.commandline.executor.service.CommandLineExecutorComponent--command",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.convert.commandline.imagemagick/Contributions/org.nuxeo.ecm.platform.convert.commandline.imagemagick--command",
              "id": "org.nuxeo.ecm.platform.convert.commandline.imagemagick--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": "2025.7.12",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"converter\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.convert.commandline.imagemagick",
          "name": "org.nuxeo.ecm.platform.convert.commandline.imagemagick",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 284,
          "services": [],
          "startOrder": 248,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.convert.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\" point=\"command\">\n\n    <command name=\"converter\" enabled=\"true\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet #{inputFilePath}[0] #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/commandline-imagemagick-convert-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/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.commandline.executor.service.testContrib.magic2/Contributions/org.nuxeo.ecm.platform.commandline.executor.service.testContrib.magic2--command",
              "id": "org.nuxeo.ecm.platform.commandline.executor.service.testContrib.magic2--command",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"pdftohtml\">\n      <commandLine>pdftohtml</commandLine>\n      <parameterString> -c -nodrm -enc UTF-8 -noframes #{inFilePath} #{outDirPath}/index.html</parameterString>\n      <winParameterString> -c -nodrm -enc UTF-8 -noframes #{inFilePath} #{outDirPath}\\index.html</winParameterString>\n      <installationDirective>You need to install pdftohtml</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.commandline.executor.service.testContrib.magic2",
          "name": "org.nuxeo.ecm.platform.commandline.executor.service.testContrib.magic2",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 285,
          "services": [],
          "startOrder": 230,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.commandline.executor.service.testContrib.magic2\">\n\n  <require>org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib</require>\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\"\n    point=\"command\">\n\n    <command name=\"pdftohtml\" enabled=\"true\">\n      <commandLine>pdftohtml</commandLine>\n      <parameterString> -c -nodrm -enc UTF-8 -noframes #{inFilePath} #{outDirPath}/index.html</parameterString>\n      <winParameterString> -c -nodrm -enc UTF-8 -noframes #{inFilePath} #{outDirPath}\\index.html</winParameterString>\n      <installationDirective>You need to install pdftohtml</installationDirective>\n    </command>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/commandline-pdf2html-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/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.commandline.executor.service.wpd2text.contrib/Contributions/org.nuxeo.ecm.platform.commandline.executor.service.wpd2text.contrib--command",
              "id": "org.nuxeo.ecm.platform.commandline.executor.service.wpd2text.contrib--command",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n    <command enabled=\"true\" name=\"wpd2text\">\n      <commandLine>wpd2text</commandLine>\n      <parameterString> #{inFilePath}</parameterString>\n      <installationDirective>You need to install wpd2text (deb: libwpd-tools)  http://libwpd.sourceforge.net/download.html</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.commandline.executor.service.wpd2text.contrib",
          "name": "org.nuxeo.ecm.platform.commandline.executor.service.wpd2text.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 286,
          "services": [],
          "startOrder": 231,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.commandline.executor.service.wpd2text.contrib\">\n\n  <require>org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib</require>\n  <extension target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\"\n    point=\"command\">\n    <command name=\"wpd2text\" enabled=\"true\">\n      <commandLine>wpd2text</commandLine>\n      <parameterString> #{inFilePath}</parameterString>\n      <installationDirective>You need to install wpd2text (deb: libwpd-tools)  http://libwpd.sourceforge.net/download.html</installationDirective>\n    </command>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/commandline-wpd2text-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/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.commandline.executor.service.soffice/Contributions/org.nuxeo.ecm.platform.commandline.executor.service.soffice--command",
              "id": "org.nuxeo.ecm.platform.commandline.executor.service.soffice--command",
              "registrationOrder": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "name": "org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n    <command enabled=\"true\" name=\"soffice\">\n      <commandLine>soffice</commandLine>\n      <winCommand>soffice.exe</winCommand>\n      <parameterString>--headless --norestore --writer --convert-to #{format} #{sourceFilePath} --outdir #{outDirPath} -env:UserInstallation=#{userInstallation}</parameterString>\n      <testParameterString>--version</testParameterString>\n      <winTestParameterString>--headless --cat test</winTestParameterString>\n      <installationDirective>You need to install LibreOffice and add soffice to the PATH environment variable.\n      </installationDirective>\n    </command>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.convert/org.nuxeo.ecm.platform.commandline.executor.service.soffice",
          "name": "org.nuxeo.ecm.platform.commandline.executor.service.soffice",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 287,
          "services": [],
          "startOrder": 229,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.commandline.executor.service.soffice\">\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    <command name=\"soffice\" enabled=\"true\">\n      <commandLine>soffice</commandLine>\n      <winCommand>soffice.exe</winCommand>\n      <parameterString>--headless --norestore --writer --convert-to #{format} #{sourceFilePath} --outdir #{outDirPath} -env:UserInstallation=#{userInstallation}</parameterString>\n      <testParameterString>--version</testParameterString>\n      <winTestParameterString>--headless --cat test</winTestParameterString>\n      <installationDirective>You need to install LibreOffice and add soffice to the PATH environment variable.\n      </installationDirective>\n    </command>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/commandline-soffice-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-convert-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.convert",
      "id": "org.nuxeo.ecm.platform.convert",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.convert.ooomanager,org.nuxeo.ecm.\r\n platform.convert.plugins\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Localization: plugin\r\nBundle-Name: NXPlatformConvertPlugins\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/convert-service-contrib.xml,OSGI-INF/commandli\r\n ne-imagemagick-convert-contrib.xml,OSGI-INF/commandline-pdf2html-contri\r\n b.xml,OSGI-INF/commandline-wpd2text-contrib.xml,OSGI-INF/commandline-so\r\n ffice-contrib.xml\r\nImport-Package: com.sun.star.beans;ridl=split,com.sun.star.bridge,com.su\r\n n.star.comp.helper,com.sun.star.connection,com.sun.star.container,com.s\r\n un.star.frame,com.sun.star.io,com.sun.star.lang,com.sun.star.lib.uno.he\r\n lper,com.sun.star.uno,javax.xml.parsers,org.apache.commons.io,org.apach\r\n e.commons.logging,org.nuxeo.common.utils,org.nuxeo.common.xmap.annotati\r\n on,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,org.nu\r\n xeo.ecm.core.api.blobholder,org.nuxeo.ecm.core.api.impl.blob,org.nuxeo.\r\n ecm.core.convert.api,org.nuxeo.ecm.core.convert.cache,org.nuxeo.ecm.cor\r\n e.convert.extension,org.nuxeo.ecm.directory;api=split,org.nuxeo.ecm.pla\r\n tform.commandline.executor.api,org.nuxeo.ecm.platform.mimetype,org.nuxe\r\n o.ecm.platform.mimetype.interfaces,org.nuxeo.osgi,org.nuxeo.runtime.api\r\n ,org.nuxeo.runtime.model,org.nuxeo.runtime.services.streaming,org.osgi.\r\n framework;version=\"1.4\",org.xml.sax,org.xml.sax.helpers\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.convert;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 287,
      "minResolutionOrder": 283,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-stream",
      "artifactVersion": "2025.7.12",
      "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": "2025.7"
      },
      "bundleId": "org.nuxeo.runtime.stream",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.kafka.KafkaConfigServiceImpl",
          "declaredStartOrder": -600,
          "documentation": "\n    The component allows to register Kafka configuration and producer and consumer properties.\n  \n",
          "documentationHtml": "<p>\nThe component allows to register Kafka configuration and producer and consumer properties.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.stream.kafka.service",
              "descriptors": [
                "org.nuxeo.runtime.kafka.KafkaConfigDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.stream.kafka.service/ExtensionPoints/org.nuxeo.runtime.stream.kafka.service--kafkaConfig",
              "id": "org.nuxeo.runtime.stream.kafka.service--kafkaConfig",
              "label": "kafkaConfig (org.nuxeo.runtime.stream.kafka.service)",
              "name": "kafkaConfig",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.stream.kafka.service",
          "name": "org.nuxeo.runtime.stream.kafka.service",
          "requirements": [],
          "resolutionOrder": 609,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.stream.kafka.service",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.stream.kafka.service/Services/org.nuxeo.runtime.kafka.KafkaConfigService",
              "id": "org.nuxeo.runtime.kafka.KafkaConfigService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 7,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.runtime.stream.kafka.service\" version=\"1.0\">\n\n  <documentation>\n    The component allows to register Kafka configuration and producer and consumer properties.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.kafka.KafkaConfigServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.kafka.KafkaConfigService\" />\n  </service>\n\n  <extension-point name=\"kafkaConfig\">\n    <object class=\"org.nuxeo.runtime.kafka.KafkaConfigDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/kafka-config-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.stream.StreamServiceImpl",
          "declaredStartOrder": -590,
          "documentation": "\n    The component allows to register log configurations and Log and Stream processors.\n  \n",
          "documentationHtml": "<p>\nThe component allows to register log configurations and Log and Stream processors.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.stream.service",
              "descriptors": [
                "org.nuxeo.runtime.stream.LogConfigDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.stream.service/ExtensionPoints/org.nuxeo.runtime.stream.service--logConfig",
              "id": "org.nuxeo.runtime.stream.service--logConfig",
              "label": "logConfig (org.nuxeo.runtime.stream.service)",
              "name": "logConfig",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.stream.service",
              "descriptors": [
                "org.nuxeo.runtime.stream.StreamProcessorDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.stream.service/ExtensionPoints/org.nuxeo.runtime.stream.service--streamProcessor",
              "id": "org.nuxeo.runtime.stream.service--streamProcessor",
              "label": "streamProcessor (org.nuxeo.runtime.stream.service)",
              "name": "streamProcessor",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.stream.service/Contributions/org.nuxeo.runtime.stream.service--streamProcessor",
              "id": "org.nuxeo.runtime.stream.service--streamProcessor",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.runtime.stream.StreamMetricsProcessor\" enabled=\"true\" name=\"metrics\">\n      <!-- To handle a MSK rolling upgrade we need 30min retries -->\n      <policy continueOnFailure=\"false\" delay=\"15s\" maxDelay=\"120s\" maxRetries=\"18\" name=\"default\"/>\n      <stream codec=\"avro\" name=\"input/null\" partitions=\"1\"/>\n      <computation concurrency=\"1\" name=\"stream/metrics\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.stream.service",
          "name": "org.nuxeo.runtime.stream.service",
          "requirements": [],
          "resolutionOrder": 610,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.stream.service",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.stream.service/Services/org.nuxeo.runtime.stream.StreamService",
              "id": "org.nuxeo.runtime.stream.StreamService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 8,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.runtime.stream.service\" version=\"1.0\">\n\n  <documentation>\n    The component allows to register log configurations and Log and Stream processors.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.stream.StreamServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.stream.StreamService\" />\n  </service>\n\n  <extension-point name=\"logConfig\">\n    <object class=\"org.nuxeo.runtime.stream.LogConfigDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"streamProcessor\">\n    <object class=\"org.nuxeo.runtime.stream.StreamProcessorDescriptor\" />\n  </extension-point>\n\n  <extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor name=\"metrics\" class=\"org.nuxeo.runtime.stream.StreamMetricsProcessor\" enabled=\"${metrics.streams.enabled:=false}\">\n      <!-- To handle a MSK rolling upgrade we need 30min retries -->\n      <policy name=\"default\" maxRetries=\"18\" delay=\"15s\" maxDelay=\"120s\" continueOnFailure=\"false\" />\n      <stream name=\"input/null\" partitions=\"1\" codec=\"avro\" />\n      <computation name=\"stream/metrics\" concurrency=\"1\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/stream-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.avro.AvroComponent",
          "declaredStartOrder": -600,
          "documentation": "\n    The Avro component.\n    It provides services\n    - that allow to register and retrieve schemas\n    - that allow to create Avro schemas from custom types\n    - that allow to map Avro records from/to custom types\n  \n",
          "documentationHtml": "<p>\nThe Avro component.\nIt provides services\n- that allow to register and retrieve schemas\n- that allow to create Avro schemas from custom types\n- that allow to map Avro records from/to custom types\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.avro",
              "descriptors": [
                "org.nuxeo.runtime.avro.AvroSchemaDescriptor"
              ],
              "documentation": "\n      Allows to register an Avro schema file with a name.\n    \n",
              "documentationHtml": "<p>\nAllows to register an Avro schema file with a name.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.avro/ExtensionPoints/org.nuxeo.runtime.avro--schema",
              "id": "org.nuxeo.runtime.avro--schema",
              "label": "schema (org.nuxeo.runtime.avro)",
              "name": "schema",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.avro",
              "descriptors": [
                "org.nuxeo.runtime.avro.AvroSchemaFactoryDescriptor"
              ],
              "documentation": "\n      Allows to register an Avro Factory implementation dedicated to a custom type.\n    \n",
              "documentationHtml": "<p>\nAllows to register an Avro Factory implementation dedicated to a custom type.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.avro/ExtensionPoints/org.nuxeo.runtime.avro--factory",
              "id": "org.nuxeo.runtime.avro--factory",
              "label": "factory (org.nuxeo.runtime.avro)",
              "name": "factory",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.avro",
              "descriptors": [
                "org.nuxeo.runtime.avro.AvroReplacementDescriptor"
              ],
              "documentation": "\n      Allows to register a replacement scheme for any string not supported by Avro.\n    \n",
              "documentationHtml": "<p>\nAllows to register a replacement scheme for any string not supported by Avro.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.avro/ExtensionPoints/org.nuxeo.runtime.avro--replacement",
              "id": "org.nuxeo.runtime.avro--replacement",
              "label": "replacement (org.nuxeo.runtime.avro)",
              "name": "replacement",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.avro",
              "descriptors": [
                "org.nuxeo.runtime.avro.AvroMapperDescriptor"
              ],
              "documentation": "\n      Allows to register an Avro Mapper implementation dedicated to a custom type.\n    \n",
              "documentationHtml": "<p>\nAllows to register an Avro Mapper implementation dedicated to a custom type.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.avro/ExtensionPoints/org.nuxeo.runtime.avro--mapper",
              "id": "org.nuxeo.runtime.avro--mapper",
              "label": "mapper (org.nuxeo.runtime.avro)",
              "name": "mapper",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.avro",
          "name": "org.nuxeo.runtime.avro",
          "requirements": [],
          "resolutionOrder": 617,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.avro",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.avro/Services/org.apache.avro.message.SchemaStore",
              "id": "org.apache.avro.message.SchemaStore",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.avro",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.avro/Services/org.nuxeo.runtime.avro.AvroService",
              "id": "org.nuxeo.runtime.avro.AvroService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 5,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.runtime.avro\" version=\"1.0\">\n\n  <documentation>\n    The Avro component.\n    It provides services\n    - that allow to register and retrieve schemas\n    - that allow to create Avro schemas from custom types\n    - that allow to map Avro records from/to custom types\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.avro.AvroComponent\" />\n\n  <service>\n    <provide interface=\"org.apache.avro.message.SchemaStore\" />\n    <provide interface=\"org.nuxeo.runtime.avro.AvroService\" />\n  </service>\n\n  <extension-point name=\"schema\">\n    <documentation>\n      Allows to register an Avro schema file with a name.\n    </documentation>\n    <object class=\"org.nuxeo.runtime.avro.AvroSchemaDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"factory\">\n    <documentation>\n      Allows to register an Avro Factory implementation dedicated to a custom type.\n    </documentation>\n    <object class=\"org.nuxeo.runtime.avro.AvroSchemaFactoryDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"replacement\">\n    <documentation>\n      Allows to register a replacement scheme for any string not supported by Avro.\n    </documentation>\n    <object class=\"org.nuxeo.runtime.avro.AvroReplacementDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"mapper\">\n    <documentation>\n      Allows to register an Avro Mapper implementation dedicated to a custom type.\n    </documentation>\n    <object class=\"org.nuxeo.runtime.avro.AvroMapperDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/avro-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.codec.CodecServiceImpl",
          "declaredStartOrder": -600,
          "documentation": "\n    The component allows you to register a Codec to encode records.\n  \n",
          "documentationHtml": "<p>\nThe component allows you to register a Codec to encode records.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.codec.service",
              "descriptors": [
                "org.nuxeo.runtime.codec.CodecDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.codec.service/ExtensionPoints/org.nuxeo.runtime.codec.service--codec",
              "id": "org.nuxeo.runtime.codec.service--codec",
              "label": "codec (org.nuxeo.runtime.codec.service)",
              "name": "codec",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.codec.service--codec",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.codec.service/Contributions/org.nuxeo.runtime.codec.service--codec",
              "id": "org.nuxeo.runtime.codec.service--codec",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.codec.service",
                "name": "org.nuxeo.runtime.codec.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"codec\" target=\"org.nuxeo.runtime.codec.service\">\n    <codec class=\"org.nuxeo.runtime.codec.NoCodecFactory\" name=\"legacy\"/>\n    <codec class=\"org.nuxeo.runtime.codec.SerializableCodecFactory\" name=\"java\"/>\n    <codec class=\"org.nuxeo.runtime.codec.AvroCodecFactory\" name=\"avro\">\n      <option name=\"encoding\">message</option>\n    </codec>\n    <codec class=\"org.nuxeo.runtime.codec.AvroCodecFactory\" name=\"avroBinary\">\n      <option name=\"encoding\">binary</option>\n    </codec>\n    <codec class=\"org.nuxeo.runtime.codec.AvroCodecFactory\" name=\"avroJson\">\n      <option name=\"encoding\">json</option>\n    </codec>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.codec.service",
          "name": "org.nuxeo.runtime.codec.service",
          "requirements": [],
          "resolutionOrder": 618,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.codec.service",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.codec.service/Services/org.nuxeo.runtime.codec.CodecService",
              "id": "org.nuxeo.runtime.codec.CodecService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 6,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.runtime.codec.service\" version=\"1.0\">\n\n  <documentation>\n    The component allows you to register a Codec to encode records.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.runtime.codec.CodecServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.codec.CodecService\" />\n  </service>\n\n  <extension-point name=\"codec\">\n    <object class=\"org.nuxeo.runtime.codec.CodecDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.runtime.codec.service\" point=\"codec\">\n    <codec name=\"legacy\" class=\"org.nuxeo.runtime.codec.NoCodecFactory\" />\n    <codec name=\"java\" class=\"org.nuxeo.runtime.codec.SerializableCodecFactory\" />\n    <codec name=\"avro\" class=\"org.nuxeo.runtime.codec.AvroCodecFactory\">\n      <option name=\"encoding\">message</option>\n    </codec>\n    <codec name=\"avroBinary\" class=\"org.nuxeo.runtime.codec.AvroCodecFactory\">\n      <option name=\"encoding\">binary</option>\n    </codec>\n    <codec name=\"avroJson\" class=\"org.nuxeo.runtime.codec.AvroCodecFactory\">\n      <option name=\"encoding\">json</option>\n    </codec>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/codec-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Avro basic replacements.\n  \n",
          "documentationHtml": "<p>\nAvro basic replacements.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.avro--replacement",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.avro.contrib/Contributions/org.nuxeo.runtime.avro.contrib--replacement",
              "id": "org.nuxeo.runtime.avro.contrib--replacement",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.avro",
                "name": "org.nuxeo.runtime.avro",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"replacement\" target=\"org.nuxeo.runtime.avro\">\n    <replacement forbidden=\"__\" priority=\"-100\" replacement=\"____\"/>\n    <replacement forbidden=\"-\" replacement=\"__dash__\"/>\n    <replacement forbidden=\":\" replacement=\"__colon__\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream/org.nuxeo.runtime.avro.contrib",
          "name": "org.nuxeo.runtime.avro.contrib",
          "requirements": [],
          "resolutionOrder": 619,
          "services": [],
          "startOrder": 506,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.runtime.avro.contrib\" version=\"1.0.0\">\n  <documentation>\n    Avro basic replacements.\n  </documentation>\n  <extension target=\"org.nuxeo.runtime.avro\" point=\"replacement\">\n    <replacement forbidden=\"__\" replacement=\"____\" priority=\"-100\" />\n    <replacement forbidden=\"-\" replacement=\"__dash__\" />\n    <replacement forbidden=\":\" replacement=\"__colon__\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/avro-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-runtime-stream-2025.7.12.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.stream",
      "id": "org.nuxeo.runtime.stream",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Runtime Stream\r\nBundle-SymbolicName: org.nuxeo.runtime.stream;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/kafka-config-service.xml,OSGI-INF/stream-servi\r\n ce.xml,OSGI-INF/avro-service.xml,OSGI-INF/codec-service.xml,OSGI-INF/av\r\n ro-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 619,
      "minResolutionOrder": 609,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "nuxeo-runtime-stream\n======================\n\n## About\n\nThis module provides an integration of nuxeo-stream with Nuxeo.\nIt adds 2 services:\n- a Kafka configuration service: to register Kafka and Zookeeper access and consumer producer properties.\n- a Stream service: to define LogManager configuration, initialize Log and start StreamProcessor.\n\n## Kafka Configurations\n\n You can register one or multiple Kafka configurations using this Nuxeo extension point:\n\n```xml\n<?xml version=\"1.0\"?>\n<component name=\"my.project.kafka.contrib\">\n  <extension target=\"org.nuxeo.runtime.stream.kafka.service\" point=\"kafkaConfig\">\n    <kafkaConfig name=\"default\" topicPrefix=\"nuxeo-\">\n      <producer>\n        <property name=\"bootstrap.servers\">localhost:9092</property>\n      </producer>\n      <consumer>\n        <property name=\"bootstrap.servers\">localhost:9092</property>\n        <property name=\"request.timeout.ms\">65000</property>\n        <property name=\"max.poll.interval.ms\">60000</property>\n        <property name=\"session.timeout.ms\">20000</property>\n        <property name=\"heartbeat.interval.ms\">1000</property>\n        <property name=\"max.poll.records\">50</property>\n      </consumer>\n    </kafkaConfig>\n  </extension>\n</component>\n```\n\nThis Kafka configuration named `default` can be used in the Log configuration below.\n\nMake sure you have read the [nuxeo-stream README](../nuxeo-stream/README.md) to setup properly Kafka.\n\n\n## Stream Service\n\nThis service enable to define Log configurations and to register stream processors.\n\n### The Log configuration\n\nThere are 2 types of Log configurations:\n\n- In-Memory: limited for single node: all producers and consumers must be on the same node. No persistence.\n- Kafka: required for distributed producers and consumers.\n\nYou can define a Log configuration with the following Nuxeo extension point:\n\n```xml\n<?xml version=\"1.0\"?>\n<component name=\"my.project.stream.log.contrib\">\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"logConfig\">\n    ... (see documentation) ...\n  </extension>\n</component>\n```\n\nThe default Log type is In-Memory.\n\n#### Using Log from Nuxeo\n\nThe Nuxeo Stream service enables to get and share access to LogManager:\n\n```java\n  StreamService service = Framework.getService(StreamService.class);\n  LogManager manager = service.getLogManager(\"custom\");\n  // write a record to myStream, the log exists because it has been initialized by the service\n  LogAppender<Record> appender = manager.getAppender(\"myStream\");\n  appender.append(key, Record.of(key, value.getBytes()));\n\n  // read\n  try (LogTailer<Record> tailer = manager.createTailer(\"myGroup\", \"myStream\")) {\n      LogRecord<Record> logRecord = tailer.read(Duration.ofSeconds(1));\n      assertEquals(key, logRecord.message().key);\n  }\n  // don't close the manager, this is done by the service\n```\n\n### Stream processing\n\nIt is possible to register stream processors, this way they are initialized and started with Nuxeo.\n\nThe extension point refer to a class that returns the topology of computations,\nthe settings are configurable in the contribution.\nAlso the retry policy can be set to a specific computation or for all using `default` as policy name,\nthe `delay` between retries, exponentially backing off to the `maxDelay` and multiplying successive delays by a 2 factor\nthe `maxRetries` sets the max number of retries to perform. If `continueOnFailure` is true then the computation\nwill checkpoint the record in error and continue processing new record.\nThe default policy when unspecified is no retry and abort on failure (`continueOnFailure` is false).\n\n```xml\n<?xml version=\"1.0\"?>\n<component name=\"my.project.stream.stream.contrib\">\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n  <streamProcessor name=\"myStreamProcessor\" logConfig=\"default\" defaultConcurrency=\"4\" defaultPartitions=\"12\"\n      class=\"org.nuxeo.runtime.stream.tests.MyStreamProcessor\">\n      <stream name=\"output\" partitions=\"1\" />\n      <computation name=\"myComputation\" concurrency=\"8\" />\n      <policy name=\"myComputation\" continueOnFailure=\"false\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" />\n    </streamProcessor>\n  </extension>\n</component>\n```\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": "97434befb9a52c97e891dc46b8da2c45",
        "encoding": "UTF-8",
        "length": 4869,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-csv-export",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.csv.export",
      "components": [
        {
          "@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/org.nuxeo.ecm.platform.csv.export/org.nuxeo.ecm.platform.csv.export.config/Contributions/org.nuxeo.ecm.platform.csv.export.config--actions",
              "id": "org.nuxeo.ecm.platform.csv.export.config--actions",
              "registrationOrder": 7,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"50\" bucketSize=\"100\" defaultQueryLimit=\"100000\" defaultScroller=\"elastic\" httpEnabled=\"true\" inputStream=\"bulk/csvExport\" name=\"csvExport\" validationClass=\"org.nuxeo.ecm.platform.csv.export.validation.CSVExportValidation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.csv.export/org.nuxeo.ecm.platform.csv.export.config/Contributions/org.nuxeo.ecm.platform.csv.export.config--streamProcessor",
              "id": "org.nuxeo.ecm.platform.csv.export.config--streamProcessor",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <!-- CSV exporter processor -->\n    <streamProcessor class=\"org.nuxeo.ecm.platform.csv.export.action.CSVExportAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"csvExport\">\n      <policy continueOnFailure=\"true\" delay=\"1s\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n      <stream name=\"bulk/makeBlob\">\n        <filter class=\"org.nuxeo.ecm.core.transientstore.computation.TransientStoreOverflowRecordFilter\" name=\"overflow\">\n          <option name=\"storeName\">default</option>\n          <option name=\"prefix\">csvoverflow</option>\n          <option name=\"thresholdSize\">990000</option>\n        </filter>\n      </stream>\n      <option name=\"produceImmediate\">true</option>\n    </streamProcessor>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent--store",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.csv.export/org.nuxeo.ecm.platform.csv.export.config/Contributions/org.nuxeo.ecm.platform.csv.export.config--store",
              "id": "org.nuxeo.ecm.platform.csv.export.config--store",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "name": "org.nuxeo.ecm.core.transientstore.TransientStorageComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"store\" target=\"org.nuxeo.ecm.core.transientstore.TransientStorageComponent\">\n    <!-- Explicit declaration based on default configuration to enforce GC -->\n    <store name=\"csvExport\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.csv.export/org.nuxeo.ecm.platform.csv.export.config",
          "name": "org.nuxeo.ecm.platform.csv.export.config",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 288,
          "services": [],
          "startOrder": 253,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.csv.export.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=\"csvExport\" inputStream=\"bulk/csvExport\" bucketSize=\"100\" batchSize=\"50\" httpEnabled=\"true\"\n      defaultScroller=\"${nuxeo.core.bulk.csvExport.scroller:=default}\"\n      defaultQueryLimit=\"${nuxeo.core.bulk.csvExport.queryLimit:=100000}\"\n      validationClass=\"org.nuxeo.ecm.platform.csv.export.validation.CSVExportValidation\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <!-- CSV exporter processor -->\n    <streamProcessor name=\"csvExport\" class=\"org.nuxeo.ecm.platform.csv.export.action.CSVExportAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.csvExport.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.csvExport.defaultPartitions:=4}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"1s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n      <stream name=\"bulk/makeBlob\">\n        <filter name=\"overflow\" class=\"org.nuxeo.ecm.core.transientstore.computation.TransientStoreOverflowRecordFilter\">\n          <option name=\"storeName\">default</option>\n          <option name=\"prefix\">csvoverflow</option>\n          <option name=\"thresholdSize\">990000</option>\n        </filter>\n      </stream>\n      <option name=\"produceImmediate\">true</option>\n    </streamProcessor>\n  </extension>\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=\"csvExport\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/csv-export-config.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Core IO CSV registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nCore IO CSV 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/org.nuxeo.ecm.platform.csv.export/org.nuxeo.ecm.core.io.MarshallerRegistry.csv.marshallers/Contributions/org.nuxeo.ecm.core.io.MarshallerRegistry.csv.marshallers--marshallers",
              "id": "org.nuxeo.ecm.core.io.MarshallerRegistry.csv.marshallers--marshallers",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.csv.export.io.DocumentModelListCSVWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.csv.export.io.DocumentModelCSVWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.csv.export.io.DocumentPropertyCSVWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.csv.export/org.nuxeo.ecm.core.io.MarshallerRegistry.csv.marshallers",
          "name": "org.nuxeo.ecm.core.io.MarshallerRegistry.csv.marshallers",
          "requirements": [],
          "resolutionOrder": 289,
          "services": [],
          "startOrder": 119,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.io.MarshallerRegistry.csv.marshallers\" version=\"1.0.0\">\n  <documentation>\n    Core IO CSV registered marshallers set.\n  </documentation>\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.platform.csv.export.io.DocumentModelListCSVWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.csv.export.io.DocumentModelCSVWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.csv.export.io.DocumentPropertyCSVWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-csv-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-csv-export-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.csv.export",
      "id": "org.nuxeo.ecm.platform.csv.export",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Core Bulk\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.csv.export;singleton:=true\r\nBundle-Version: 1.0.0\r\nNuxeo-Component: OSGI-INF/csv-export-config.xml,OSGI-INF/marshallers-csv\r\n -contrib.xml\r\n\r\n",
      "maxResolutionOrder": 289,
      "minResolutionOrder": 288,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-dublincore",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.dublincore",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.dublincore.service.DublinCoreStorageServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The DublinCoreStorageService listen to Core event DOCUMENT_UPDATED and\n    DOCUMENT_CREATED. If the target document has the dublincore schema, this\n    service will then update some meta-data. The fields calculated by this event\n    listener are: - the creation date - the modification date - the\n    contributors list\n\n    The DublinCoreStorageService exposes an simple api for updating meta-data.\n\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe DublinCoreStorageService listen to Core event DOCUMENT_UPDATED and\nDOCUMENT_CREATED. If the target document has the dublincore schema, this\nservice will then update some meta-data. The fields calculated by this event\nlistener are: - the creation date - the modification date - the\ncontributors list\n</p><p>\nThe DublinCoreStorageService exposes an simple api for updating meta-data.\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/org.nuxeo.ecm.platform.dublincore/DublinCoreStorageService/Contributions/DublinCoreStorageService--listener",
              "id": "DublinCoreStorageService--listener",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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.dublincore.listener.DublinCoreListener\" name=\"dclistener\" postCommit=\"false\" priority=\"120\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n      <event>documentPublished</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentCreatedByCopy</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property that enables resetting creator, creation date and last modification date on document copy.\n    \n",
              "documentationHtml": "<p>\nProperty that enables resetting creator, creation date and last modification date on document copy.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.dublincore/DublinCoreStorageService/Contributions/DublinCoreStorageService--configuration",
              "id": "DublinCoreStorageService--configuration",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property that enables resetting creator, creation date and last modification date on document copy.\n    </documentation>\n    <property name=\"nuxeo.dclistener.reset-creator-on-copy\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.dublincore/DublinCoreStorageService",
          "name": "DublinCoreStorageService",
          "requirements": [],
          "resolutionOrder": 303,
          "services": [
            {
              "@type": "NXService",
              "componentId": "DublinCoreStorageService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.dublincore/DublinCoreStorageService/Services/org.nuxeo.ecm.platform.dublincore.service.DublinCoreStorageService",
              "id": "org.nuxeo.ecm.platform.dublincore.service.DublinCoreStorageService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 545,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"DublinCoreStorageService\" version=\"1.0.0\">\n\n\n  <implementation class=\"org.nuxeo.ecm.platform.dublincore.service.DublinCoreStorageServiceImpl\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.dublincore.service.DublinCoreStorageService\"/>\n  </service>\n\n  <documentation>\n    The DublinCoreStorageService listen to Core event DOCUMENT_UPDATED and\n    DOCUMENT_CREATED. If the target document has the dublincore schema, this\n    service will then update some meta-data. The fields calculated by this event\n    listener are: - the creation date - the modification date - the\n    contributors list\n\n    The DublinCoreStorageService exposes an simple api for updating meta-data.\n\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\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=\"dclistener\" async=\"false\" postCommit=\"false\"\n              class=\"org.nuxeo.ecm.platform.dublincore.listener.DublinCoreListener\" priority=\"120\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n      <event>documentPublished</event>\n      <event>lifecycle_transition_event</event>\n      <event>documentCreatedByCopy</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property that enables resetting creator, creation date and last modification date on document copy.\n    </documentation>\n    <property name=\"nuxeo.dclistener.reset-creator-on-copy\">false</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxdublincore-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-dublincore-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.dublincore",
      "id": "org.nuxeo.ecm.platform.dublincore",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.dublincore,org.nuxeo.ecm.platform\r\n .dublincore.listener,org.nuxeo.ecm.platform.dublincore.service\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: NXDublinCore\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 5.4.2.qualifier\r\nNuxeo-Component: OSGI-INF/nxdublincore-service.xml\r\nImport-Package: org.apache.commons.logging,org.nuxeo.ecm.core;api=split,\r\n org.nuxeo.ecm.core.api;api=split,org.nuxeo.ecm.core.api.event,org.nuxeo\r\n .ecm.core.api.impl,org.nuxeo.ecm.core.api.security,org.nuxeo.ecm.core.e\r\n vent,org.nuxeo.ecm.core.event.impl,org.nuxeo.ecm.core.schema,org.nuxeo.\r\n ecm.core.schema.types,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo\r\n .runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.dublincore\r\n\r\n",
      "maxResolutionOrder": 303,
      "minResolutionOrder": 303,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-filemanager",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.filemanager",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Listen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and generates digests\n      for blobs according to filemanager configuration.\n      @author Thierry Delprat (td@nuxeo.com)\n     \n",
              "documentationHtml": "<p>\nListen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and generates digests\nfor blobs according to filemanager configuration.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/filemanager.core.listener.digest/Contributions/filemanager.core.listener.digest--listener",
              "id": "filemanager.core.listener.digest--listener",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <documentation>\n      Listen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and generates digests\n      for blobs according to filemanager configuration.\n      @author Thierry Delprat (td@nuxeo.com)\n     </documentation>\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.filemanager.core.listener.DigestComputer\" name=\"digestListener\" postCommit=\"false\" priority=\"140\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/filemanager.core.listener.digest",
          "name": "filemanager.core.listener.digest",
          "requirements": [],
          "resolutionOrder": 304,
          "services": [],
          "startOrder": 23,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"filemanager.core.listener.digest\" version=\"1.0.0\">\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 generates digests\n      for blobs according to filemanager configuration.\n      @author Thierry Delprat (td@nuxeo.com)\n     </documentation>\n    <listener name=\"digestListener\" async=\"false\" postCommit=\"false\" class=\"org.nuxeo.ecm.platform.filemanager.core.listener.DigestComputer\" priority=\"140\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/filemanager-digestcomputer-event-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Computes the mimetype of dirty blob fields and updates the document icon if necessary.\n    \n",
              "documentationHtml": "<p>\nComputes the mimetype of dirty blob fields and updates the document icon if necessary.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/filemanager.core.listener.icon/Contributions/filemanager.core.listener.icon--listener",
              "id": "filemanager.core.listener.icon--listener",
              "registrationOrder": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <documentation>\n      Computes the mimetype of dirty blob fields and updates the document icon if necessary.\n    </documentation>\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.filemanager.core.listener.MimetypeIconUpdater\" name=\"mimetypeIconUpdater\" postCommit=\"false\" priority=\"120\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n      <event>aboutToImport</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/filemanager.core.listener.icon",
          "name": "filemanager.core.listener.icon",
          "requirements": [],
          "resolutionOrder": 305,
          "services": [],
          "startOrder": 24,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"filemanager.core.listener.icon\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <documentation>\n      Computes the mimetype of dirty blob fields and updates the document icon if necessary.\n    </documentation>\n    <listener name=\"mimetypeIconUpdater\" async=\"false\" postCommit=\"false\"\n              class=\"org.nuxeo.ecm.platform.filemanager.core.listener.MimetypeIconUpdater\" priority=\"120\">\n      <event>aboutToCreate</event>\n      <event>beforeDocumentModification</event>\n      <event>aboutToImport</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/filemanager-iconupdater-event-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Listen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and check for existing duplicated blobs in the db\n     \n",
              "documentationHtml": "<p>\nListen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and check for existing duplicated blobs in the db\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/filemanager.core.listener.unicity/Contributions/filemanager.core.listener.unicity--listener",
              "id": "filemanager.core.listener.unicity--listener",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <documentation>\n      Listen for Core event DOCUMENT_UPDATED and DOCUMENT_CREATED and check for existing duplicated blobs in the db\n     </documentation>\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.filemanager.core.listener.AsynchronousUnicityCheckListener\" name=\"unicityListener\" postCommit=\"true\" priority=\"140\">\n      <event>documentCreated</event>\n      <event>documentModified</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/filemanager.core.listener.unicity",
          "name": "filemanager.core.listener.unicity",
          "requirements": [],
          "resolutionOrder": 306,
          "services": [],
          "startOrder": 25,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"filemanager.core.listener.unicity\" version=\"1.0.0\">\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 check for existing duplicated blobs in the db\n     </documentation>\n    <listener name=\"unicityListener\" async=\"true\" postCommit=\"true\" class=\"org.nuxeo.ecm.platform.filemanager.core.listener.AsynchronousUnicityCheckListener\" priority=\"140\">\n      <event>documentCreated</event>\n      <event>documentModified</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/filemanager-unicity-event-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/org.nuxeo.ecm.platform.filemanager/org.nuxeo.ecm.platform.filemanager.service.FileManagerService.PageProviders/Contributions/org.nuxeo.ecm.platform.filemanager.service.FileManagerService.PageProviders--providers",
              "id": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService.PageProviders--providers",
              "registrationOrder": 14,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <coreQueryPageProvider name=\"DEFAULT_CREATION_CONTAINER_LIST_PROVIDER\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType IN ('Workspace',\n        'Folder') AND ecm:isTrashed = 0\n      </pattern>\n      <sort ascending=\"true\" column=\"ecm:path\"/>\n    </coreQueryPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/org.nuxeo.ecm.platform.filemanager.service.FileManagerService.PageProviders",
          "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService.PageProviders",
          "requirements": [],
          "resolutionOrder": 307,
          "services": [],
          "startOrder": 262,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService.PageProviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <coreQueryPageProvider name=\"DEFAULT_CREATION_CONTAINER_LIST_PROVIDER\">\n      <pattern>\n        SELECT * FROM Document WHERE ecm:primaryType IN ('Workspace',\n        'Folder') AND ecm:isTrashed = 0\n      </pattern>\n      <sort column=\"ecm:path\" ascending=\"true\" />\n    </coreQueryPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxfilemanager-pageprovider-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "Component to carry default extension points.\n",
          "documentationHtml": "<p>\nComponent to carry default extension points.</p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Default plugins for the file manager.\n\n      NoteImporter creates a Note document from any text-based content.\n\n      DefaultFileImporter creates a File document from any content.\n    \n",
              "documentationHtml": "<p>\nDefault plugins for the file manager.\n</p><p>\nNoteImporter creates a Note document from any text-based content.\n</p><p>\nDefaultFileImporter creates a File document from any content.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService--plugins",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/org.nuxeo.ecm.platform.filemanager.service.FileManagerService.Plugins/Contributions/org.nuxeo.ecm.platform.filemanager.service.FileManagerService.Plugins--plugins",
              "id": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService.Plugins--plugins",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"plugins\" target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\">\n    <documentation>\n      Default plugins for the file manager.\n\n      NoteImporter creates a Note document from any text-based content.\n\n      DefaultFileImporter creates a File document from any content.\n    </documentation>\n\n    <plugin class=\"org.nuxeo.ecm.platform.filemanager.service.extension.NoteImporter\" name=\"NoteImporter\" order=\"10\">\n      <filter>text/plain</filter>\n      <filter>text/html</filter>\n      <filter>application/xhtml+xml</filter>\n      <filter>text/x-web-markdown</filter>\n    </plugin>\n\n    <plugin class=\"org.nuxeo.ecm.platform.filemanager.service.extension.DefaultFileImporter\" name=\"DefaultFileImporter\" order=\"100\">\n      <filter>.*</filter>\n    </plugin>\n\n    <plugin class=\"org.nuxeo.ecm.platform.filemanager.service.extension.ExportedZipImporter\" name=\"ExportedArchivePlugin\" order=\"10\">\n      <filter>application/zip</filter>\n    </plugin>\n\n    <plugin class=\"org.nuxeo.ecm.platform.filemanager.service.extension.CSVZipImporter\" name=\"CSVArchivePlugin\" order=\"11\">\n      <filter>application/zip</filter>\n    </plugin>\n\n    <documentation>\n      Use a query model to find the list of all Workspaces the user has the\n      right to create new document into.\n    </documentation>\n    <creationContainerListProvider class=\"org.nuxeo.ecm.platform.filemanager.service.extension.DefaultCreationContainerListProvider\" name=\"defaultCreationContainerListProvider\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Unicity Service disabled by default.\n    \n",
              "documentationHtml": "<p>\nUnicity Service disabled by default.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService--unicity",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/org.nuxeo.ecm.platform.filemanager.service.FileManagerService.Plugins/Contributions/org.nuxeo.ecm.platform.filemanager.service.FileManagerService.Plugins--unicity",
              "id": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService.Plugins--unicity",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"unicity\" target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\">\n    <documentation>\n      Unicity Service disabled by default.\n    </documentation>\n\n    <unicitySettings>\n      <algo>sha-256</algo>\n      <field>file:content</field>\n      <enabled>false</enabled>\n      <computeDigest>false</computeDigest>\n    </unicitySettings>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/org.nuxeo.ecm.platform.filemanager.service.FileManagerService.Plugins",
          "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService.Plugins",
          "requirements": [],
          "resolutionOrder": 308,
          "services": [],
          "startOrder": 263,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService.Plugins\">\n  <documentation>Component to carry default extension points.</documentation>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\"\n    point=\"plugins\">\n    <documentation>\n      Default plugins for the file manager.\n\n      NoteImporter creates a Note document from any text-based content.\n\n      DefaultFileImporter creates a File document from any content.\n    </documentation>\n\n    <plugin name=\"NoteImporter\"\n      class=\"org.nuxeo.ecm.platform.filemanager.service.extension.NoteImporter\"\n      order=\"10\">\n      <filter>text/plain</filter>\n      <filter>text/html</filter>\n      <filter>application/xhtml+xml</filter>\n      <filter>text/x-web-markdown</filter>\n    </plugin>\n\n    <plugin name=\"DefaultFileImporter\"\n      class=\"org.nuxeo.ecm.platform.filemanager.service.extension.DefaultFileImporter\"\n      order=\"100\">\n      <filter>.*</filter>\n    </plugin>\n\n    <plugin name=\"ExportedArchivePlugin\"\n      class=\"org.nuxeo.ecm.platform.filemanager.service.extension.ExportedZipImporter\"\n      order=\"10\">\n      <filter>application/zip</filter>\n    </plugin>\n\n    <plugin name=\"CSVArchivePlugin\"\n      class=\"org.nuxeo.ecm.platform.filemanager.service.extension.CSVZipImporter\"\n      order=\"11\">\n      <filter>application/zip</filter>\n    </plugin>\n\n    <documentation>\n      Use a query model to find the list of all Workspaces the user has the\n      right to create new document into.\n    </documentation>\n    <creationContainerListProvider name=\"defaultCreationContainerListProvider\"\n      class=\"org.nuxeo.ecm.platform.filemanager.service.extension.DefaultCreationContainerListProvider\" />\n  </extension>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\"\n    point=\"unicity\">\n    <documentation>\n      Unicity Service disabled by default.\n    </documentation>\n\n    <unicitySettings>\n      <algo>sha-256</algo>\n      <field>file:content</field>\n      <enabled>false</enabled>\n      <computeDigest>false</computeDigest>\n    </unicitySettings>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxfilemanager-plugins-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
          "declaredStartOrder": null,
          "documentation": "\n    The FileManager service provide a generic service for building Documents\n    form a simple File.\n  \n",
          "documentationHtml": "<p>\nThe FileManager service provide a generic service for building Documents\nform a simple File.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
              "descriptors": [
                "org.nuxeo.ecm.platform.filemanager.service.extension.FileImporterDescriptor",
                "org.nuxeo.ecm.platform.filemanager.service.extension.FolderImporterDescriptor",
                "org.nuxeo.ecm.platform.filemanager.service.extension.CreationContainerListProviderDescriptor"
              ],
              "documentation": "\n      The plugin system for the FileManager give the possibility to register\n      extension that will be responsible for creating a document from a given\n      mime-type. The plugin should implement the\n      org.nuxeo.ecm.platform.filemanager.interfaces.FileImporter interface.\n\n      The registration of a file importer can be done like this:\n\n      <code>\n    <plugin class=\"com.example.MyFileImporterImplementationClass\"\n        docType=\"MyCustomDoctype\" enabled=\"true\"\n        name=\"myCustomFileImporter\" order=\"30\">\n        <filter>text/plain</filter>\n    </plugin>\n</code>\n\n\n      The filter tag is used to know what mime-types can be used with the\n      plugin. The order tag is used to determine order between plugins.\n\n      The docType attribute is optional. When added, an instance of the document type specified in it will be created. Otherwise, one of the default Nuxeo document types will be used.\n\n      A plugin can override an existing plugin by reusing the same name, in this\n      case the previous filters will be ignored. A plugin can be completely\n      disabled by setting enabled=\"false\".\n\n      Similarly, to override the default behavior to import folders, custom\n      folder importers are registered as follows:\n\n      <code>\n    <folderImporter\n        class=\"com.example.MyFolderImporterImplementationClass\" name=\"myCustomFolderImporter\"/>\n</code>\n\n\n      The latest registered folder importer will be used in place of any other\n      previously registered folder importer.\n\n      Finally is it also possible to register CreationContainerListProvider\n      implementations for a given set of document types so as to provide the\n      user with a list of container suitable for new document creation.\n\n      This feature is especially useful for the creation of new document from an\n      office productivity application through the LiveEdit plugins.\n\n      The docType is optional: no docType declaration means all types are\n      handled by the extension.\n\n      <code>\n    <creationContainerListProvider\n        class=\"com.example.MyCustomContainerListImplementationClass\" name=\"myCustomContainerListProvider\">\n        <docType>File</docType>\n        <docType>Note</docType>\n    </creationContainerListProvider>\n</code>\n",
              "documentationHtml": "<p>\nThe plugin system for the FileManager give the possibility to register\nextension that will be responsible for creating a document from a given\nmime-type. The plugin should implement the\norg.nuxeo.ecm.platform.filemanager.interfaces.FileImporter interface.\n</p><p>\nThe registration of a file importer can be done like this:\n</p><p>\n</p><pre><code>    &lt;plugin class&#61;&#34;com.example.MyFileImporterImplementationClass&#34;\n        docType&#61;&#34;MyCustomDoctype&#34; enabled&#61;&#34;true&#34;\n        name&#61;&#34;myCustomFileImporter&#34; order&#61;&#34;30&#34;&gt;\n        &lt;filter&gt;text/plain&lt;/filter&gt;\n    &lt;/plugin&gt;\n</code></pre><p>\nThe filter tag is used to know what mime-types can be used with the\nplugin. The order tag is used to determine order between plugins.\n</p><p>\nThe docType attribute is optional. When added, an instance of the document type specified in it will be created. Otherwise, one of the default Nuxeo document types will be used.\n</p><p>\nA plugin can override an existing plugin by reusing the same name, in this\ncase the previous filters will be ignored. A plugin can be completely\ndisabled by setting enabled&#61;&#34;false&#34;.\n</p><p>\nSimilarly, to override the default behavior to import folders, custom\nfolder importers are registered as follows:\n</p><p>\n</p><pre><code>    &lt;folderImporter\n        class&#61;&#34;com.example.MyFolderImporterImplementationClass&#34; name&#61;&#34;myCustomFolderImporter&#34;/&gt;\n</code></pre><p>\nThe latest registered folder importer will be used in place of any other\npreviously registered folder importer.\n</p><p>\nFinally is it also possible to register CreationContainerListProvider\nimplementations for a given set of document types so as to provide the\nuser with a list of container suitable for new document creation.\n</p><p>\nThis feature is especially useful for the creation of new document from an\noffice productivity application through the LiveEdit plugins.\n</p><p>\nThe docType is optional: no docType declaration means all types are\nhandled by the extension.\n</p><p>\n</p><pre><code>    &lt;creationContainerListProvider\n        class&#61;&#34;com.example.MyCustomContainerListImplementationClass&#34; name&#61;&#34;myCustomContainerListProvider&#34;&gt;\n        &lt;docType&gt;File&lt;/docType&gt;\n        &lt;docType&gt;Note&lt;/docType&gt;\n    &lt;/creationContainerListProvider&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/org.nuxeo.ecm.platform.filemanager.service.FileManagerService/ExtensionPoints/org.nuxeo.ecm.platform.filemanager.service.FileManagerService--plugins",
              "id": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService--plugins",
              "label": "plugins (org.nuxeo.ecm.platform.filemanager.service.FileManagerService)",
              "name": "plugins",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
              "descriptors": [
                "org.nuxeo.ecm.platform.filemanager.service.extension.UnicityExtension"
              ],
              "documentation": "\n      The unicity extension point adds a digest to the given field using the\n      given algorithm. If the same file is already on the server, a new Message\n      is send to JMS bus with DocumentLocation if the existing files.\n      <code>\n    <unicitySettings>\n        <enabled>true</enabled>\n        <algo>sha-256</algo>\n        <field>file:content</field>\n        <computeDigest>true</computeDigest>\n    </unicitySettings>\n</code>\n",
              "documentationHtml": "<p>\nThe unicity extension point adds a digest to the given field using the\ngiven algorithm. If the same file is already on the server, a new Message\nis send to JMS bus with DocumentLocation if the existing files.\n</p><p></p><pre><code>    &lt;unicitySettings&gt;\n        &lt;enabled&gt;true&lt;/enabled&gt;\n        &lt;algo&gt;sha-256&lt;/algo&gt;\n        &lt;field&gt;file:content&lt;/field&gt;\n        &lt;computeDigest&gt;true&lt;/computeDigest&gt;\n    &lt;/unicitySettings&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/org.nuxeo.ecm.platform.filemanager.service.FileManagerService/ExtensionPoints/org.nuxeo.ecm.platform.filemanager.service.FileManagerService--unicity",
              "id": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService--unicity",
              "label": "unicity (org.nuxeo.ecm.platform.filemanager.service.FileManagerService)",
              "name": "unicity",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
          "name": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
          "requirements": [],
          "resolutionOrder": 309,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.filemanager.service.FileManagerService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager/org.nuxeo.ecm.platform.filemanager.service.FileManagerService/Services/org.nuxeo.ecm.platform.filemanager.api.FileManager",
              "id": "org.nuxeo.ecm.platform.filemanager.api.FileManager",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 614,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component\n  name=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\">\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.filemanager.service.FileManagerService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.filemanager.api.FileManager\" />\n  </service>\n\n  <documentation>\n    The FileManager service provide a generic service for building Documents\n    form a simple File.\n  </documentation>\n\n  <extension-point name=\"plugins\">\n    <documentation>\n      The plugin system for the FileManager give the possibility to register\n      extension that will be responsible for creating a document from a given\n      mime-type. The plugin should implement the\n      org.nuxeo.ecm.platform.filemanager.interfaces.FileImporter interface.\n\n      The registration of a file importer can be done like this:\n\n      <code>\n        <plugin name=\"myCustomFileImporter\"\n          class=\"com.example.MyFileImporterImplementationClass\" enabled=\"true\"\n          docType=\"MyCustomDoctype\" order=\"30\">\n          <filter>text/plain</filter>\n        </plugin>\n      </code>\n\n      The filter tag is used to know what mime-types can be used with the\n      plugin. The order tag is used to determine order between plugins.\n\n      The docType attribute is optional. When added, an instance of the document type specified in it will be created. Otherwise, one of the default Nuxeo document types will be used.\n\n      A plugin can override an existing plugin by reusing the same name, in this\n      case the previous filters will be ignored. A plugin can be completely\n      disabled by setting enabled=\"false\".\n\n      Similarly, to override the default behavior to import folders, custom\n      folder importers are registered as follows:\n\n      <code>\n        <folderImporter name=\"myCustomFolderImporter\"\n          class=\"com.example.MyFolderImporterImplementationClass\" />\n      </code>\n\n      The latest registered folder importer will be used in place of any other\n      previously registered folder importer.\n\n      Finally is it also possible to register CreationContainerListProvider\n      implementations for a given set of document types so as to provide the\n      user with a list of container suitable for new document creation.\n\n      This feature is especially useful for the creation of new document from an\n      office productivity application through the LiveEdit plugins.\n\n      The docType is optional: no docType declaration means all types are\n      handled by the extension.\n\n      <code>\n        <creationContainerListProvider name=\"myCustomContainerListProvider\"\n          class=\"com.example.MyCustomContainerListImplementationClass\">\n          <docType>File</docType>\n          <docType>Note</docType>\n        </creationContainerListProvider>\n      </code>\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.platform.filemanager.service.extension.FileImporterDescriptor\" />\n    <object\n      class=\"org.nuxeo.ecm.platform.filemanager.service.extension.FolderImporterDescriptor\" />\n    <object\n      class=\"org.nuxeo.ecm.platform.filemanager.service.extension.CreationContainerListProviderDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"unicity\">\n    <documentation>\n      The unicity extension point adds a digest to the given field using the\n      given algorithm. If the same file is already on the server, a new Message\n      is send to JMS bus with DocumentLocation if the existing files.\n      <code>\n        <unicitySettings>\n          <enabled>true</enabled>\n          <algo>sha-256</algo>\n          <field>file:content</field>\n          <computeDigest>true</computeDigest>\n        </unicitySettings>\n      </code>\n    </documentation>\n\n    <object\n      class=\"org.nuxeo.ecm.platform.filemanager.service.extension.UnicityExtension\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxfilemanager-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-filemanager-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.filemanager",
      "id": "org.nuxeo.ecm.platform.filemanager",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.filemanager,org.nuxeo.ecm.platfor\r\n m.filemanager.service,org.nuxeo.ecm.platform.filemanager.service.extens\r\n ion\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: runtime\r\nBundle-Localization: plugin\r\nBundle-Name: NXFileManager\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/filemanager-digestcomputer-event-contrib.xml,O\r\n SGI-INF/filemanager-iconupdater-event-contrib.xml,OSGI-INF/filemanager-\r\n unicity-event-contrib.xml,OSGI-INF/nxfilemanager-pageprovider-contrib.x\r\n ml,OSGI-INF/nxfilemanager-plugins-contrib.xml,OSGI-INF/nxfilemanager-se\r\n rvice.xml,\r\nImport-Package: au.com.bytecode.opencsv,org.apache.commons.logging,org.n\r\n uxeo.common.collections,org.nuxeo.common.utils,org.nuxeo.common.xmap.an\r\n notation,org.nuxeo.ecm.core;api=split,org.nuxeo.ecm.core.api;api=split,\r\n org.nuxeo.ecm.core.api.facet,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.\r\n core.api.impl.blob,org.nuxeo.ecm.core.api.repository,org.nuxeo.ecm.core\r\n .api.security,org.nuxeo.ecm.core.io,org.nuxeo.ecm.core.io.impl,org.nuxe\r\n o.ecm.core.io.impl.plugins,org.nuxeo.ecm.core.schema,org.nuxeo.ecm.core\r\n .schema.types,org.nuxeo.ecm.core.schema.types.primitives,org.nuxeo.ecm.\r\n core.search.api.client.querymodel,org.nuxeo.ecm.core.search.api.client.\r\n querymodel.descriptor,org.nuxeo.ecm.directory;api=split,org.nuxeo.ecm.p\r\n latform.filemanager.api,org.nuxeo.ecm.platform.filemanager.utils,org.nu\r\n xeo.ecm.platform.mimetype,org.nuxeo.ecm.platform.mimetype.interfaces,or\r\n g.nuxeo.ecm.platform.types,org.nuxeo.ecm.platform.versioning.api,org.nu\r\n xeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.filemanager\r\n\r\n",
      "maxResolutionOrder": 309,
      "minResolutionOrder": 304,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-htmlsanitizer",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.htmlsanitizer",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    The HTML Sanitizer Service sanitizes some HTML fields\n    to remove potential cross-site scripting attack in them.\n\n    @author Florent Guillaume\n  \n",
          "documentationHtml": "<p>\nThe HTML Sanitizer Service sanitizes some HTML fields\nto remove potential cross-site scripting attack in them.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
              "descriptors": [
                "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerDescriptor"
              ],
              "documentation": "\n      Specify the types of documents and fields to sanitize.\n\n      The following example configures just based on field\n      names:\n\n      <code>\n    <sanitizer name=\"foo\">\n        <field>note</field>\n        <field>comment:text</field>\n    </sanitizer>\n</code>\n\n\n      The following specifies that only the note field of the Note type\n      will be sanitized:\n\n      <code>\n    <sanitizer name=\"foo\">\n        <type>Note</type>\n        <field>note</field>\n    </sanitizer>\n</code>\n\n\n      The following example disables a sanitizer:\n\n      <code>\n    <sanitizer enabled=\"false\" name=\"default\"/>\n</code>\n\n\n      Sanitizing can also be enabled on a field only if a field has a given value.\n      This is useful when the same document field can contain text, html or wiki markup.\n      For a webpage, you may want to only sanitize the webpages that are using HTML.\n      Here is an example configuration.\n\n     <code>\n    <sanitizer name=\"foo\">\n        <field filter=\"webp:isRichtext\" filterValue=\"true\">webp:content</field>\n    </sanitizer>\n</code>\n\n\n     In this example the field webp:content will be sanitized only when\n     the String representation of the webp:isRichtext is \"true\".\n\n     If you want to <em>not</em>\n sanitize when a given value is present, use:\n\n     <code>\n    <sanitizer name=\"foo\">\n        <field filter=\"mime_type\" filterValue=\"text/plain\" sanitize=\"false\">note</field>\n    </sanitizer>\n</code>\n",
              "documentationHtml": "<p>\nSpecify the types of documents and fields to sanitize.\n</p><p>\nThe following example configures just based on field\nnames:\n</p><p>\n</p><pre><code>    &lt;sanitizer name&#61;&#34;foo&#34;&gt;\n        &lt;field&gt;note&lt;/field&gt;\n        &lt;field&gt;comment:text&lt;/field&gt;\n    &lt;/sanitizer&gt;\n</code></pre><p>\nThe following specifies that only the note field of the Note type\nwill be sanitized:\n</p><p>\n</p><pre><code>    &lt;sanitizer name&#61;&#34;foo&#34;&gt;\n        &lt;type&gt;Note&lt;/type&gt;\n        &lt;field&gt;note&lt;/field&gt;\n    &lt;/sanitizer&gt;\n</code></pre><p>\nThe following example disables a sanitizer:\n</p><p>\n</p><pre><code>    &lt;sanitizer enabled&#61;&#34;false&#34; name&#61;&#34;default&#34;/&gt;\n</code></pre><p>\nSanitizing can also be enabled on a field only if a field has a given value.\nThis is useful when the same document field can contain text, html or wiki markup.\nFor a webpage, you may want to only sanitize the webpages that are using HTML.\nHere is an example configuration.\n</p><p>\n</p><pre><code>    &lt;sanitizer name&#61;&#34;foo&#34;&gt;\n        &lt;field filter&#61;&#34;webp:isRichtext&#34; filterValue&#61;&#34;true&#34;&gt;webp:content&lt;/field&gt;\n    &lt;/sanitizer&gt;\n</code></pre><p>\nIn this example the field webp:content will be sanitized only when\nthe String representation of the webp:isRichtext is &#34;true&#34;.\n</p><p>\nIf you want to <em>not</em>\nsanitize when a given value is present, use:\n</p><p>\n</p><pre><code>    &lt;sanitizer name&#61;&#34;foo&#34;&gt;\n        &lt;field filter&#61;&#34;mime_type&#34; filterValue&#61;&#34;text/plain&#34; sanitize&#61;&#34;false&#34;&gt;note&lt;/field&gt;\n    &lt;/sanitizer&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.htmlsanitizer/org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService/ExtensionPoints/org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService--sanitizer",
              "id": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService--sanitizer",
              "label": "sanitizer (org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService)",
              "name": "sanitizer",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
              "descriptors": [
                "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerAntiSamyDescriptor"
              ],
              "documentation": "\n      The following allows you to change the AntiSamy policy file:\n\n      <code>\n    <antisamy policy=\"some-file.xml\"/>\n</code>\n",
              "documentationHtml": "<p>\nThe following allows you to change the AntiSamy policy file:\n</p><p>\n</p><pre><code>    &lt;antisamy policy&#61;&#34;some-file.xml&#34;/&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.htmlsanitizer/org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService/ExtensionPoints/org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService--antisamy",
              "id": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService--antisamy",
              "label": "antisamy (org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService)",
              "name": "antisamy",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.htmlsanitizer/org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
          "name": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
          "requirements": [],
          "resolutionOrder": 310,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.htmlsanitizer/org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService/Services/org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
              "id": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 615,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService\"\n  version=\"1.0.0\">\n\n  <documentation>\n    The HTML Sanitizer Service sanitizes some HTML fields\n    to remove potential cross-site scripting attack in them.\n\n    @author Florent Guillaume\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService\" />\n  </service>\n\n  <extension-point name=\"sanitizer\">\n    <documentation>\n      Specify the types of documents and fields to sanitize.\n\n      The following example configures just based on field\n      names:\n\n      <code>\n        <sanitizer name=\"foo\">\n          <field>note</field>\n          <field>comment:text</field>\n        </sanitizer>\n      </code>\n\n      The following specifies that only the note field of the Note type\n      will be sanitized:\n\n      <code>\n        <sanitizer name=\"foo\">\n          <type>Note</type>\n          <field>note</field>\n        </sanitizer>\n      </code>\n\n      The following example disables a sanitizer:\n\n      <code>\n        <sanitizer name=\"default\" enabled=\"false\" />\n      </code>\n\n      Sanitizing can also be enabled on a field only if a field has a given value.\n      This is useful when the same document field can contain text, html or wiki markup.\n      For a webpage, you may want to only sanitize the webpages that are using HTML.\n      Here is an example configuration.\n\n     <code>\n       <sanitizer name=\"foo\">\n         <field filter=\"webp:isRichtext\" filterValue=\"true\">webp:content</field>\n       </sanitizer>\n     </code>\n\n     In this example the field webp:content will be sanitized only when\n     the String representation of the webp:isRichtext is \"true\".\n\n     If you want to <em>not</em> sanitize when a given value is present, use:\n\n     <code>\n       <sanitizer name=\"foo\">\n         <field filter=\"mime_type\" filterValue=\"text/plain\" sanitize=\"false\">note</field>\n       </sanitizer>\n     </code>\n\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"antisamy\">\n    <documentation>\n      The following allows you to change the AntiSamy policy file:\n\n      <code>\n        <antisamy policy=\"some-file.xml\"/>\n      </code>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerAntiSamyDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/htmlsanitizer-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.htmlsanitizer.HtmlSanitizerService--antisamy",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.htmlsanitizer/org.nuxeo.ecm.platform.htmlsanitizer.config/Contributions/org.nuxeo.ecm.platform.htmlsanitizer.config--antisamy",
              "id": "org.nuxeo.ecm.platform.htmlsanitizer.config--antisamy",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
                "name": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"antisamy\" target=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService\">\n    <antisamy policy=\"antisamy-nuxeo-policy.xml\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService--sanitizer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.htmlsanitizer/org.nuxeo.ecm.platform.htmlsanitizer.config/Contributions/org.nuxeo.ecm.platform.htmlsanitizer.config--sanitizer",
              "id": "org.nuxeo.ecm.platform.htmlsanitizer.config--sanitizer",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
                "name": "org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"sanitizer\" target=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService\">\n    <sanitizer name=\"default\">\n      <!-- <field>dc:description</field> -->\n      <field filter=\"mime_type\" filterValue=\"text/plain,text/x-web-markdown,text/xml\" sanitize=\"false\">note</field>\n      <field>webc:welcomeText</field>\n      <field filter=\"webp:isRichtext\" filterValue=\"true\">webp:content</field>\n      <field>comment:text</field>\n      <!-- <field>post:text</field> -->\n    </sanitizer>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.htmlsanitizer/org.nuxeo.ecm.platform.htmlsanitizer.config",
          "name": "org.nuxeo.ecm.platform.htmlsanitizer.config",
          "requirements": [],
          "resolutionOrder": 311,
          "services": [],
          "startOrder": 265,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.htmlsanitizer.config\"\n  version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService\"\n    point=\"antisamy\">\n    <antisamy policy=\"antisamy-nuxeo-policy.xml\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerService\"\n    point=\"sanitizer\">\n    <sanitizer name=\"default\">\n      <!-- <field>dc:description</field> -->\n      <field filter=\"mime_type\" filterValue=\"text/plain,text/x-web-markdown,text/xml\" sanitize=\"false\">note</field>\n      <field>webc:welcomeText</field>\n      <field filter=\"webp:isRichtext\" filterValue=\"true\">webp:content</field>\n      <field>comment:text</field>\n      <!-- <field>post:text</field> -->\n    </sanitizer>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/htmlsanitizer-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/org.nuxeo.ecm.platform.htmlsanitizer/org.nuxeo.ecm.platform.htmlsanitizer.event.listener/Contributions/org.nuxeo.ecm.platform.htmlsanitizer.event.listener--listener",
              "id": "org.nuxeo.ecm.platform.htmlsanitizer.event.listener--listener",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <description>\n      Listener that runs (very early) the HTML Sanitizer.\n    </description>\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerListener\" name=\"htmlsanitizerlistener\" postCommit=\"false\" priority=\"-10\">\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.htmlsanitizer/org.nuxeo.ecm.platform.htmlsanitizer.event.listener",
          "name": "org.nuxeo.ecm.platform.htmlsanitizer.event.listener",
          "requirements": [],
          "resolutionOrder": 312,
          "services": [],
          "startOrder": 266,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.htmlsanitizer.event.listener\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <description>\n      Listener that runs (very early) the HTML Sanitizer.\n    </description>\n    <listener name=\"htmlsanitizerlistener\"\n              class=\"org.nuxeo.ecm.platform.htmlsanitizer.HtmlSanitizerListener\"\n              postCommit=\"false\" async=\"false\" priority=\"-10\">\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/event-listener-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-htmlsanitizer-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.htmlsanitizer",
      "id": "org.nuxeo.ecm.platform.htmlsanitizer",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.htmlsanitizer\r\nPrivate-Package: .\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo HTML Sanitizer Service\r\nBundle-Localization: plugin\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/htmlsanitizer-service.xml,OSGI-INF/htmlsanitiz\r\n er-contrib.xml,OSGI-INF/event-listener-contrib.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.event,org.nuxeo.ecm.core.api.model,org.nuxeo.ecm.core\r\n .event,org.nuxeo.ecm.core.event.impl,org.nuxeo.ecm.core.schema,org.nuxe\r\n o.runtime.api,org.nuxeo.runtime.model,org.owasp.validator.html\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.htmlsanitizer\r\n\r\n",
      "maxResolutionOrder": 312,
      "minResolutionOrder": 310,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-mail",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.mail",
      "components": [
        {
          "@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/org.nuxeo.ecm.platform.mail/org.nuxeo.mail.automation.chains/Contributions/org.nuxeo.mail.automation.chains--chains",
              "id": "org.nuxeo.mail.automation.chains--chains",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param name=\"name\" type=\"string\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param name=\"type\" type=\"string\">MailMessage</param>\n        <param name=\"name\" type=\"string\">expr:Context[\"mailDocumentName\"]</param>\n        <param name=\"properties\" type=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param name=\"name\" type=\"string\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param name=\"id\" type=\"string\">ProcessAttachment</param>\n        <param name=\"list\" type=\"string\">attachments</param>\n        <param name=\"isolate\" type=\"boolean\">true</param>\n        <param name=\"item\" type=\"string\">attachment</param>\n      </operation>\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">\n\n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:htmlText\",Context[\"text\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n\n        </param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param name=\"name\" type=\"string\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param name=\"name\" type=\"string\">attachment</param>\n      </operation>\n      <operation id=\"Blob.AttachOnDocument\">\n        <param name=\"document\" type=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param name=\"save\" type=\"boolean\">false</param>\n        <param name=\"xpath\" type=\"string\">files:files</param>\n      </operation>\n    </chain>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.mail.automation.chains",
          "name": "org.nuxeo.mail.automation.chains",
          "requirements": [],
          "resolutionOrder": 347,
          "services": [],
          "startOrder": 473,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"org.nuxeo.mail.automation.chains\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"chains\">\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">\n\n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:htmlText\",Context[\"text\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n\n        </param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.AttachOnDocument\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\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.api.blobholder.BlobHolderAdapterComponent--BlobHolderFactory",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.blobholder/Contributions/org.nuxeo.ecm.platform.mail.core.blobholder--BlobHolderFactory",
              "id": "org.nuxeo.ecm.platform.mail.core.blobholder--BlobHolderFactory",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
                "name": "org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"BlobHolderFactory\" target=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\">\n    <blobHolderFactory class=\"org.nuxeo.ecm.platform.mail.adapter.MailMessageBlobHolderfactory\" facet=\"MailMessage\" name=\"mailMessage\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.blobholder",
          "name": "org.nuxeo.ecm.platform.mail.core.blobholder",
          "requirements": [],
          "resolutionOrder": 348,
          "services": [],
          "startOrder": 278,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.blobholder\">\n\n  <extension\n    target=\"org.nuxeo.ecm.core.api.blobholder.BlobHolderAdapterComponent\"\n    point=\"BlobHolderFactory\">\n    <blobHolderFactory name=\"mailMessage\" facet=\"MailMessage\"\n      class=\"org.nuxeo.ecm.platform.mail.adapter.MailMessageBlobHolderfactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-blobholder-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/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.types.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.types.contrib--schema",
              "id": "org.nuxeo.ecm.platform.mail.core.types.contrib--schema",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <schema name=\"mail\" prefix=\"mail\" src=\"schemas/mail.xsd\"/>\n    <schema name=\"protocol\" prefix=\"prot\" src=\"schemas/protocol.xsd\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.types.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.types.contrib--doctype",
              "id": "org.nuxeo.ecm.platform.mail.core.types.contrib--doctype",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"MailMessage\"/>\n\n    <doctype extends=\"Document\" name=\"MailMessage\">\n      <schema name=\"mail\"/>\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <facet name=\"Commentable\"/>\n      <facet name=\"HiddenInCreation\"/>\n      <facet name=\"NXTag\"/>\n      <facet name=\"MailMessage\"/>\n    </doctype>\n\n    <doctype extends=\"Folder\" name=\"MailFolder\">\n      <schema name=\"protocol\"/>\n      <subtypes>\n        <type>MailMessage</type>\n      </subtypes>\n    </doctype>\n\n    <!-- allow mail folders within workspaces -->\n    <doctype append=\"true\" name=\"Workspace\">\n      <subtypes>\n        <type>MailFolder</type>\n      </subtypes>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.types.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.types.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 349,
          "services": [],
          "startOrder": 283,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.types.contrib\">\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=\"mail\" src=\"schemas/mail.xsd\" prefix=\"mail\"/>\n    <schema name=\"protocol\" src=\"schemas/protocol.xsd\" prefix=\"prot\"/>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"MailMessage\" />\n\n    <doctype name=\"MailMessage\" extends=\"Document\">\n      <schema name=\"mail\"/>\n      <schema name=\"common\"/>\n      <schema name=\"dublincore\"/>\n      <schema name=\"uid\"/>\n      <schema name=\"files\"/>\n      <facet name=\"Commentable\" />\n      <facet name=\"HiddenInCreation\" />\n      <facet name=\"NXTag\" />\n      <facet name=\"MailMessage\" />\n    </doctype>\n\n    <doctype name=\"MailFolder\" extends=\"Folder\">\n      <schema name=\"protocol\"/>\n      <subtypes>\n        <type>MailMessage</type>\n      </subtypes>\n    </doctype>\n\n    <!-- allow mail folders within workspaces -->\n    <doctype name=\"Workspace\" append=\"true\">\n      <subtypes>\n        <type>MailFolder</type>\n      </subtypes>\n    </doctype>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-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/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.web.types.contrib/Contributions/org.nuxeo.ecm.platform.mail.web.types.contrib--types",
              "id": "org.nuxeo.ecm.platform.mail.web.types.contrib--types",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.platform.types.TypeService\">\n\n    <type id=\"MailMessage\">\n      <label>MailMessage</label>\n      <icon>/icons/mail.png</icon>\n      <bigIcon>/icons/mail_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <default-view>view_documents</default-view>\n    </type>\n\n    <type id=\"MailFolder\">\n      <label>MailFolder</label>\n      <icon>/icons/mail_folder.png</icon>\n      <bigIcon>/icons/mailfolder_100.png</bigIcon>\n      <category>Collaborative</category>\n      <default-view>view_documents</default-view>\n      <contentViews category=\"content\">\n        <contentView>mail_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/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.web.types.contrib",
          "name": "org.nuxeo.ecm.platform.mail.web.types.contrib",
          "requirements": [],
          "resolutionOrder": 350,
          "services": [],
          "startOrder": 286,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.web.types.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.platform.types.TypeService\" point=\"types\">\n\n    <type id=\"MailMessage\">\n      <label>MailMessage</label>\n      <icon>/icons/mail.png</icon>\n      <bigIcon>/icons/mail_100.png</bigIcon>\n      <category>SimpleDocument</category>\n      <default-view>view_documents</default-view>\n    </type>\n\n    <type id=\"MailFolder\">\n      <label>MailFolder</label>\n      <icon>/icons/mail_folder.png</icon>\n      <bigIcon>/icons/mailfolder_100.png</bigIcon>\n      <category>Collaborative</category>\n      <default-view>view_documents</default-view>\n      <contentViews category=\"content\">\n        <contentView>mail_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\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-ecm-types-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.mail.service.MailServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Services to to manage mails.\n\n    @author <a href=\"mailto:arussel@nuxeo.com\">Alexandre Russel</a>\n",
          "documentationHtml": "<p>\nServices to to manage mails.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.MailService",
              "descriptors": [
                "org.nuxeo.ecm.platform.mail.service.SessionFactoryDescriptor"
              ],
              "documentation": "\n\n      Extension point to register a session factory.\n\n      <p>\n        A session factory allows to create session for users. To create sessions\n        the factory needs informations such as host, port, protocol ... The list\n        of needed properties depends on the protocol used and if you need store,\n        transport or both. For more information see the\n        <a href=\"http://java.sun.com/products/javamail/javadocs/index.html\">\n          JavaMail API\n        </a>\n        .\n      </p>\n<p>\n        To get hold of a Session call: MailService mailService =\n        Framework.getService(MailSerivce.class); Transport transport =\n        mailSerivce.getTransport(\"myFactory\"); Store store =\n        mailServcie.getStore(\"myFactory\");\n      </p>\n<p>\n        The default is to get a session for the authenticated user if any, or\n        you can pass a String to get a session for a user.\n      </p>\n",
              "documentationHtml": "<p>\nExtension point to register a session factory.\n</p><p>\n</p><p>\nA session factory allows to create session for users. To create sessions\nthe factory needs informations such as host, port, protocol ... The list\nof needed properties depends on the protocol used and if you need store,\ntransport or both. For more information see the\n<a href=\"http://java.sun.com/products/javamail/javadocs/index.html\">\nJavaMail API\n</a>\n.\n</p>\n<p>\nTo get hold of a Session call: MailService mailService &#61;\nFramework.getService(MailSerivce.class); Transport transport &#61;\nmailSerivce.getTransport(&#34;myFactory&#34;); Store store &#61;\nmailServcie.getStore(&#34;myFactory&#34;);\n</p>\n<p>\nThe default is to get a session for the authenticated user if any, or\nyou can pass a String to get a session for a user.\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService/ExtensionPoints/org.nuxeo.ecm.platform.MailService--sessionFactory",
              "id": "org.nuxeo.ecm.platform.MailService--sessionFactory",
              "label": "sessionFactory (org.nuxeo.ecm.platform.MailService)",
              "name": "sessionFactory",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.MailService",
              "descriptors": [
                "org.nuxeo.ecm.platform.mail.fetcher.PropertiesFetcherDescriptor"
              ],
              "documentation": "\n      Extension point to register a properties fetcher.\n      <p>\n        The responsability of a property fetcher is to fetch properties from any\n        backend.\n      </p>\n",
              "documentationHtml": "<p>\nExtension point to register a properties fetcher.\n</p><p>\nThe responsability of a property fetcher is to fetch properties from any\nbackend.\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService/ExtensionPoints/org.nuxeo.ecm.platform.MailService--propertiesFetcher",
              "id": "org.nuxeo.ecm.platform.MailService--propertiesFetcher",
              "label": "propertiesFetcher (org.nuxeo.ecm.platform.MailService)",
              "name": "propertiesFetcher",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.MailService",
              "descriptors": [
                "org.nuxeo.ecm.platform.mail.action.MessageActionPipeDescriptor"
              ],
              "documentation": "\n      Extension point to register a list of actions.\n\n      <p>\n        An ActionPipe is a list of ActionMessage used for mail import. Default contribution\n        are merged but you can override them using 'override' attribute.\n\n      <code>\n        <pipe name=\"nxmail\" override=\"true\">\n            <action id=\"StartAction\" to=\"CreateDocumentsAction\">\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          </action>\n            <action id=\"CreateDocumentsAction\">\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n          </action>\n        </pipe>\n    </code>\n</p>\n<p>\n        When registering the ActionPipe, the service looks for an ActionMessage named\n        'StartAction', so this is a mandatory attribute. Registration of the pipe ends when\n        service doesn't find the next action.\n      </p>\n<p>\n        Since 6.0, you can use Automation to control how Documents are created from email.\n        For that you need to redefine the ActionPipe.\n        <code>\n        <pipe name=\"nxmail\" override=\"true\">\n            <action>\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          </action>\n            <action>\n            org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n          </action>\n            <action chain=\"CreateMailDocumentFromAutomation\">\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n          </action>\n        </pipe>\n    </code>\n\n        Then the CreateMailDocumentFromAutomation Chain whill be used to create the content.\n      </p>\n",
              "documentationHtml": "<p>\nExtension point to register a list of actions.\n</p><p>\n</p><p>\nAn ActionPipe is a list of ActionMessage used for mail import. Default contribution\nare merged but you can override them using &#39;override&#39; attribute.\n</p><p>\n</p><pre><code>        &lt;pipe name&#61;&#34;nxmail&#34; override&#61;&#34;true&#34;&gt;\n            &lt;action id&#61;&#34;StartAction&#34; to&#61;&#34;CreateDocumentsAction&#34;&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          &lt;/action&gt;\n            &lt;action id&#61;&#34;CreateDocumentsAction&#34;&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n          &lt;/action&gt;\n        &lt;/pipe&gt;\n</code></pre><p>\n</p>\n<p>\nWhen registering the ActionPipe, the service looks for an ActionMessage named\n&#39;StartAction&#39;, so this is a mandatory attribute. Registration of the pipe ends when\nservice doesn&#39;t find the next action.\n</p>\n<p>\nSince 6.0, you can use Automation to control how Documents are created from email.\nFor that you need to redefine the ActionPipe.\n</p><p></p><pre><code>        &lt;pipe name&#61;&#34;nxmail&#34; override&#61;&#34;true&#34;&gt;\n            &lt;action&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          &lt;/action&gt;\n            &lt;action&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n          &lt;/action&gt;\n            &lt;action chain&#61;&#34;CreateMailDocumentFromAutomation&#34;&gt;\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n          &lt;/action&gt;\n        &lt;/pipe&gt;\n</code></pre><p>\nThen the CreateMailDocumentFromAutomation Chain whill be used to create the content.\n</p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService/ExtensionPoints/org.nuxeo.ecm.platform.MailService--actionPipes",
              "id": "org.nuxeo.ecm.platform.MailService--actionPipes",
              "label": "actionPipes (org.nuxeo.ecm.platform.MailService)",
              "name": "actionPipes",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService",
          "name": "org.nuxeo.ecm.platform.MailService",
          "requirements": [],
          "resolutionOrder": 351,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.MailService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.MailService/Services/org.nuxeo.ecm.platform.mail.service.MailService",
              "id": "org.nuxeo.ecm.platform.mail.service.MailService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 603,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.MailService\">\n  <documentation>\n    Services to to manage mails.\n\n    @author <a href=\"mailto:arussel@nuxeo.com\">Alexandre Russel</a>\n  </documentation>\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.mail.service.MailService\" />\n  </service>\n  <implementation class=\"org.nuxeo.ecm.platform.mail.service.MailServiceImpl\" />\n  <extension-point name=\"sessionFactory\">\n    <documentation>\n      Extension point to register a session factory.\n\n      <p>\n        A session factory allows to create session for users. To create sessions\n        the factory needs informations such as host, port, protocol ... The list\n        of needed properties depends on the protocol used and if you need store,\n        transport or both. For more information see the\n        <a href=\"http://java.sun.com/products/javamail/javadocs/index.html\">\n          JavaMail API\n        </a>\n        .\n      </p>\n      <p>\n        To get hold of a Session call: MailService mailService =\n        Framework.getService(MailSerivce.class); Transport transport =\n        mailSerivce.getTransport(\"myFactory\"); Store store =\n        mailServcie.getStore(\"myFactory\");\n      </p>\n      <p>\n        The default is to get a session for the authenticated user if any, or\n        you can pass a String to get a session for a user.\n      </p>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.mail.service.SessionFactoryDescriptor\" />\n  </extension-point>\n  <extension-point name=\"propertiesFetcher\">\n    <documentation>\n      Extension point to register a properties fetcher.\n      <p>\n        The responsability of a property fetcher is to fetch properties from any\n        backend.\n      </p>\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.mail.fetcher.PropertiesFetcherDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"actionPipes\">\n    <documentation>\n      Extension point to register a list of actions.\n\n      <p>\n        An ActionPipe is a list of ActionMessage used for mail import. Default contribution\n        are merged but you can override them using 'override' attribute.\n\n      <code>\n        <pipe name=\"nxmail\" override=\"true\">\n          <action id=\"StartAction\" to=\"CreateDocumentsAction\">\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          </action>\n          <action id=\"CreateDocumentsAction\">\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n          </action>\n        </pipe>\n      </code>\n      </p>\n\n      <p>\n        When registering the ActionPipe, the service looks for an ActionMessage named\n        'StartAction', so this is a mandatory attribute. Registration of the pipe ends when\n        service doesn't find the next action.\n      </p>\n\n      <p>\n        Since 6.0, you can use Automation to control how Documents are created from email.\n        For that you need to redefine the ActionPipe.\n        <code>\n         <pipe name=\"nxmail\"  override=\"true\">\n          <action>\n            org.nuxeo.ecm.platform.mail.listener.action.StartAction\n          </action>\n          <action>\n            org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n          </action>\n          <action chain=\"CreateMailDocumentFromAutomation\">\n            org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n          </action>\n         </pipe>\n        </code>\n\n        Then the CreateMailDocumentFromAutomation Chain whill be used to create the content.\n      </p>\n\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.mail.action.MessageActionPipeDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-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.MailService--propertiesFetcher",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.service.MailServiceContrib/Contributions/org.nuxeo.ecm.platform.mail.service.MailServiceContrib--propertiesFetcher",
              "id": "org.nuxeo.ecm.platform.mail.service.MailServiceContrib--propertiesFetcher",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.MailService",
                "name": "org.nuxeo.ecm.platform.MailService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"propertiesFetcher\" target=\"org.nuxeo.ecm.platform.MailService\">\n    <propertiesFetcher class=\"org.nuxeo.ecm.platform.mail.fetcher.SimplePropertiesFetcher\" name=\"simple\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.MailService--actionPipes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.service.MailServiceContrib/Contributions/org.nuxeo.ecm.platform.mail.service.MailServiceContrib--actionPipes",
              "id": "org.nuxeo.ecm.platform.mail.service.MailServiceContrib--actionPipes",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.MailService",
                "name": "org.nuxeo.ecm.platform.MailService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actionPipes\" target=\"org.nuxeo.ecm.platform.MailService\">\n\n    <pipe name=\"nxmail\">\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n    </pipe>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.service.MailServiceContrib",
          "name": "org.nuxeo.ecm.platform.mail.service.MailServiceContrib",
          "requirements": [
            "org.nuxeo.ecm.platform.MailService"
          ],
          "resolutionOrder": 352,
          "services": [],
          "startOrder": 285,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.service.MailServiceContrib\">\n  <require>org.nuxeo.ecm.platform.MailService</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.MailService\"\n    point=\"propertiesFetcher\">\n    <propertiesFetcher name=\"simple\" class=\"org.nuxeo.ecm.platform.mail.fetcher.SimplePropertiesFetcher\"/>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\n    <pipe name=\"nxmail\">\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n    </pipe>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-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/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.lifecycle.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.lifecycle.contrib--types",
              "id": "org.nuxeo.ecm.platform.mail.core.lifecycle.contrib--types",
              "registrationOrder": 11,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"MailMessage\">default</type>\n      <type name=\"MailFolder\">default</type>\n    </types>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.lifecycle.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.lifecycle.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.mail.core.types.contrib",
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 353,
          "services": [],
          "startOrder": 279,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.mail.core.lifecycle.contrib\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n  <require>org.nuxeo.ecm.platform.mail.core.types.contrib</require>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"types\">\n    <types>\n      <type name=\"MailMessage\">default</type>\n      <type name=\"MailFolder\">default</type>\n    </types>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-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.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.listener.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.listener.contrib--listener",
              "id": "org.nuxeo.ecm.platform.mail.core.listener.contrib--listener",
              "registrationOrder": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.mail.listener.MailEventListener\" name=\"mailReceivedListener\" postCommit=\"false\" priority=\"140\">\n      <event>MailReceivedEvent</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.listener.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.listener.contrib",
          "requirements": [],
          "resolutionOrder": 354,
          "services": [],
          "startOrder": 280,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.listener.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n    <listener name=\"mailReceivedListener\" async=\"false\"\n      postCommit=\"false\" priority=\"140\"\n      class=\"org.nuxeo.ecm.platform.mail.listener.MailEventListener\">\n      <event>MailReceivedEvent</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxmail-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/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.operations.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.operations.contrib--operations",
              "id": "org.nuxeo.ecm.platform.mail.core.operations.contrib--operations",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.platform.mail.operations.MailCheckInboxOperation\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.operations.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.operations.contrib",
          "requirements": [],
          "resolutionOrder": 355,
          "services": [],
          "startOrder": 281,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.operations.contrib\">\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.platform.mail.operations.MailCheckInboxOperation\" />\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": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.security.SecurityService--policies",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib/Contributions/org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib--policies",
              "id": "org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib--policies",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.security.SecurityService",
                "name": "org.nuxeo.ecm.core.security.SecurityService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"policies\" target=\"org.nuxeo.ecm.core.security.SecurityService\">\n    <policy class=\"org.nuxeo.ecm.platform.mail.security.MailMessageSecurityPolicy\" name=\"MailMessage\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail/org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib",
          "name": "org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib",
          "requirements": [],
          "resolutionOrder": 356,
          "services": [],
          "startOrder": 282,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.mail.core.securitypolicy.contrib\">\n  <extension target=\"org.nuxeo.ecm.core.security.SecurityService\" point=\"policies\">\n    <policy name=\"MailMessage\" class=\"org.nuxeo.ecm.platform.mail.security.MailMessageSecurityPolicy\"/>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/security-policy-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-mail-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.mail",
      "id": "org.nuxeo.ecm.platform.mail",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo ECM Mail Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.mail;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nRequire-Bundle: org.nuxeo.ecm.core.api,org.nuxeo.ecm.core.event\r\nEclipse-LazyStart: false\r\nNuxeo-Component: OSGI-INF/automation-contrib.xml,OSGI-INF/nxmail-blobhol\r\n der-contrib.xml,OSGI-INF/nxmail-contrib.xml,OSGI-INF/nxmail-core-types-\r\n contrib.xml,OSGI-INF/nxmail-ecm-types-contrib.xml,OSGI-INF/nxmail-frame\r\n work.xml,OSGI-INF/nxmail-lifecycle-contrib.xml,OSGI-INF/nxmail-listener\r\n -contrib.xml,OSGI-INF/operations-contrib.xml,OSGI-INF/security-policy-c\r\n ontrib.xml\r\nProvide-Package: org.nuxeo.ecm.platform.mail\r\n\r\n",
      "maxResolutionOrder": 356,
      "minResolutionOrder": 347,
      "packages": [
        "nuxeo-imap-connector"
      ],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "nuxeo-platform-mail\n===================\n\n## About\n\nThe `nuxeo-platform-mail` module provides the `MailFolder` feature : you can configure Nuxeo Server to fetch emails from a Pop3/Imapc server and have Nuxeo convert the emails into Nuxeo Documents and store them inside a Folder.\n\n## Mail server connection\n\nOne important aspect of nuxeo-platform-mail consists in the fact that multiple\nemail connections can be dynamically configured from the web UI interface.\n\nThis is done by creating \"Email folder\" documents, which contain the parameters\nneeded in order to connect to the email account.\n\nPeriodaically (this is configured in {{nxmail-scheduler-config.xml}}), all\nthe email accounts defined by the \"Email folders\" are checked for new incoming\nmail.\n\nFor every new mail found in a certain account, a new corresponding\n\"Email message\" is created as a child of the \"Email folder\" corresponding to\nthe email account.\n\nAlso, an email account check can be triggered for a certain \"Email folder\",\nby clicking the \"Check email\" button which can be found in the view page of\nan \"Email folder\" document.\n\nNote: For performance reasons, only a limited number of emails are\nimported for every account check. This limit can be set when a the\ncreation/modification of a MailFolder document.\n\n## Configuration\n\n### Extension point configuration\n\nMail Servers are configured at the MailFolder level.\n\nHowever, you can also control how the MailFolder will convert emails into Nuxeo Document.\n\nThe service uses a chain of actions that is configured using the `actionPipes` extension point :\n\nThe default configuration contains :\n\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.StartAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CheckMailUnicity\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsAction\n      </action>\n      <action>\n        org.nuxeo.ecm.platform.mail.listener.action.EndAction\n      </action>\n\nThe action that will actually create the Document is `CreateDocumentsAction`.\n\nSo, if you want the mail folder to create custom Document types, you have to contribute your own Action and overriding the default chain.\n\nHowever, if you don't want to do Java Code and prefer using Automation, since 6.0, you can.\n\n### Automation Bridge\n\nSince 6.0 a new MailAction is available and allows to call an Automation Chain.\n\n\n#### Configuraring the system to use Automation\n\nYou must override the default actionPipe and use the `CreateDocumentsFromAutomationChainAction` action\n\n\t<?xml version=\"1.0\"?>\n\t<component name=\"org.nuxeo.ecm.platform.mail.automation.override\">\n\n\t  <require>org.nuxeo.ecm.platform.mail.service.MailServiceContrib</require>\n\n\t  <extension target=\"org.nuxeo.ecm.platform.MailService\" point=\"actionPipes\">\n\t    <pipe name=\"nxmail\"  override=\"true\">\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.StartAction\n\t      </action>\n\t      <action>\n\t\torg.nuxeo.ecm.platform.mail.listener.action.ExtractMessageInformationAction\n\t      </action>\n\t      <action chain=\"CreateMailDocumentFromAutomation\">\n\t\torg.nuxeo.ecm.platform.mail.listener.action.CreateDocumentsFromAutomationChainAction\n\t      </action>\n\t    </pipe>\n\n\t  </extension>\n\n\t</component>\n\n#### Automation Execution Context\n\nThe Automation context is filled with the ExecutionContext used in the MailActionPipe :\n\n - `mailFolder` : is the target MailFolder document\n - `mailDocumentName` : is the computed name for the Mail Document (it is not required to use it)\n - `executionContext` : is the `ExecutionContext` defined in the pipe\n - all properties available in the `ExecutionContext` are dumped at root of Automation Context :\n    - `subject` is the mail subject\n    - `recipients` is the list of recipients\n    - `ccRecipients` is the list of recipients in CC\n    - `sendingDate` is the date the mail was sent\n    - `attachments` is the list of attached Blobs\n\n#### Chain example\n\nThe Chain itself should be something like :\n\n\n    <chain id=\"CreateMailDocumentFromAutomation\">\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailFolder</param>\n      </operation>\n      <operation id=\"Document.Create\">\n        <param type=\"string\" name=\"type\">MailMessage</param>\n        <param type=\"string\" name=\"name\">expr:Context[\"mailDocumentName\"]</param>\n        <param type=\"properties\" name=\"properties\">expr:mail:messageId=@{messageId}\n        </param>\n      </operation>\n      <operation id=\"Context.SetInputAsVar\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Context.RunScript\">\n        <param type=\"string\" name=\"script\">\n\n           Context[\"mailDocument\"].setPropertyValue(\"dc:title\",Context[\"subject\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:recipients\",Context[\"recipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:cc_recipients\",Context[\"ccRecipients\"]);\n           Context[\"mailDocument\"].setPropertyValue(\"mail:sending_date\",Context[\"sendingDate\"]);\n\n        </param>\n      </operation>\n      <operation id=\"Context.RunOperationOnList\">\n        <param type=\"string\" name=\"id\">ProcessAttachment</param>\n        <param type=\"string\" name=\"list\">attachments</param>\n        <param type=\"boolean\" name=\"isolate\">true</param>\n        <param type=\"string\" name=\"item\">attachment</param>\n      </operation>\n      <operation id=\"Context.RestoreDocumentInput\">\n        <param type=\"string\" name=\"name\">mailDocument</param>\n      </operation>\n      <operation id=\"Document.Save\"/>\n    </chain>\n    <chain id=\"ProcessAttachment\">\n      <operation id=\"Context.RestoreBlobInput\">\n        <param type=\"string\" name=\"name\">attachment</param>\n      </operation>\n      <operation id=\"Blob.Attach\">\n        <param type=\"document\" name=\"document\">expr:Context[\"mailDocument\"]</param>\n        <param type=\"boolean\" name=\"save\">false</param>\n        <param type=\"string\" name=\"xpath\">files:files</param>\n      </operation>\n    </chain>\n\n\n## About using SSL with you mail server\n\nIf you connect to your mail server using SSL, your server needs to\nhave a valid certificate, that is, a certificate that is issued by a\nknown Authority.\n\nIf this is not the case (you're using a self-made\ncertificate), then the JVM will refuse to connect and you'll have a\nSSLHandShake error.\n\nTo be able to connect with a server with a self-signed certificate, you\nneed to add this certificate to the trusted certificate using keytool\nwith a command such as (see man keytool for more information):\n\n    keytool -import -trustcacerts -file mail.cer -keystore thekeystore\n\nIf you don't have the certificate of the mail server you can get it\nwith the following command:\n\n    openssl s_client -connect my.mailserver.com:PORT\n\nYou can either import the certificate in the cacerts of your JVM, or\ncreate a new keystore and start the jvm with:\n\n    -Djavax.net.ssl.trustStore=/home/foo/.keystore\n\nAnother option is to use an helper class from:\nhttp://blogs.sun.com/andreas/entry/no_more_unable_to_find\nand to follow this step:\n\n1/ run the TestConnection class in eclipse as an application with your\n   connection parameters\n\n2/ if not working (error 'unable to find valid certification path to\n   requested target') compile the java class:\n   $ java InstallCert.java\n\n3/ execute on imap server for instance:\n   $ java InstallCert mail.example.com\n   or\n   $ java InstallCert mail.example.com:993\n\n4/ make sure it is a good key before entering, and make sure it's been\n   added to the default keystore in $JAVA_HOME/jre/lib/security/cacerts\n\n5/ reproduce steps if needed, *do not forget to delete* the local file\n   'jssecacerts' that's been created (otherwise the default keystore won't\n   be updated anymore)\n",
        "digest": "b97cb65a06e7661b30712d61fd7f451e",
        "encoding": "UTF-8",
        "length": 7916,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [
        "org.nuxeo.ecm.core.api",
        "org.nuxeo.ecm.core.event"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-notification",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
          "name": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
          "requirements": [],
          "resolutionOrder": 357,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.ec.notification.service.NotificationService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 612,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.service.NotificationContrib",
          "name": "org.nuxeo.ecm.platform.notification.service.NotificationContrib",
          "requirements": [],
          "resolutionOrder": 358,
          "services": [],
          "startOrder": 289,
          "version": "2025.7.12",
          "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/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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.rendering",
          "name": "org.nuxeo.ecm.platform.rendering",
          "requirements": [],
          "resolutionOrder": 359,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.rendering",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 630,
          "version": "2025.7.12",
          "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/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": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.notification.listener",
          "name": "org.nuxeo.ecm.platform.notification.listener",
          "requirements": [],
          "resolutionOrder": 360,
          "services": [],
          "startOrder": 288,
          "version": "2025.7.12",
          "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/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": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.operations",
          "name": "org.nuxeo.ecm.platform.ec.notification.operations",
          "requirements": [],
          "resolutionOrder": 361,
          "services": [],
          "startOrder": 259,
          "version": "2025.7.12",
          "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/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": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notifications.adapter",
          "name": "org.nuxeo.ecm.platform.ec.notifications.adapter",
          "requirements": [],
          "resolutionOrder": 362,
          "services": [],
          "startOrder": 260,
          "version": "2025.7.12",
          "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/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": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notification.jsonEnrichers",
          "name": "org.nuxeo.ecm.platform.ec.notification.jsonEnrichers",
          "requirements": [],
          "resolutionOrder": 363,
          "services": [],
          "startOrder": 258,
          "version": "2025.7.12",
          "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/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": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.notification/org.nuxeo.ecm.platform.ec.notifications.coretypes",
          "name": "org.nuxeo.ecm.platform.ec.notifications.coretypes",
          "requirements": [],
          "resolutionOrder": 364,
          "services": [],
          "startOrder": 261,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.notification",
      "id": "org.nuxeo.ecm.platform.notification",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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": 364,
      "minResolutionOrder": 357,
      "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": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-oauth",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.oauth",
      "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--authenticators",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.auth.defaultConfig/Contributions/org.nuxeo.ecm.platform.oauth.auth.defaultConfig--authenticators",
              "id": "org.nuxeo.ecm.platform.oauth.auth.defaultConfig--authenticators",
              "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": "2025.7.12",
              "xml": "<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <authenticationPlugin class=\"org.nuxeo.ecm.platform.oauth2.NuxeoOAuth2Authenticator\" enabled=\"true\" name=\"OAUTH2_AUTH\">\n    </authenticationPlugin>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService--startURL",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.auth.defaultConfig/Contributions/org.nuxeo.ecm.platform.oauth.auth.defaultConfig--startURL",
              "id": "org.nuxeo.ecm.platform.oauth.auth.defaultConfig--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": "2025.7.12",
              "xml": "<extension point=\"startURL\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>oauth2Grant.jsp</pattern>\n        <pattern>oauth2/authorize</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property to set the oauth2 token expiration duration. Default is 60 minutes.\n\n      @since 2021.14\n    \n",
              "documentationHtml": "<p>\nProperty to set the oauth2 token expiration duration. Default is 60 minutes.\n</p><p>\n&#64;since 2021.14\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.auth.defaultConfig/Contributions/org.nuxeo.ecm.platform.oauth.auth.defaultConfig--configuration",
              "id": "org.nuxeo.ecm.platform.oauth.auth.defaultConfig--configuration",
              "registrationOrder": 31,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property to set the oauth2 token expiration duration. Default is 60 minutes.\n\n      @since 2021.14\n    </documentation>\n    <property name=\"nuxeo.oauth2.token.expiration.duration\">60m</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.auth.defaultConfig",
          "name": "org.nuxeo.ecm.platform.oauth.auth.defaultConfig",
          "requirements": [],
          "resolutionOrder": 365,
          "services": [],
          "startOrder": 290,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.auth.defaultConfig\">\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"authenticators\">\n    <authenticationPlugin name=\"OAUTH2_AUTH\" enabled=\"true\" class=\"org.nuxeo.ecm.platform.oauth2.NuxeoOAuth2Authenticator\">\n    </authenticationPlugin>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\" point=\"startURL\">\n\n    <startURLPattern>\n      <patterns>\n        <pattern>oauth2Grant.jsp</pattern>\n        <pattern>oauth2/authorize</pattern>\n      </patterns>\n    </startURLPattern>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property to set the oauth2 token expiration duration. Default is 60 minutes.\n\n      @since 2021.14\n    </documentation>\n    <property name=\"nuxeo.oauth2.token.expiration.duration\">60m</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/authentication-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistryImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Component and Service to manage the OAuth2 Service providers that can be accessed from Nuxeo via OAuth2\n\n    @author Nelson Silva (nelson.silva@inevo.pt)\n  \n",
          "documentationHtml": "<p>\nComponent and Service to manage the OAuth2 Service providers that can be accessed from Nuxeo via OAuth2\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
              "descriptors": [
                "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry/ExtensionPoints/org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry--providers",
              "id": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry--providers",
              "label": "providers (org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry)",
              "name": "providers",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
          "name": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
          "requirements": [],
          "resolutionOrder": 366,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry/Services/org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
              "id": "org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 624,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry\">\n  <implementation\n          class=\"org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistryImpl\" />\n  <documentation>\n    Component and Service to manage the OAuth2 Service providers that can be accessed from Nuxeo via OAuth2\n\n    @author Nelson Silva (nelson.silva@inevo.pt)\n  </documentation>\n\n  <service>\n        <provide interface=\"org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderRegistry\" />\n  </service>\n\n  <extension-point name=\"providers\">\n    <object class=\"org.nuxeo.ecm.platform.oauth2.providers.OAuth2ServiceProviderDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/oauth2serviceprovider-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.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.bulk.config/Contributions/org.nuxeo.ecm.platform.oauth.bulk.config--actions",
              "id": "org.nuxeo.ecm.platform.oauth.bulk.config--actions",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"50\" bucketSize=\"500\" inputStream=\"bulk/garbageCollectExpiredOAuth2Tokens\" name=\"garbageCollectExpiredOAuth2Tokens\" validationClass=\"org.nuxeo.ecm.platform.oauth2.bulk.validation.GarbageCollectExpiredOAuth2TokensValidation\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.bulk.config/Contributions/org.nuxeo.ecm.platform.oauth.bulk.config--streamProcessor",
              "id": "org.nuxeo.ecm.platform.oauth.bulk.config--streamProcessor",
              "registrationOrder": 12,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.platform.oauth2.bulk.GarbageCollectExpiredOAuth2TokensAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" name=\"garbageCollectExpiredOAuth2Tokens\">\n      <policy continueOnFailure=\"false\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.bulk.config",
          "name": "org.nuxeo.ecm.platform.oauth.bulk.config",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 369,
          "services": [],
          "startOrder": 291,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.bulk.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=\"garbageCollectExpiredOAuth2Tokens\"\n            validationClass=\"org.nuxeo.ecm.platform.oauth2.bulk.validation.GarbageCollectExpiredOAuth2TokensValidation\"\n            inputStream=\"bulk/garbageCollectExpiredOAuth2Tokens\" bucketSize=\"500\" batchSize=\"50\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"garbageCollectExpiredOAuth2Tokens\"\n                     class=\"org.nuxeo.ecm.platform.oauth2.bulk.GarbageCollectExpiredOAuth2TokensAction\"\n                     defaultConcurrency=\"${nuxeo.bulk.action.garbageCollectExpiredOAuth2Tokens.defaultConcurrency:=2}\"\n                     defaultPartitions=\"${nuxeo.bulk.action.garbageCollectExpiredOAuth2Tokens.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/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.scheduler.SchedulerService--schedule",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.events.contrib/Contributions/org.nuxeo.ecm.platform.oauth.events.contrib--schedule",
              "id": "org.nuxeo.ecm.platform.oauth.events.contrib--schedule",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scheduler.SchedulerService",
                "name": "org.nuxeo.ecm.core.scheduler.SchedulerService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schedule\" target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\">\n    <schedule id=\"garbageCollectExpiredOAuth2Tokens\">\n      <!-- Schedule GC every sunday at 2am by default, customizable via nuxeo.conf property -->\n      <cronExpression>0 0 2 ? * SUN</cronExpression>\n      <event>garbageCollectExpiredOAuth2Tokens</event>\n    </schedule>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.events.contrib/Contributions/org.nuxeo.ecm.platform.oauth.events.contrib--listener",
              "id": "org.nuxeo.ecm.platform.oauth.events.contrib--listener",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.oauth2.events.GarbageCollectExpiredOAuth2TokensListener\" enabled=\"true\" name=\"garbageCollectExpiredOAuth2Tokens\">\n      <event>garbageCollectExpiredOAuth2Tokens</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.events.contrib",
          "name": "org.nuxeo.ecm.platform.oauth.events.contrib",
          "requirements": [],
          "resolutionOrder": 370,
          "services": [],
          "startOrder": 293,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.events.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.scheduler.SchedulerService\" point=\"schedule\">\n    <schedule id=\"garbageCollectExpiredOAuth2Tokens\">\n      <!-- Schedule GC every sunday at 2am by default, customizable via nuxeo.conf property -->\n      <cronExpression>${nuxeo.oauth2.garbageCollectExpiredTokens.cronExpression:=0 0 2 ? * SUN}</cronExpression>\n      <event>garbageCollectExpiredOAuth2Tokens</event>\n    </schedule>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\" point=\"listener\">\n    <listener name=\"garbageCollectExpiredOAuth2Tokens\" async=\"true\"\n              enabled=\"${nuxeo.oauth2.garbageCollectExpiredTokens.enabled:=true}\"\n              class=\"org.nuxeo.ecm.platform.oauth2.events.GarbageCollectExpiredOAuth2TokensListener\">\n      <event>garbageCollectExpiredOAuth2Tokens</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/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.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.schemaContribs/Contributions/org.nuxeo.ecm.platform.oauth.schemaContribs--schema",
              "id": "org.nuxeo.ecm.platform.oauth.schemaContribs--schema",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"oauth2ServiceProvider\" src=\"schemas/oauth2serviceprovider.xsd\"/>\n    <schema name=\"oauth2Token\" src=\"schemas/oauth2token.xsd\"/>\n    <schema name=\"oauth2Client\" src=\"schemas/oauth2client.xsd\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.schemaContribs",
          "name": "org.nuxeo.ecm.platform.oauth.schemaContribs",
          "requirements": [],
          "resolutionOrder": 371,
          "services": [],
          "startOrder": 295,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.schemaContribs\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"oauth2ServiceProvider\" src=\"schemas/oauth2serviceprovider.xsd\"/>\n    <schema name=\"oauth2Token\" src=\"schemas/oauth2token.xsd\"/>\n    <schema name=\"oauth2Client\" src=\"schemas/oauth2client.xsd\"/>\n  </extension>\n\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.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.directoryContrib/Contributions/org.nuxeo.ecm.platform.oauth.directoryContrib--directories",
              "id": "org.nuxeo.ecm.platform.oauth.directoryContrib--directories",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"oauth2ServiceProviders\">\n      <schema>oauth2ServiceProvider</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <substringMatchType>subfinal</substringMatchType>\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\n    <directory extends=\"template-directory\" name=\"oauth2Tokens\">\n      <schema>oauth2Token</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\n    <directory extends=\"template-directory\" name=\"oauth2Clients\">\n      <schema>oauth2Client</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <dataFile>directories/oauth2clients.csv</dataFile>\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\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.directoryContrib/Contributions/org.nuxeo.ecm.platform.oauth.directoryContrib--schema",
              "id": "org.nuxeo.ecm.platform.oauth.directoryContrib--schema",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <property indexOrder=\"ascending\" name=\"accessToken\" schema=\"oauth2Token\"/>\n    <property indexOrder=\"ascending\" name=\"serviceName\" schema=\"oauth2Token\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.directoryContrib",
          "name": "org.nuxeo.ecm.platform.oauth.directoryContrib",
          "requirements": [],
          "resolutionOrder": 372,
          "services": [],
          "startOrder": 292,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.directoryContrib\">\n\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"oauth2ServiceProviders\" extends=\"template-directory\">\n      <schema>oauth2ServiceProvider</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <substringMatchType>subfinal</substringMatchType>\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\n    <directory name=\"oauth2Tokens\" extends=\"template-directory\">\n      <schema>oauth2Token</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\n    <directory name=\"oauth2Clients\" extends=\"template-directory\">\n      <schema>oauth2Client</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <dataFile>directories/oauth2clients.csv</dataFile>\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\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <property schema=\"oauth2Token\" name=\"accessToken\" indexOrder=\"ascending\" />\n    <property schema=\"oauth2Token\" name=\"serviceName\" indexOrder=\"ascending\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/directory-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    OAuth2 registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nOAuth2 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/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.marshallers/Contributions/org.nuxeo.ecm.platform.oauth.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.oauth.marshallers--marshallers",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.oauth2.providers.NuxeoOAuth2ServiceProviderReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.oauth2.providers.NuxeoOAuth2ServiceProviderWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.oauth2.providers.NuxeoOAuth2ServiceProviderListWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.oauth2.tokens.NuxeoOAuth2TokenReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.oauth2.tokens.NuxeoOAuth2TokenWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.oauth2.tokens.NuxeoOAuth2TokenListWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientListWriter\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth.marshallers",
          "name": "org.nuxeo.ecm.platform.oauth.marshallers",
          "requirements": [],
          "resolutionOrder": 373,
          "services": [],
          "startOrder": 294,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.marshallers\" version=\"1.0.0\">\n  <documentation>\n    OAuth2 registered marshallers set.\n  </documentation>\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"org.nuxeo.ecm.platform.oauth2.providers.NuxeoOAuth2ServiceProviderReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.oauth2.providers.NuxeoOAuth2ServiceProviderWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.oauth2.providers.NuxeoOAuth2ServiceProviderListWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.oauth2.tokens.NuxeoOAuth2TokenReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.oauth2.tokens.NuxeoOAuth2TokenWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.oauth2.tokens.NuxeoOAuth2TokenListWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientListWriter\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service to manage the OAuth2 tokens.\n\n    @author Salem Aouana\n  \n",
          "documentationHtml": "<p>\nService to manage the OAuth2 tokens.\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenService",
          "name": "org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenService",
          "requirements": [
            "org.nuxeo.ecm.directory.DirectoryServiceImpl"
          ],
          "resolutionOrder": 585,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenService/Services/org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenService",
              "id": "org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 625,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenService\">\n  <require>org.nuxeo.ecm.directory.DirectoryServiceImpl</require>\n\n  <implementation class=\"org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenServiceImpl\" />\n\n  <documentation>\n    Service to manage the OAuth2 tokens.\n\n    @author Salem Aouana\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.oauth2.tokens.OAuth2TokenService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/oauth2tokenservice-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service to manage the OAuth2 clients\n\n    @author Arnaud Kervern (ak@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nService to manage the OAuth2 clients\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientService",
          "name": "org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientService",
          "requirements": [
            "org.nuxeo.ecm.directory.DirectoryServiceImpl"
          ],
          "resolutionOrder": 590,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth/org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientService/Services/org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientService",
              "id": "org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 623,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientService\">\n  <!-- This service depends on the directory service (which depends on the cache service) -->\n  <require>org.nuxeo.ecm.directory.DirectoryServiceImpl</require>\n\n  <implementation class=\"org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientServiceImpl\" />\n\n  <documentation>\n    Service to manage the OAuth2 clients\n\n    @author Arnaud Kervern (ak@nuxeo.com)\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.oauth2.clients.OAuth2ClientService\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/oauth2clientservice-framework.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-oauth-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth",
      "id": "org.nuxeo.ecm.platform.oauth",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo OAuth\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/authentication-contrib.xml,OSGI-INF/oauth2serv\r\n iceprovider-framework.xml,OSGI-INF/bulk-contrib.xml,OSGI-INF/events-con\r\n trib.xml,OSGI-INF/schema-contrib.xml,OSGI-INF/directory-contrib.xml,OSG\r\n I-INF/oauth2clientservice-framework.xml,OSGI-INF/oauth2tokenservice-fra\r\n mework.xml,OSGI-INF/marshallers-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.oauth;singleton:=true\r\nNuxeo-WebModule: org.nuxeo.ecm.webengine.app.WebEngineModule;name=oauth2\r\n ;extends=base;package=org/nuxeo/ecm/webengine/oauth2;headless=true\r\n\r\n",
      "maxResolutionOrder": 590,
      "minResolutionOrder": 365,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-oauth1",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.oauth1",
      "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--authenticators",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth1.defaultConfig/Contributions/org.nuxeo.ecm.platform.oauth1.defaultConfig--authenticators",
              "id": "org.nuxeo.ecm.platform.oauth1.defaultConfig--authenticators",
              "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": "2025.7.12",
              "xml": "<extension point=\"authenticators\" target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\">\n    <authenticationPlugin class=\"org.nuxeo.ecm.platform.ui.web.auth.oauth.NuxeoOAuth1Authenticator\" enabled=\"true\" name=\"OAUTH1_AUTH\">\n    </authenticationPlugin>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth1.defaultConfig",
          "name": "org.nuxeo.ecm.platform.oauth1.defaultConfig",
          "requirements": [],
          "resolutionOrder": 374,
          "services": [],
          "startOrder": 296,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth1.defaultConfig\">\n\n  <!--\n    Deprecated since 2025.0, see OAuth 2.0 replacement in the nuxeo-platform-oauth module\n  -->\n  <extension target=\"org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService\"\n    point=\"authenticators\">\n    <authenticationPlugin name=\"OAUTH1_AUTH\" enabled=\"true\"\n      class=\"org.nuxeo.ecm.platform.ui.web.auth.oauth.NuxeoOAuth1Authenticator\">\n    </authenticationPlugin>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/authentication-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Component and Service to manage Asymetric key pair (RSA) used in OAUth signing process\n\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nComponent and Service to manage Asymetric key pair (RSA) used in OAUth signing process\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.oauth.keys.ServerKeyDescriptor"
              ],
              "documentation": "\n\n      Extension allowing to contribute a RSA Key pair\n\n      For instance :\n      <code>\n    <serverKeyPair>\n        <privateKeyName>nuxeo</privateKeyName>\n        <privateKey>-----BEGIN PRIVATE KEY-----YOUR_KEY_HERE-----END PRIVATE KEY-----</privateKey>\n        <publicCertificate>-----BEGIN CERTIFICATE-----YOUR_KEY_HERE-----END CERTIFICATE-----</publicCertificate>\n    </serverKeyPair>\n</code>\n\n\n      You should contribute your own key pair for your Nuxeo server.\n      You can use OpenSSL to generate this key pair :\n\n      <code>\n        openssl req -newkey rsa:1024 -days 365 -nodes -x509 -keyout testkey.pem -out testkey.pem -subj '/CN=mytestkey'\n        openssl pkcs8 -in testkey.pem -out oauthkey.pem -topk8 -nocrypt -outform PEM\n      </code>\n",
              "documentationHtml": "<p>\nExtension allowing to contribute a RSA Key pair\n</p><p>\nFor instance :\n</p><p></p><pre><code>    &lt;serverKeyPair&gt;\n        &lt;privateKeyName&gt;nuxeo&lt;/privateKeyName&gt;\n        &lt;privateKey&gt;-----BEGIN PRIVATE KEY-----YOUR_KEY_HERE-----END PRIVATE KEY-----&lt;/privateKey&gt;\n        &lt;publicCertificate&gt;-----BEGIN CERTIFICATE-----YOUR_KEY_HERE-----END CERTIFICATE-----&lt;/publicCertificate&gt;\n    &lt;/serverKeyPair&gt;\n</code></pre><p>\nYou should contribute your own key pair for your Nuxeo server.\nYou can use OpenSSL to generate this key pair :\n</p><p>\n</p><pre><code>        openssl req -newkey rsa:1024 -days 365 -nodes -x509 -keyout testkey.pem -out testkey.pem -subj &#39;/CN&#61;mytestkey&#39;\n        openssl pkcs8 -in testkey.pem -out oauthkey.pem -topk8 -nocrypt -outform PEM\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl/ExtensionPoints/org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl--serverKeyPair",
              "id": "org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl--serverKeyPair",
              "label": "serverKeyPair (org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl)",
              "name": "serverKeyPair",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl",
          "name": "org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl",
          "requirements": [],
          "resolutionOrder": 375,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl/Services/org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManager",
              "id": "org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManager",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 620,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl\">\n\n  <!--\n    Deprecated since 2025.0, see OAuth 2.0 replacement in the nuxeo-platform-oauth module\n  -->\n  <implementation\n          class=\"org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManagerImpl\" />\n  <documentation>\n    Component and Service to manage Asymetric key pair (RSA) used in OAUth signing process\n\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n        <provide interface=\"org.nuxeo.ecm.platform.oauth.keys.OAuthServerKeyManager\" />\n  </service>\n\n\n <extension-point name=\"serverKeyPair\">\n\n    <documentation>\n\n      Extension allowing to contribute a RSA Key pair\n\n      For instance :\n      <code>\n\n         <serverKeyPair>\n            <privateKeyName>nuxeo</privateKeyName>\n            <privateKey>-----BEGIN PRIVATE KEY-----YOUR_KEY_HERE-----END PRIVATE KEY-----</privateKey>\n            <publicCertificate>-----BEGIN CERTIFICATE-----YOUR_KEY_HERE-----END CERTIFICATE-----</publicCertificate>\n        </serverKeyPair>\n\n      </code>\n\n      You should contribute your own key pair for your Nuxeo server.\n      You can use OpenSSL to generate this key pair :\n\n      <code>\n        openssl req -newkey rsa:1024 -days 365 -nodes -x509 -keyout testkey.pem -out testkey.pem -subj '/CN=mytestkey'\n        openssl pkcs8 -in testkey.pem -out oauthkey.pem -topk8 -nocrypt -outform PEM\n      </code>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.oauth.keys.ServerKeyDescriptor\" />\n\n  </extension-point>\n</component>\n",
          "xmlFileName": "/OSGI-INF/oauthserverkey-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistryImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Component and Service to manage the OAuth Consumer that can access Nuxeo services via OAuth\n\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nComponent and Service to manage the OAuth Consumer that can access Nuxeo services via OAuth\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistryImpl",
          "name": "org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistryImpl",
          "requirements": [],
          "resolutionOrder": 376,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistryImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistryImpl/Services/org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistry",
              "id": "org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistry",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 619,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistryImpl\">\n\n  <!--\n    Deprecated since 2025.0, see OAuth 2.0 replacement in the nuxeo-platform-oauth module\n  -->\n  <implementation\n          class=\"org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistryImpl\" />\n  <documentation>\n    Component and Service to manage the OAuth Consumer that can access Nuxeo services via OAuth\n\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n        <provide interface=\"org.nuxeo.ecm.platform.oauth.consumers.OAuthConsumerRegistry\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/oauthconsumer-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStoreImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Component and Service to manage the OAuth tokens\n\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nComponent and Service to manage the OAuth tokens\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStoreImpl",
          "name": "org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStoreImpl",
          "requirements": [],
          "resolutionOrder": 377,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStoreImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStoreImpl/Services/org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStore",
              "id": "org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStore",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 622,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStoreImpl\">\n\n  <!--\n    Deprecated since 2025.0, see OAuth 2.0 replacement in the nuxeo-platform-oauth module\n  -->\n  <implementation\n          class=\"org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStoreImpl\" />\n  <documentation>\n    Component and Service to manage the OAuth tokens\n\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n        <provide interface=\"org.nuxeo.ecm.platform.oauth.tokens.OAuthTokenStore\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/oauthtoken-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistryImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Component and Service to manage the OAuth Service providers that can be accessed from Nuxeo via OAuth\n\n    @author Thierry Delprat (td@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nComponent and Service to manage the OAuth Service providers that can be accessed from Nuxeo via OAuth\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistryImpl",
          "name": "org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistryImpl",
          "requirements": [],
          "resolutionOrder": 378,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistryImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistryImpl/Services/org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistry",
              "id": "org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistry",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 621,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistryImpl\">\n\n  <!--\n    Deprecated since 2025.0, see OAuth 2.0 replacement in the nuxeo-platform-oauth module\n  -->\n  <implementation\n          class=\"org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistryImpl\" />\n  <documentation>\n    Component and Service to manage the OAuth Service providers that can be accessed from Nuxeo via OAuth\n\n    @author Thierry Delprat (td@nuxeo.com)\n  </documentation>\n\n  <service>\n        <provide interface=\"org.nuxeo.ecm.platform.oauth.providers.OAuthServiceProviderRegistry\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/oauthserviceprovider-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.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth1.schemaContribs/Contributions/org.nuxeo.ecm.platform.oauth1.schemaContribs--schema",
              "id": "org.nuxeo.ecm.platform.oauth1.schemaContribs--schema",
              "registrationOrder": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"oauthConsumer\" src=\"schemas/oauthconsumer.xsd\"/>\n    <schema name=\"oauthServiceProvider\" src=\"schemas/oauthserviceprovider.xsd\"/>\n    <schema name=\"oauthToken\" src=\"schemas/oauthtoken.xsd\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth1.schemaContribs",
          "name": "org.nuxeo.ecm.platform.oauth1.schemaContribs",
          "requirements": [],
          "resolutionOrder": 379,
          "services": [],
          "startOrder": 298,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth1.schemaContribs\">\n\n  <!--\n    Deprecated since 2025.0, see OAuth 2.0 replacement in the nuxeo-platform-oauth module\n  -->\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"oauthConsumer\" src=\"schemas/oauthconsumer.xsd\"/>\n    <schema name=\"oauthServiceProvider\" src=\"schemas/oauthserviceprovider.xsd\"/>\n    <schema name=\"oauthToken\" src=\"schemas/oauthtoken.xsd\"/>\n  </extension>\n\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.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth1.directoryContrib/Contributions/org.nuxeo.ecm.platform.oauth1.directoryContrib--directories",
              "id": "org.nuxeo.ecm.platform.oauth1.directoryContrib--directories",
              "registrationOrder": 10,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n\n    <directory extends=\"template-directory\" name=\"oauthConsumers\">\n      <schema>oauthConsumer</schema>\n      <idField>consumerKey</idField>\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\n    <directory extends=\"template-directory\" name=\"oauthServiceProviders\">\n      <schema>oauthServiceProvider</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <substringMatchType>subfinal</substringMatchType>\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\n    <directory extends=\"template-directory\" name=\"oauthTokens\">\n      <schema>oauthToken</schema>\n      <idField>token</idField>\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\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1/org.nuxeo.ecm.platform.oauth1.directoryContrib",
          "name": "org.nuxeo.ecm.platform.oauth1.directoryContrib",
          "requirements": [],
          "resolutionOrder": 380,
          "services": [],
          "startOrder": 297,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.oauth1.directoryContrib\">\n\n  <!--\n    Deprecated since 2025.0, see OAuth 2.0 replacement in the nuxeo-platform-oauth module\n  -->\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n\n    <directory name=\"oauthConsumers\" extends=\"template-directory\">\n      <schema>oauthConsumer</schema>\n      <idField>consumerKey</idField>\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\n    <directory name=\"oauthServiceProviders\" extends=\"template-directory\">\n      <schema>oauthServiceProvider</schema>\n      <idField>id</idField>\n      <autoincrementIdField>true</autoincrementIdField>\n      <substringMatchType>subfinal</substringMatchType>\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\n    <directory name=\"oauthTokens\" extends=\"template-directory\">\n      <schema>oauthToken</schema>\n      <idField>token</idField>\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\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/directory-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-oauth1-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.oauth1",
      "id": "org.nuxeo.ecm.platform.oauth1",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.oauth1;singleton:=true\r\nBundle-Name: Nuxeo OAuth1\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/authentication-contrib.xml,OSGI-INF/oauthserve\r\n rkey-framework.xml,OSGI-INF/oauthconsumer-framework.xml,OSGI-INF/oautht\r\n oken-framework.xml,OSGI-INF/oauthserviceprovider-framework.xml,OSGI-INF\r\n /schema-contrib.xml,OSGI-INF/directory-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 380,
      "minResolutionOrder": 374,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-pdf-utils",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.pdf",
      "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/org.nuxeo.ecm.platform.pdf/org.nuxeo.ecm.platform.pdf.operations/Contributions/org.nuxeo.ecm.platform.pdf.operations--operations",
              "id": "org.nuxeo.ecm.platform.pdf.operations--operations",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFAddPageNumbersOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFConvertToPicturesOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFEncryptOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFEncryptReadOnlyOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFExtractInfoOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFExtractLinksOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFExtractPagesOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFExtractTextOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFMergeBlobsOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFMergeDocumentsOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFRemoveEncryptionOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFWatermarkImageOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFWatermarkPDFOperation\"/>\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFWatermarkTextOperation\"/>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.pdf/org.nuxeo.ecm.platform.pdf.operations",
          "name": "org.nuxeo.ecm.platform.pdf.operations",
          "requirements": [],
          "resolutionOrder": 381,
          "services": [],
          "startOrder": 299,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.pdf.operations\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFAddPageNumbersOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFConvertToPicturesOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFEncryptOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFEncryptReadOnlyOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFExtractInfoOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFExtractLinksOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFExtractPagesOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFExtractTextOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFMergeBlobsOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFMergeDocumentsOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFRemoveEncryptionOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFWatermarkImageOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFWatermarkPDFOperation\" />\n    <operation class=\"org.nuxeo.ecm.platform.pdf.operations.PDFWatermarkTextOperation\" />\n\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/pdf-utils-operations.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.pdf.service.PDFTransformationServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.pdf/org.nuxeo.pdf.utils.service",
          "name": "org.nuxeo.pdf.utils.service",
          "requirements": [],
          "resolutionOrder": 382,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.pdf.utils.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.pdf/org.nuxeo.pdf.utils.service/Services/org.nuxeo.ecm.platform.pdf.service.PDFTransformationService",
              "id": "org.nuxeo.ecm.platform.pdf.service.PDFTransformationService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 661,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.pdf.utils.service\">\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.pdf.service.PDFTransformationService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.ecm.platform.pdf.service.PDFTransformationServiceImpl\" />\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/service-contrib.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-pdf-utils-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.pdf",
      "id": "org.nuxeo.ecm.platform.pdf",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.pdf;singleton:=true\r\nBundle-Version: 1.0.0\r\nBundle-Name: nuxeo-platform-pdf-utils\r\nBundle-ClassPath: .\r\nBundle-ActivationPolicy: lazy\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.7\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/pdf-utils-operations.xml,OSGI-INF/service-cont\r\n rib.xml\r\n\r\n",
      "maxResolutionOrder": 382,
      "minResolutionOrder": 381,
      "packages": [],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Platform PDF Utils\n\nA set of utilities to deal with PDFs from a [nuxeo](http://nuxeo.com) application.\n\n## Operations\n\nThese operations can be used in Studio after importing their JSON definitions to the Automation registry.\n\n_A quick reminder: To get the JSON definition of an operation, you can install the plug-in, start nuxeo server then go to {server:port}/nuxeo/site/automation/doc. All available operations are listed, find the one you are looking for and follow the links to get its JSON definition._\n\n* **`PDF: Add Page Numbers`** (id `PDF.AddPageNumbers`)\n  * Accepts a Blob, returns a Blob\n  * The input blob must be a PDF\n  * The returned blob contains the page numbers, displayed using the parameters (position, font, ...)\n    * Notice the input blob is _not_ modified, a copy (+ page numbers) is returned\n\n  * The following parameters let you tune the operation:\n    * `startAtPage` (default: 1)\n    * `startAtNumber` (default: 1)\n    * `position`\n      * Can be Bottom right, Bottom center, Bottom left, Top right, Top center, or Top left\n      * Default: Bottom Right\n\n    * `fontName` (default: Helvetica)\n    * `fontSize` (default: 16)\n    * `hex255Color`\n      * Expressed as either 0xrrggbb or #rrggbb (case insensitive)\n      * Default value: 0xffffff\n\n    * `password`: If the PDF is encrypted, the password that will allow modification.\n\n* **`PDF: Extract Pages`** (id `PDF.ExtractPages`)\n  * Accept either a blob or a document as input\n  * Returns a blob built with the extracted pages\n  * If the input is a document, the `xpath` parameter must be used (default: `file:content`)\n  * The following parameters let you tune the operation:\n    * `startPage`\n      * If < 1 => realigned to 1\n      * If > `endPage` or > number of pages, a blank PDF is returned\n\n    * `endPage`\n      * If > number of pages, it is realigned to the number of pages\n\n    * `fileName`\n      * If not used, the filename will be the original file name plus the page range. For example, if the original name was \"mydoc.pdf\" and you extract pages 10 to 25, the resulting PDF will have a file name of \"mydoc-10-25.pdf\".\n\n    * `pdfTitle`\n      * If not used, title is not set\n      * Warning: This is not the `dc:title`. It is the title as stored in the metadata of the PDF.\n\n    * `pdfSubject`\n      * If not used, subject is not set\n\n    * `pdfAuthor`\n      * If not used, author is not set\n\n    * `password`: If the PDF is encrypted, the password that will allow extraction.\n\n* **`PDF: Merge with Blob(s)`** (id `PDF.MergeWithBlobs`)\n  * This operation merges all the blobs in a specific order (see below) and returns the final, merged PDF. Some properties (subject, ...) can also be set at the same time (optional)\n  * The order of the PDF is the following:\n    * Input blob\n    * Blob referenced by the Context variable whose name is `toAppendVarName`\n    * Blobs referenced as a `BlobList` by the Context variable whose name is `toAppendListVarName`\n    * Blobs stored in the documents whose IDs are referenced as a `String List` by the Context variable whose name is `toAppendDocIDsVarName`\n      * The `xpath` parameter is used to get the blob in each document\n      * Optional. Default value is `file:content`\n\n    * **Important**: The operation expects the _Context variable names_, _not the values_ of the variables. For example in Studio, say you have a multivalued String field named `myschema:the_ids`. It stores IDs of documents (typically, filled by the user using a \"Multiple Documents Suggestion Widget\"). In an Automation Chain, to merge the PDF embedded in a these documents with an input blob you would write (see we use `listArticles`, not `@{listArticles}`):\n    ```\n    . . . previous operations . . .\n    Set Context Variable\n      name: listArticles\n      value: @{Document[\"myschema:the_ids\"]}\n    . . .\n    PDF: Merge with Blob(s)\n      ..other parameters\n      toAppendDocIDsVarName: listArticles\n    ```\n    * These parameters are optional. Still, you probably want to use at least one of them :-)\n\n* **`PDF: PDF: Merge with Document(s)`** (id `PDF.MergeWithDocs`)\n  * See the documentation of `PDF: Merge with Blob(s)`\n  * The difference is that the input is a document. The operation extracts the blob from the `xpath` field. Notice that it is ok for this blob to be null, the operation will still merge all the other blobs referenced in the parameters\n\n* **`PDF: Info to Fields`** (id `PDF.InfoToFields`)\n  * Extract the info of the PDF and put them in the fields referenced by the `properties` parameter, return the modified document. If there is no blob or if the blob is not a PDF, all the values referenced in `properties` are cleared (set to empty string, 0, ...)\n  * Parameters:\n    * `xpath`: The xpath of the blob to handle in the document. Default value is `file:content`\n    * `save`: If true, the document is saved after its fields have been populated\n    * `properties`\n      * A `key=value` list (one key-value pair/line), where `key` is the xpath of the destination field and `value` is one of the following (case sensitive):\n\n    ```\n    File name\n    File size\n    PDF version\n    Page count\n    Page size\n    Page width\n    Page height\n    Page layout\n    Title\n    Author\n    Subject\n    PDF producer\n    Content creator\n    Creation date\n    Modification date\n    Encrypted\n    Keywords\n    Media box width\n    Media box height\n    Crop box width\n    Crop box height\n    Can Print\n    Can Modify\n    Can Extract\n    Can Modify Annotations\n    Can Fill Forms\n    Can Extract for Accessibility\n    Can Assemble\n    Can Print Degraded\n    ```\n\n    The  permission fields (starting with \"Can ...\") contain \"true\" or \"false\". Every field is \"true\" if the document is not encrypted or is opened with the _owner_ password.\n      * For example, say you have an `InfoOfPDF` schema, prefix `iop`, with misc. fields. You could write:\n    ```\n    iop:pdf_version=PDF version\n    iop:page_count=Page count\n    iop:page_size=Page size\n    ...etc...\n    ```\n\n* **`PDF: Watermark with Text`** (id `PDF.WatermarkWithText`)\n  * Accepts a Blob, returns a Blob\n  * Returns a _new_ blob combining the input PDF and the `watermark` text set on every pages, using the different `properties`.\n  * If `watermark` is empty, a simple copy of the input blob is returned\n  * `properties` is a `key=value` set where `key` can be one of the following. When not used, a default value applies:\n    * `fontFamily` (default: \"Helvetica\")\n    * `fontSize` (default: 36.0)\n    * `rotation` (default: 0)\n    * `hex255Color` (default: \"#000000\")\n    * `alphaColor` (default: 0.5)\n    * `xPosition` (default: 0)\n    * `yPosition` (default: 0)\n    * `invertY` (default: \"false\")\n\n  * _More details about some `properties`_:\n    * `xPosition` and `yPosition` start at the _bottom-left corner_ of each page\n    * `alphaColor` is a float with any value between 0.0 and 1.0. Values < 0 or > 1 are reset to the default 0.5\n\n* **`PDF: Watermark with Image`** (id `PDF.WatermarkWithImage`)\n  * Accepts a Blob, returns a Blob\n  * Returns a _new_ blob combining the input PDF and an image set on every page (using the `x`, `y`and `scale` parameters)\n  * The image to use for the watermark can be one of the following:\n    * `imageContextVarName`: A Context variable which references a Blob containing the image.\n    * `imageDocRef`: The path or the ID of a document whose `file:content` field contains the image to use\n      * _Notice_: If `imageDocRef`` is used, an `UnrestrictedSession` fetches its blob, so the PDF can be watermarked even if current user has not enough right to read the watermark itself.\n\n    * _Notice_: The operation first checks for `imageContextVarName`.\n\n  * `x` and `y` start at the bottom-left of the page\n  * Dimensions of the image will be * by `scale` (so 1.0 means \"Original size\", 0.5 means half the size. 4 means four time the size, ...)\n\n* **`PDF: Watermark with PDF`** (id `PDF.WatermarkWithPDF`)\n  * Accepts a Blob, returns a Blob\n  * Returns a _new_ blob combining the input pdf and an overlayed PDF on every page\n  * The PDF to use for the watermark can be one of the following:\n    * `pdfContextVarName`: A Context variable which references a Blob containing the PDF.\n    * `pdfDocRef`: The path or the ID of a document whose `file:content` field contains the PDF to use\n      * _Notice_: If `pdfDocRef`` is used, an`UnrestrictedSession` fetches its blob, so the PDF can be watermarked even if current user has not enough right to read the watermark itself.\n\n    * _Notice_: The operation first checks for `pdfContextVarName`.\n\n  * This operation uses `PDFBox` to overlay the PDF. The count of pages in each PDF can be different. Basically, the PDF to overlay will be repeated over the PDF to watermark. So for a final PDF of 10 pages:\n    * If the overlay has one single page, this page is overlayed on the 10 pages\n    * If the overlay has 3 pages, then the overlay will be made with pages 1 2 3 1 2 3 1 2 3 1\n\n* **`PDF: Encrypt Read Only`** (id `PDF.EncryptReadOnly`)\n  * Accepts Blob, Blobs, Document, Document(s)\n  * Encrypts the PDF in readonly mode: User can print, copy, print degraded, extract info for accessibility, but cannot assemble, modify, modify annotations.\n  * Returns a _new_ blob, copy of the original one, but encrypted\n  * Parameters:\n    * `originalOwnerPwd`: If the PDF is already encrypted, the password to open and modify it\n    * `owenrPwd`; The new password to use for encryption. An owner can do everything on the PDF. If not passed, we use `originalOwnerPwd`\n    * `userPwd`: The password for users, who will have restriction (read only) on the PDF\n    * `keyLength`: The length to use for the encryption key. Possible values are 40 and 128. If no value is passed, 128 is used\n    * `xpath`: If the input is `Document`  or `Documents`, the field where to get the blob from (`file:content` by default)\n\n* **`PDF: Encrypt`** (id `PDF.Encrypt`)\n  * Accepts Blob, Blobs, Document, Document(s)\n  * Encrypts the PDF with the permissions given in `permissions`\n  * Returns a _new_ blob, copy of the original one, but encrypted\n  * Parameters:\n    * `originalOwnerPwd`: If the PDF is already encrypted, the password to open and modify it\n    * `owenrPwd`; The new password to use for encryption. An owner can do everything on the PDF. If not passed, we use `originalOwnerPwd`\n    * `userPwd`: The password for users, who will have restriction (read only) on the PDF\n    * `keyLength`: The length to use for the encryption key. Possible values are 40 and 128. If no value is passed, 128 is used\n    * `xpath`: If the input is `Document`  or `Documents`, the field where to get the blob from (`file:content` by default)\n    * `permissions` is a `key=value` set where `key` can be one of the following. When not used, `false` is applied (permission to do the action is denied):\n    * `print`\n    * `modify`\n    * `copy`\n    * `modifyAnnot`\n    * `fillForms`\n    * `extractForAccessibility`\n    * `assemble`\n    * `printDegraded`\n\n    So for example, if you pass...\n\n    ```\n    print=true\n    copy=true\n    ```\n\n    ... the user will only be able to print and copy.\n\n* **`PDF: Remove Encryption`** (id `PDF.RemoveEncryption`)\n  * Accepts Blob, Blobs, Document, Document(s)\n  * Remove the encryption\n  * Returns a _new_ blob, copy of the original one, not encrypted at all.\n  * If the PDF already was encrypted, the operation still returns a copy of it (not the orginal blob)\n  * Parameters:\n    * `wnerPwd`: Password to use to decrypt and remove the permissions\n    * `xpath`: If the input is `Document`  or `Documents`, the field where to get the blob from (`file:content` by default)\n\n* **`PDF: Get Links`** (id `PDF.GetLinks`)\n  * Accepts Blob\n  * Returns a JSON String containing an array of objects. Each object has the following fields:\n    * `page`: The page number where the link is\n    * `subType`: The subType of the field. This is PDFBox (underlying java tool used to handle the PDF) label. It can be one of the following: `Launch`,  `GoToR` or `URI`.\n    * `text`: The text of the link\n    * `link`: The link itself (depending on `subType`)\n\n  * Parameters\n    * `type`: One of the following (case insensitive):\n      * `Launch`\n      * `Remote Go To`\n      * `URI`\n\n    * `getAll`: If `true`, the operation returns a list of all the links (of category Launch, Remote Go To or URI)\n    * Important: If `getAll` is `false`, `type` _must_ be filled (or an error will occur)\n\n* **`Conversion > PDF: Convert to Pictures`** (id `PDF.PDFToPictures`)\n    * Accepts a Document\n    * Parameters:\n        * `fileName` (default: PDF file name)\n            * This name will be applied to each image as `fileName` + `page number` + `.png`. Optional\n        * `xpath` (default: `file:content`)\n            * The path to the PDF blob. Optional\n        * `password`\n            * Password to unlock the PDF if required. Optional\n    * Returns a Blob List of each page of the PDF as PNG image\n    * These images can be used for OCR with [Nuxeo Vision](http://www.nuxeo.com/nuxeo-vision/), for example\n\n\n## Licensing\n\n[Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)\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](http://www.nuxeo.com).\n",
        "digest": "fc1a14b36657f05a9db29c08f366955b",
        "encoding": "UTF-8",
        "length": 13851,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-preview-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/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": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapters",
          "name": "org.nuxeo.ecm.platform.preview.adapters",
          "requirements": [],
          "resolutionOrder": 514,
          "services": [],
          "startOrder": 320,
          "version": "2025.7.12",
          "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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
          "name": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
          "requirements": [],
          "resolutionOrder": 515,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.preview.adapter.PreviewAdapterManagerComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 628,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.adapter.contrib",
          "name": "org.nuxeo.ecm.platform.preview.adapter.contrib",
          "requirements": [],
          "resolutionOrder": 516,
          "services": [],
          "startOrder": 319,
          "version": "2025.7.12",
          "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/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": 6,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "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>application/json</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/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": 518,
          "services": [],
          "startOrder": 252,
          "version": "2025.7.12",
          "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>application/json</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/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": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.convert.preview.marshallers",
          "name": "org.nuxeo.ecm.platform.convert.preview.marshallers",
          "requirements": [],
          "resolutionOrder": 519,
          "services": [],
          "startOrder": 251,
          "version": "2025.7.12",
          "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/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": 38,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 39,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.preview/org.nuxeo.ecm.platform.preview.properties",
          "name": "org.nuxeo.ecm.platform.preview.properties",
          "requirements": [],
          "resolutionOrder": 520,
          "services": [],
          "startOrder": 321,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.preview",
      "id": "org.nuxeo.ecm.platform.preview",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM Preview Plugin\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.preview;singleton:=true\r\nBundle-Version: 1.0.0\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": 520,
      "minResolutionOrder": 514,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.ui",
        "org.nuxeo.ecm.platform.convert",
        "org.nuxeo.ecm.platform.mimetype.api"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-publisher",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.publisher",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
          "declaredStartOrder": 900,
          "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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
          "name": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
          "requirements": [],
          "resolutionOrder": 383,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.publisher.impl.service.PublisherServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 544,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.contrib",
          "requirements": [],
          "resolutionOrder": 384,
          "services": [],
          "startOrder": 323,
          "version": "2025.7.12",
          "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/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": 31,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.listeners.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.listeners.contrib",
          "requirements": [],
          "resolutionOrder": 385,
          "services": [],
          "startOrder": 324,
          "version": "2025.7.12",
          "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/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": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.type.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.type.contrib",
          "requirements": [],
          "resolutionOrder": 386,
          "services": [],
          "startOrder": 328,
          "version": "2025.7.12",
          "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/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": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.pageprovider.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.pageprovider.contrib",
          "requirements": [],
          "resolutionOrder": 387,
          "services": [],
          "startOrder": 325,
          "version": "2025.7.12",
          "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/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": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.relations.services.RelationService",
                "name": "org.nuxeo.ecm.platform.relations.services.RelationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.relations.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.relations.contrib",
          "requirements": [],
          "resolutionOrder": 388,
          "services": [],
          "startOrder": 326,
          "version": "2025.7.12",
          "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.audit.service.AuditComponent--event",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.audit.service.AuditComponent",
                "name": "org.nuxeo.audit.service.AuditComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"event\" target=\"org.nuxeo.audit.service.AuditComponent\">\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/org.nuxeo.ecm.platform.publisher/org.nuxeo.ecm.platform.publisher.audit.contrib",
          "name": "org.nuxeo.ecm.platform.publisher.audit.contrib",
          "requirements": [],
          "resolutionOrder": 389,
          "services": [],
          "startOrder": 322,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.publisher.audit.contrib\">\n\n  <extension target=\"org.nuxeo.audit.service.AuditComponent\" 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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/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": 390,
          "services": [],
          "startOrder": 329,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/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": 391,
          "services": [],
          "startOrder": 327,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.publisher",
      "id": "org.nuxeo.ecm.platform.publisher",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo ECM Publisher Service\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.publisher;singleton:=true\r\nBundle-Version: 1.0.0\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": 391,
      "minResolutionOrder": 383,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-query-api",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.query.api",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.query.core.PageProviderServiceImpl",
          "declaredStartOrder": 800,
          "documentation": "\n    The Page Provider service provides extension points for page providers\n    registration.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe Page Provider service provides extension points for page providers\nregistration.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.query.api.PageProviderService",
              "descriptors": [
                "org.nuxeo.ecm.platform.query.core.CoreQueryPageProviderDescriptor",
                "org.nuxeo.ecm.platform.query.core.GenericPageProviderDescriptor",
                "org.nuxeo.ecm.platform.query.core.SearchServicePageProviderDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.query.api/org.nuxeo.ecm.platform.query.api.PageProviderService/ExtensionPoints/org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "id": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "label": "providers (org.nuxeo.ecm.platform.query.api.PageProviderService)",
              "name": "providers",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.query.api.PageProviderService",
              "descriptors": [
                "org.nuxeo.ecm.platform.query.core.PageProviderClassReplacerDescriptor"
              ],
              "documentation": null,
              "documentationHtml": "",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.query.api/org.nuxeo.ecm.platform.query.api.PageProviderService/ExtensionPoints/org.nuxeo.ecm.platform.query.api.PageProviderService--replacers",
              "id": "org.nuxeo.ecm.platform.query.api.PageProviderService--replacers",
              "label": "replacers (org.nuxeo.ecm.platform.query.api.PageProviderService)",
              "name": "replacers",
              "version": "2025.7.12"
            }
          ],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      Properties for core queries behaviors:\n      <ul>\n    <li>org.nuxeo.query.builder.ignored.chars: defines what characters that\n          are escaped in core queries.</li>\n\n    <li>\n          org.nuxeo.ecm.platform.query.nxql.defaultNavigationResults:\n          <a\n            href=\"https://doc.nuxeo.com/x/FQ4z#ContentViews-maxresults\" target=\"_blank\">\n            Maximum number of results for page providers.\n          </a>\n    </li>\n</ul>\n",
              "documentationHtml": "<p>\nProperties for core queries behaviors:\n</p><ul><li>org.nuxeo.query.builder.ignored.chars: defines what characters that\nare escaped in core queries.</li><li><p>\n<ul><li>\norg.nuxeo.ecm.platform.query.nxql.defaultNavigationResults:\n<a href=\"https://doc.nuxeo.com/x/FQ4z#ContentViews-maxresults\" target=\"_blank\" rel=\"noopener noreferrer\">\nMaximum number of results for page providers.\n</a>\n</li></ul></p></li></ul>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.query.api/org.nuxeo.ecm.platform.query.api.PageProviderService/Contributions/org.nuxeo.ecm.platform.query.api.PageProviderService--configuration",
              "id": "org.nuxeo.ecm.platform.query.api.PageProviderService--configuration",
              "registrationOrder": 32,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Properties for core queries behaviors:\n      <ul>\n        <li>org.nuxeo.query.builder.ignored.chars: defines what characters that\n          are escaped in core queries.</li>\n        <li>\n          org.nuxeo.ecm.platform.query.nxql.defaultNavigationResults:\n          <a href=\"https://doc.nuxeo.com/x/FQ4z#ContentViews-maxresults\" target=\"_blank\">\n            Maximum number of results for page providers.\n          </a>\n        </li>\n      </ul>\n    </documentation>\n    <property name=\"org.nuxeo.query.builder.ignored.chars\">!#$%&amp;'()+,./\\\\\\\\:-@{|}`^~</property>\n    <property name=\"org.nuxeo.ecm.platform.query.nxql.defaultNavigationResults\">200</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.query.api/org.nuxeo.ecm.platform.query.api.PageProviderService",
          "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
          "requirements": [],
          "resolutionOrder": 392,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.query.api.PageProviderService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.query.api/org.nuxeo.ecm.platform.query.api.PageProviderService/Services/org.nuxeo.ecm.platform.query.api.PageProviderService",
              "id": "org.nuxeo.ecm.platform.query.api.PageProviderService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 543,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n  <documentation>\n    The Page Provider service provides extension points for page providers\n    registration.\n\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <implementation\n    class=\"org.nuxeo.ecm.platform.query.core.PageProviderServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" />\n  </service>\n\n  <extension-point name=\"providers\">\n    <object\n      class=\"org.nuxeo.ecm.platform.query.core.CoreQueryPageProviderDescriptor\" />\n    <object\n      class=\"org.nuxeo.ecm.platform.query.core.GenericPageProviderDescriptor\" />\n    <object\n        class=\"org.nuxeo.ecm.platform.query.core.SearchServicePageProviderDescriptor\" />\n  </extension-point>\n\n  <extension-point name=\"replacers\">\n    <object\n      class=\"org.nuxeo.ecm.platform.query.core.PageProviderClassReplacerDescriptor\" />\n  </extension-point>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Properties for core queries behaviors:\n      <ul>\n        <li>org.nuxeo.query.builder.ignored.chars: defines what characters that\n          are escaped in core queries.</li>\n        <li>\n          org.nuxeo.ecm.platform.query.nxql.defaultNavigationResults:\n          <a href=\"https://doc.nuxeo.com/x/FQ4z#ContentViews-maxresults\"\n            target=\"_blank\">\n            Maximum number of results for page providers.\n          </a>\n        </li>\n      </ul>\n    </documentation>\n    <property name=\"org.nuxeo.query.builder.ignored.chars\">!#$%&amp;'()+,./\\\\\\\\:-@{|}`^~</property>\n    <property name=\"org.nuxeo.ecm.platform.query.nxql.defaultNavigationResults\">200</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageprovider-framework.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-query-api-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.query.api",
      "id": "org.nuxeo.ecm.platform.query.api",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo Platform Query API Fragment\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.query.api;singleton:=true\r\nNuxeo-Component: OSGI-INF/pageprovider-framework.xml\r\n\r\n",
      "maxResolutionOrder": 392,
      "minResolutionOrder": 392,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-rendering",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.rendering",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent",
          "declaredStartOrder": null,
          "documentation": "\n    @author Bogdan Stefanescu (bs@nuxeo.com)\n    Manage templates\n  \n",
          "documentationHtml": "<p>\nManage templates\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.rendering/org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent",
          "name": "org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent",
          "requirements": [],
          "resolutionOrder": 399,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.rendering/org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent/Services/org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent",
              "id": "org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 631,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent\">\n  <implementation\n          class=\"org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent\" />\n  <documentation>\n    @author Bogdan Stefanescu (bs@nuxeo.com)\n    Manage templates\n  </documentation>\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.rendering.fm.FreemarkerComponent\" />\n  </service>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/freemarker-engine.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-platform-rendering-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.rendering",
      "id": "org.nuxeo.ecm.platform.rendering",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.rendering.api,org.nuxeo.ecm.platf\r\n orm.rendering.fm,org.nuxeo.ecm.platform.rendering.fm.adapters,org.nuxeo\r\n .ecm.platform.rendering.fm.extensions,org.nuxeo.ecm.platform.rendering.\r\n fm.i18n,org.nuxeo.ecm.platform.rendering.wiki,org.nuxeo.ecm.platform.re\r\n ndering.wiki.extensions\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo ECM Platform Site Add On\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 5.4.2.qualifier\r\nNuxeo-Component: OSGI-INF/freemarker-engine.xml\r\nImport-Package: freemarker.cache,freemarker.core,freemarker.ext.beans,fr\r\n eemarker.template,org.apache.commons.logging,org.nuxeo.common.utils,org\r\n .nuxeo.common.xmap.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo.ec\r\n m.core.api;api=split,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.model.im\r\n pl,org.nuxeo.ecm.core.api.model.impl.primitives,org.nuxeo.ecm.core.sche\r\n ma,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.core.schema.types.prim\r\n itives,org.nuxeo.runtime.api,org.nuxeo.runtime.model,org.wikimodel.wem;\r\n resolution:=optional,org.wikimodel.wem.common;resolution:=optional\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.rendering;singleton:=true\r\nOriginally-Created-By: 1.6.0_20 (Sun Microsystems Inc.)\r\n\r\n",
      "maxResolutionOrder": 399,
      "minResolutionOrder": 399,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-search-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.service",
          "name": "org.nuxeo.ecm.platform.search.service",
          "requirements": [],
          "resolutionOrder": 620,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.search.service",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 372,
          "version": "2025.7.12",
          "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/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": 43,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 38,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 621,
          "services": [],
          "startOrder": 366,
          "version": "2025.7.12",
          "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/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": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.adapter",
          "name": "org.nuxeo.ecm.platform.search.adapter",
          "requirements": [],
          "resolutionOrder": 622,
          "services": [],
          "startOrder": 367,
          "version": "2025.7.12",
          "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/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": 27,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.pageproviders",
          "name": "org.nuxeo.ecm.platform.search.pageproviders",
          "requirements": [],
          "resolutionOrder": 623,
          "services": [],
          "startOrder": 371,
          "version": "2025.7.12",
          "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/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": 44,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"default_search\" prefix=\"defaults\" src=\"schemas/default_search.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/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": 39,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 624,
          "services": [],
          "startOrder": 369,
          "version": "2025.7.12",
          "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    <schema name=\"expired_search\" prefix=\"expired_search\" src=\"schemas/expired_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/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": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    </type>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.search.core/org.nuxeo.search.ui.types",
          "name": "org.nuxeo.search.ui.types",
          "requirements": [],
          "resolutionOrder": 625,
          "services": [],
          "startOrder": 512,
          "version": "2025.7.12",
          "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    </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/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": 28,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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    <searchServicePageProvider 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    </searchServicePageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.default.pageproviders",
          "name": "org.nuxeo.ecm.platform.search.default.pageproviders",
          "requirements": [],
          "resolutionOrder": 626,
          "services": [],
          "startOrder": 368,
          "version": "2025.7.12",
          "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    <searchServicePageProvider 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 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    </searchServicePageProvider>\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/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": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.search.core/org.nuxeo.ecm.platform.search.marshallers",
          "name": "org.nuxeo.ecm.platform.search.marshallers",
          "requirements": [],
          "resolutionOrder": 627,
          "services": [],
          "startOrder": 370,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.search.core",
      "id": "org.nuxeo.ecm.platform.search.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Search Core\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.search.core;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\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": 627,
      "minResolutionOrder": 620,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-suggestbox-core",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/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": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.pageproviders",
          "name": "org.nuxeo.ecm.platform.suggestbox.core.pageproviders",
          "requirements": [],
          "resolutionOrder": 423,
          "services": [],
          "startOrder": 377,
          "version": "2025.7.12",
          "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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            },
            {
              "@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/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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": 424,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.suggestbox.service.SuggestionService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 641,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters",
          "name": "org.nuxeo.ecm.platform.suggestbox.core.defaultSuggesters",
          "requirements": [],
          "resolutionOrder": 425,
          "services": [],
          "startOrder": 375,
          "version": "2025.7.12",
          "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/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": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.suggestbox.core/org.nuxeo.ecm.platform.suggestbox.core.defaultSuggestionHandlers",
          "name": "org.nuxeo.ecm.platform.suggestbox.core.defaultSuggestionHandlers",
          "requirements": [],
          "resolutionOrder": 426,
          "services": [],
          "startOrder": 376,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.suggestbox.core",
      "id": "org.nuxeo.ecm.platform.suggestbox.core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\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": 426,
      "minResolutionOrder": 423,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-tag",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.TagService",
          "name": "org.nuxeo.ecm.platform.tag.TagService",
          "requirements": [],
          "resolutionOrder": 427,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.tag.TagService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.tag.TagService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 538,
          "version": "2025.7.12",
          "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/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": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.coreTypes",
          "name": "org.nuxeo.ecm.platform.tag.service.coreTypes",
          "requirements": [],
          "resolutionOrder": 428,
          "services": [],
          "startOrder": 379,
          "version": "2025.7.12",
          "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/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": 33,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.tag/org.nuxeo.tag.service.properties",
          "name": "org.nuxeo.tag.service.properties",
          "requirements": [],
          "resolutionOrder": 429,
          "services": [],
          "startOrder": 516,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.querymaker",
          "name": "org.nuxeo.ecm.platform.tag.service.querymaker",
          "requirements": [],
          "resolutionOrder": 430,
          "services": [],
          "startOrder": 382,
          "version": "2025.7.12",
          "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/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": 35,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.listener",
          "name": "org.nuxeo.ecm.platform.tag.service.listener",
          "requirements": [],
          "resolutionOrder": 431,
          "services": [],
          "startOrder": 380,
          "version": "2025.7.12",
          "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/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": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.service.pageprovider",
          "name": "org.nuxeo.ecm.platform.tag.service.pageprovider",
          "requirements": [],
          "resolutionOrder": 432,
          "services": [],
          "startOrder": 381,
          "version": "2025.7.12",
          "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/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": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.platform.tag.operations.contrib",
          "name": "org.nuxeo.ecm.platform.tag.operations.contrib",
          "requirements": [],
          "resolutionOrder": 433,
          "services": [],
          "startOrder": 378,
          "version": "2025.7.12",
          "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/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": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.jsonEnrichers",
          "name": "org.nuxeo.ecm.tags.jsonEnrichers",
          "requirements": [],
          "resolutionOrder": 434,
          "services": [],
          "startOrder": 450,
          "version": "2025.7.12",
          "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/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": 31,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.schemas",
          "name": "org.nuxeo.ecm.tags.schemas",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 435,
          "services": [],
          "startOrder": 451,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/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": "2025.7.12",
              "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/org.nuxeo.ecm.platform.tag/org.nuxeo.ecm.tags.versioning.policy",
          "name": "org.nuxeo.ecm.tags.versioning.policy",
          "requirements": [],
          "resolutionOrder": 438,
          "services": [],
          "startOrder": 452,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.tag",
      "id": "org.nuxeo.ecm.platform.tag",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\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\nBundle-Version: 0.0.0.SNAPSHOT\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": 438,
      "minResolutionOrder": 427,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [
        "org.nuxeo.ecm.platform.tag.api"
      ],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-thumbnail",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.thumbnail",
      "components": [
        {
          "@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/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.commandline.imagemagick/Contributions/org.nuxeo.ecm.platform.thumbnail.commandline.imagemagick--command",
              "id": "org.nuxeo.ecm.platform.thumbnail.commandline.imagemagick--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": "2025.7.12",
              "xml": "<extension point=\"command\" target=\"org.nuxeo.ecm.platform.commandline.executor.service.CommandLineExecutorComponent\">\n\n    <command enabled=\"true\" name=\"toThumbnail\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -strip -thumbnail #{size} -auto-orient -background transparent -gravity center -format png -quality 75 #{inputFilePath}[0] #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -strip -thumbnail #{size} -auto-orient -background transparent -gravity center -format png -quality 75 #{inputFilePath}[0] #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.commandline.imagemagick",
          "name": "org.nuxeo.ecm.platform.thumbnail.commandline.imagemagick",
          "requirements": [
            "org.nuxeo.ecm.platform.commandline.executor.service.defaultContrib"
          ],
          "resolutionOrder": 648,
          "services": [],
          "startOrder": 389,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.thumbnail.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=\"toThumbnail\" enabled=\"true\">\n      <commandLine>convert</commandLine>\n      <parameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -strip -thumbnail #{size} -auto-orient -background transparent -gravity center -format png -quality 75 #{inputFilePath}[0] #{outputFilePath}</parameterString>\n      <winParameterString>-define registry:temporary-path=#{nuxeo.tmp.dir} -quiet -strip -thumbnail #{size} -auto-orient -background transparent -gravity center -format png -quality 75 #{inputFilePath}[0] #{outputFilePath}</winParameterString>\n      <installationDirective>You need to install ImageMagick.</installationDirective>\n    </command>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-commandline-imagemagick-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/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.service.thumbnailfactory/Contributions/org.nuxeo.ecm.platform.thumbnail.service.thumbnailfactory--thumbnailFactory",
              "id": "org.nuxeo.ecm.platform.thumbnail.service.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": "2025.7.12",
              "xml": "<extension point=\"thumbnailFactory\" target=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\">\n    <thumbnailFactory factoryClass=\"org.nuxeo.ecm.platform.thumbnail.factories.ThumbnailDocumentFactory\" name=\"thumbnailDocumentFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.service.thumbnailfactory",
          "name": "org.nuxeo.ecm.platform.thumbnail.service.thumbnailfactory",
          "requirements": [],
          "resolutionOrder": 649,
          "services": [],
          "startOrder": 396,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.thumbnail.service.thumbnailfactory\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.thumbnail.ThumbnailService\"\n    point=\"thumbnailFactory\">\n    <thumbnailFactory name=\"thumbnailDocumentFactory\"\n      factoryClass=\"org.nuxeo.ecm.platform.thumbnail.factories.ThumbnailDocumentFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-default-factories-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/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.convert/Contributions/org.nuxeo.ecm.platform.thumbnail.convert--converter",
              "id": "org.nuxeo.ecm.platform.thumbnail.convert--converter",
              "registrationOrder": 8,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "name": "org.nuxeo.ecm.core.convert.service.ConversionServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"converter\" target=\"org.nuxeo.ecm.core.convert.service.ConversionServiceImpl\">\n\n    <converter class=\"org.nuxeo.ecm.platform.thumbnail.converter.ThumbnailDocumentConverter\" name=\"pdfAndImageToThumbnail\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <sourceMimeType>image/jpeg</sourceMimeType>\n      <sourceMimeType>image/png</sourceMimeType>\n      <sourceMimeType>image/gif</sourceMimeType>\n      <sourceMimeType>image/tiff</sourceMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n    </converter>\n\n    <converter name=\"anyToPdfToThumbnail\">\n      <conversionSteps>\n        <subconverter>any2pdf</subconverter>\n        <subconverter>pdfAndImageToThumbnail</subconverter>\n      </conversionSteps>\n    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.thumbnail.converter.AnyToThumbnailConverter\" name=\"anyToThumbnail\">\n      <destinationMimeType>image/png</destinationMimeType>\n\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <sourceMimeType>application/json</sourceMimeType>\n      <sourceMimeType>image/jpeg</sourceMimeType>\n      <sourceMimeType>image/png</sourceMimeType>\n      <sourceMimeType>image/gif</sourceMimeType>\n      <sourceMimeType>image/tiff</sourceMimeType>\n\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <sourceMimeType>text/csv</sourceMimeType>\n      <sourceMimeType>text/tsv</sourceMimeType>\n      <sourceMimeType>text/partial</sourceMimeType>\n\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    </converter>\n\n    <converter class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\" name=\"sofficeToPng\">\n      <destinationMimeType>image/png</destinationMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">png</parameter>\n      </parameters>\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    </converter>\n\n    <converter name=\"officeToThumbnail\">\n      <destinationMimeType>image/png</destinationMimeType>\n      <conversionSteps>\n        <subconverter>sofficeToPng</subconverter>\n        <subconverter>pdfAndImageToThumbnail</subconverter>\n      </conversionSteps>\n    </converter>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.convert",
          "name": "org.nuxeo.ecm.platform.thumbnail.convert",
          "requirements": [
            "org.nuxeo.ecm.platform.convert.plugins"
          ],
          "resolutionOrder": 650,
          "services": [],
          "startOrder": 390,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.thumbnail.convert\">\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=\"pdfAndImageToThumbnail\"\n      class=\"org.nuxeo.ecm.platform.thumbnail.converter.ThumbnailDocumentConverter\">\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <sourceMimeType>image/jpeg</sourceMimeType>\n      <sourceMimeType>image/png</sourceMimeType>\n      <sourceMimeType>image/gif</sourceMimeType>\n      <sourceMimeType>image/tiff</sourceMimeType>\n      <destinationMimeType>image/png</destinationMimeType>\n    </converter>\n\n    <converter name=\"anyToPdfToThumbnail\">\n      <conversionSteps>\n        <subconverter>any2pdf</subconverter>\n        <subconverter>pdfAndImageToThumbnail</subconverter>\n      </conversionSteps>\n    </converter>\n\n    <converter name=\"anyToThumbnail\"\n      class=\"org.nuxeo.ecm.platform.thumbnail.converter.AnyToThumbnailConverter\">\n      <destinationMimeType>image/png</destinationMimeType>\n\n      <sourceMimeType>application/pdf</sourceMimeType>\n      <sourceMimeType>application/json</sourceMimeType>\n      <sourceMimeType>image/jpeg</sourceMimeType>\n      <sourceMimeType>image/png</sourceMimeType>\n      <sourceMimeType>image/gif</sourceMimeType>\n      <sourceMimeType>image/tiff</sourceMimeType>\n\n      <sourceMimeType>text/xml</sourceMimeType>\n      <sourceMimeType>text/html</sourceMimeType>\n      <sourceMimeType>text/plain</sourceMimeType>\n      <sourceMimeType>text/rtf</sourceMimeType>\n      <sourceMimeType>text/csv</sourceMimeType>\n      <sourceMimeType>text/tsv</sourceMimeType>\n      <sourceMimeType>text/partial</sourceMimeType>\n\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    </converter>\n\n    <converter name=\"sofficeToPng\" class=\"org.nuxeo.ecm.platform.convert.plugins.LibreOfficeConverter\">\n      <destinationMimeType>image/png</destinationMimeType>\n\n      <parameters>\n        <parameter name=\"CommandLineName\">soffice</parameter>\n        <parameter name=\"format\">png</parameter>\n      </parameters>\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    </converter>\n\n    <converter name=\"officeToThumbnail\">\n      <destinationMimeType>image/png</destinationMimeType>\n      <conversionSteps>\n        <subconverter>sofficeToPng</subconverter>\n        <subconverter>pdfAndImageToThumbnail</subconverter>\n      </conversionSteps>\n    </converter>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-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/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.core.type.contrib/Contributions/org.nuxeo.ecm.platform.thumbnail.core.type.contrib--schema",
              "id": "org.nuxeo.ecm.platform.thumbnail.core.type.contrib--schema",
              "registrationOrder": 46,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"thumbnail\" prefix=\"thumb\" src=\"schemas/thumbnail.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.core.type.contrib/Contributions/org.nuxeo.ecm.platform.thumbnail.core.type.contrib--doctype",
              "id": "org.nuxeo.ecm.platform.thumbnail.core.type.contrib--doctype",
              "registrationOrder": 42,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"Thumbnail\">\n      <schema name=\"thumbnail\"/>\n    </facet>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.core.type.contrib",
          "name": "org.nuxeo.ecm.platform.thumbnail.core.type.contrib",
          "requirements": [
            "org.nuxeo.ecm.core.schema.common"
          ],
          "resolutionOrder": 651,
          "services": [],
          "startOrder": 391,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.thumbnail.core.type.contrib\">\n\n  <require>org.nuxeo.ecm.core.schema.common</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"thumbnail\" src=\"schemas/thumbnail.xsd\" prefix=\"thumb\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n    <facet name=\"Thumbnail\">\n      <schema name=\"thumbnail\" />\n    </facet>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-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.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.listener/Contributions/org.nuxeo.ecm.platform.thumbnail.listener--listener",
              "id": "org.nuxeo.ecm.platform.thumbnail.listener--listener",
              "registrationOrder": 47,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"true\" class=\"org.nuxeo.ecm.platform.thumbnail.listener.UpdateThumbnailListener\" name=\"updateThumbListener\" postCommit=\"true\" priority=\"999\">\n      <event>scheduleThumbnailUpdate</event>\n    </listener>\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.thumbnail.listener.CheckBlobUpdateListener\" name=\"checkBlobUpdate\" postCommit=\"false\" priority=\"999\">\n      <event>documentCreated</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.listener",
          "name": "org.nuxeo.ecm.platform.thumbnail.listener",
          "requirements": [],
          "resolutionOrder": 652,
          "services": [],
          "startOrder": 392,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.platform.thumbnail.listener\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"updateThumbListener\" async=\"true\"\n      postCommit=\"true\"\n      class=\"org.nuxeo.ecm.platform.thumbnail.listener.UpdateThumbnailListener\"\n      priority=\"999\">\n      <event>scheduleThumbnailUpdate</event>\n    </listener>\n    <listener name=\"checkBlobUpdate\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.thumbnail.listener.CheckBlobUpdateListener\"\n      priority=\"999\">\n      <event>documentCreated</event>\n      <event>beforeDocumentModification</event>\n    </listener>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-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/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.operation/Contributions/org.nuxeo.ecm.platform.thumbnail.operation--operations",
              "id": "org.nuxeo.ecm.platform.thumbnail.operation--operations",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.platform.thumbnail.operation.RecomputeThumbnails\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.operation/Contributions/org.nuxeo.ecm.platform.thumbnail.operation--bindings",
              "id": "org.nuxeo.ecm.platform.thumbnail.operation--bindings",
              "registrationOrder": 5,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <binding name=\"RecomputeThumbnails\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.operation",
          "name": "org.nuxeo.ecm.platform.thumbnail.operation",
          "requirements": [],
          "resolutionOrder": 653,
          "services": [],
          "startOrder": 395,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.thumbnail.operation\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.ecm.platform.thumbnail.operation.RecomputeThumbnails\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\" point=\"bindings\">\n    <binding name=\"RecomputeThumbnails\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-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/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.listener.renditions/Contributions/org.nuxeo.ecm.platform.thumbnail.listener.renditions--renditionDefinitions",
              "id": "org.nuxeo.ecm.platform.thumbnail.listener.renditions--renditionDefinitions",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "name": "org.nuxeo.ecm.platform.rendition.service.RenditionService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"renditionDefinitions\" target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\">\n\n    <renditionDefinition class=\"org.nuxeo.ecm.platform.thumbnail.rendition.ThumbnailRenditionProvider\" cmisName=\"nuxeo:icon\" name=\"thumbnail\">\n      <label>label.rendition.thumbnail</label>\n      <icon>/icons/image.gif</icon>\n      <kind>cmis:thumbnail</kind>\n      <contentType>image/jpeg</contentType>\n    </renditionDefinition>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.listener.renditions",
          "name": "org.nuxeo.ecm.platform.thumbnail.listener.renditions",
          "requirements": [],
          "resolutionOrder": 654,
          "services": [],
          "startOrder": 393,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.platform.thumbnail.listener.renditions\">\n\n  <extension target=\"org.nuxeo.ecm.platform.rendition.service.RenditionService\"\n    point=\"renditionDefinitions\">\n\n    <renditionDefinition name=\"thumbnail\" cmisName=\"nuxeo:icon\"\n      class=\"org.nuxeo.ecm.platform.thumbnail.rendition.ThumbnailRenditionProvider\">\n      <label>label.rendition.thumbnail</label>\n      <icon>/icons/image.gif</icon>\n      <kind>cmis:thumbnail</kind>\n      <contentType>image/jpeg</contentType>\n    </renditionDefinition>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-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.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.marshallers/Contributions/org.nuxeo.ecm.platform.thumbnail.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.thumbnail.marshallers--marshallers",
              "registrationOrder": 25,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- thumbnail document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.thumbnail.io.ThumbnailJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnail.marshallers",
          "name": "org.nuxeo.ecm.platform.thumbnail.marshallers",
          "requirements": [],
          "resolutionOrder": 655,
          "services": [],
          "startOrder": 394,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.thumbnail.marshallers\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <!-- thumbnail document enricher -->\n    <register class=\"org.nuxeo.ecm.platform.thumbnail.io.ThumbnailJsonEnricher\" enable=\"true\" />\n  </extension>\n\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.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnailing.bulk/Contributions/org.nuxeo.ecm.platform.thumbnailing.bulk--actions",
              "id": "org.nuxeo.ecm.platform.thumbnailing.bulk--actions",
              "registrationOrder": 19,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"1\" bucketSize=\"25\" defaultScroller=\"repository\" httpEnabled=\"false\" inputStream=\"bulk/recomputeThumbnails\" name=\"recomputeThumbnails\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnailing.bulk/Contributions/org.nuxeo.ecm.platform.thumbnailing.bulk--streamProcessor",
              "id": "org.nuxeo.ecm.platform.thumbnailing.bulk--streamProcessor",
              "registrationOrder": 23,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.platform.thumbnail.action.RecomputeThumbnailsAction\" defaultConcurrency=\"2\" defaultPartitions=\"6\" name=\"recomputeThumbnails\">\n      <policy continueOnFailure=\"true\" delay=\"5s\" maxDelay=\"10s\" maxRetries=\"1\" name=\"default\"/>\n    </streamProcessor>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail/org.nuxeo.ecm.platform.thumbnailing.bulk",
          "name": "org.nuxeo.ecm.platform.thumbnailing.bulk",
          "requirements": [
            "org.nuxeo.ecm.core.bulk"
          ],
          "resolutionOrder": 656,
          "services": [],
          "startOrder": 397,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.thumbnailing.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=\"recomputeThumbnails\" defaultScroller=\"repository\" inputStream=\"bulk/recomputeThumbnails\"\n      bucketSize=\"25\" batchSize=\"1\" httpEnabled=\"false\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"recomputeThumbnails\"\n      class=\"org.nuxeo.ecm.platform.thumbnail.action.RecomputeThumbnailsAction\"\n      defaultConcurrency=\"${nuxeo.bulk.action.recomputeThumbnails.defaultConcurrency:=2}\"\n      defaultPartitions=\"${nuxeo.bulk.action.recomputeThumbnails.defaultPartitions:=6}\">\n      <policy name=\"default\" maxRetries=\"${nuxeo.bulk.action.recomputeThumbnails.maxRetries:=1}\" delay=\"5s\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/thumbnail-bulk-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-thumbnail-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.thumbnail",
      "id": "org.nuxeo.ecm.platform.thumbnail",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: Nuxeo Thumbnail\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/thumbnail-commandline-imagemagick-contrib.xml,\r\n OSGI-INF/thumbnail-default-factories-contrib.xml,OSGI-INF/thumbnail-con\r\n vert-service-contrib.xml,OSGI-INF/thumbnail-core-types-contrib.xml,OSGI\r\n -INF/thumbnail-listener-contrib.xml,OSGI-INF/thumbnail-operations-contr\r\n ib.xml,OSGI-INF/thumbnail-rendition-contrib.xml,OSGI-INF/marshallers-co\r\n ntrib.xml,OSGI-INF/thumbnail-bulk-contrib.xml\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.thumbnail;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 656,
      "minResolutionOrder": 648,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-types",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.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/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.content.view.local.configuration/Contributions/org.nuxeo.ecm.platform.content.view.local.configuration--schema",
              "id": "org.nuxeo.ecm.platform.content.view.local.configuration--schema",
              "registrationOrder": 35,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"content_view_configuration\" prefix=\"cvconf\" src=\"schemas/content_view_configuration.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.content.view.local.configuration/Contributions/org.nuxeo.ecm.platform.content.view.local.configuration--doctype",
              "id": "org.nuxeo.ecm.platform.content.view.local.configuration--doctype",
              "registrationOrder": 29,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"ContentViewLocalConfiguration\">\n      <schema name=\"content_view_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/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.content.view.local.configuration/Contributions/org.nuxeo.ecm.platform.content.view.local.configuration--adapters",
              "id": "org.nuxeo.ecm.platform.content.view.local.configuration--adapters",
              "registrationOrder": 15,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.platform.types.localconfiguration.ContentViewConfiguration\" factory=\"org.nuxeo.ecm.platform.types.localconfiguration.ContentViewConfigurationFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.content.view.local.configuration",
          "name": "org.nuxeo.ecm.platform.content.view.local.configuration",
          "requirements": [],
          "resolutionOrder": 448,
          "services": [],
          "startOrder": 247,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.content.view.local.configuration\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"content_view_configuration\" prefix=\"cvconf\"\n      src=\"schemas/content_view_configuration.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n\n    <facet name=\"ContentViewLocalConfiguration\">\n      <schema name=\"content_view_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.platform.types.localconfiguration.ContentViewConfiguration\"\n      factory=\"org.nuxeo.ecm.platform.types.localconfiguration.ContentViewConfigurationFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/contentview-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.event.EventServiceComponent--listener",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.listeners/Contributions/org.nuxeo.ecm.platform.types.listeners--listener",
              "id": "org.nuxeo.ecm.platform.types.listeners--listener",
              "registrationOrder": 38,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.platform.types.localconfiguration.UITypesConfigurationListener\" name=\"uiTypesLocalConfigurationListener\" postCommit=\"false\" priority=\"100\">\n      <event>beforeDocumentModification</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.listeners",
          "name": "org.nuxeo.ecm.platform.types.listeners",
          "requirements": [],
          "resolutionOrder": 449,
          "services": [],
          "startOrder": 400,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.types.listeners\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"uiTypesLocalConfigurationListener\" async=\"false\"\n      postCommit=\"false\"\n      class=\"org.nuxeo.ecm.platform.types.localconfiguration.UITypesConfigurationListener\"\n      priority=\"100\">\n      <event>beforeDocumentModification</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": "\n      Register the adapter for TypeInfo on DocumentModel\n    \n",
              "documentationHtml": "<p>\nRegister the adapter for TypeInfo on DocumentModel\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.contrib/Contributions/org.nuxeo.ecm.platform.types.contrib--adapters",
              "id": "org.nuxeo.ecm.platform.types.contrib--adapters",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <documentation>\n      Register the adapter for TypeInfo on DocumentModel\n    </documentation>\n    <adapter class=\"org.nuxeo.ecm.platform.types.adapter.TypeInfo\" factory=\"org.nuxeo.ecm.platform.types.adapter.TypeInfoAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.contrib",
          "name": "org.nuxeo.ecm.platform.types.contrib",
          "requirements": [],
          "resolutionOrder": 450,
          "services": [],
          "startOrder": 399,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.types.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n      point=\"adapters\">\n    <documentation>\n      Register the adapter for TypeInfo on DocumentModel\n    </documentation>\n    <adapter class=\"org.nuxeo.ecm.platform.types.adapter.TypeInfo\"\n        factory=\"org.nuxeo.ecm.platform.types.adapter.TypeInfoAdapterFactory\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxtypes-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.types.TypeService",
          "declaredStartOrder": null,
          "documentation": "\n    The type service provides extension points for pluggable document types.\n\n    Document types here can be seen as entities defining the behavior of a\n    document within the ECM: they hold information about the way they will be\n    managed and rendered.\n\n    @version 1.0\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThe type service provides extension points for pluggable document types.\n</p><p>\nDocument types here can be seen as entities defining the behavior of a\ndocument within the ECM: they hold information about the way they will be\nmanaged and rendered.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.types.TypeService",
              "descriptors": [
                "org.nuxeo.ecm.platform.types.Type"
              ],
              "documentation": "\n      A document type has the following properties:\n\n      - id: its string identifier\n\n      - remove: if true, remove this ecm document type. Can be used, for\n      instance, if there is a document type contributed by nuxeo-dm that you\n      don't want in your application. (Be careful to add a dependency to the\n      contribution that creates this document type.)\n\n      - icon: icon path used to represent the document type.\n\n      - icon-expanded: icon used for instance in tree view\n\n      - bigIcon: icon path aimed at rich application\n\n      - bigIcon-expanded: same as icon-expanded for rich application\n\n      - category: Category of the document type.\n\n      - description: Description of the document type.\n\n      - label: string title.\n\n      - subtypes: list of the allowed sub document types for a given container.\n      This can be used to filter some document types creation and copy to\n      specific kinds of container documents.\n\n      - deniedSubtypes: list of forbidden sub document types for a given\n      container. Useful when you inherit from another container type and want to\n      restrict its subtypes.\n\n      - default-view: this view will be returned when accessing the document.\n\n      - create-view: this view will be returned when creating the document.\n\n      - edit-view: this view can be used to display the document default edit\n      page.\n\n      - views: other views can be defined, so that they can be customized easily\n      and trigger specific behaviour. For instance, defining a view named\n      'after-edit' on the document will allow to parameter which view should be\n      displayed after the document edition.\n\n      WARNING: the views definitions and associated behaviours may change in the\n      future. You should avoid customizing more than default-view and\n      create-view for now.\n\n      - layouts: the list of layouts to use in a given mode. Usual modes are\n      \"view\", \"create\" and \"edit\". When no layouts are defined for a specific\n      mode, layouts for the mode \"any\" are taken for document rendering. An\n      additional mode is \"listing\": layouts defined in this mode are used in\n      templates listing children documents.\n\n      - content views: the list of content views to use in a given category.\n      Categories depend on the page displaying the content views. Available\n      since 5.4.0. By default, all content views are shown in the export view of\n      the document (available since 5.4.2) except when adding\n      showInExportView=\"false\" on the content view definition.\n\n      Example:\n\n      <code>\n    <type id=\"Domain\">\n        <label>Domain</label>\n        <icon>/icons/folder.gif</icon>\n        <default-view>view_documents</default-view>\n        <subtypes>\n            <type>WorkspaceRoot</type>\n            <type>SectionRoot</type>\n        </subtypes>\n        <deniedSubtypes>\n            <type>File</type>\n        </deniedSubtypes>\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</code>\n\n\n      Types extension point provides merging features: you can change an\n      existing type definition in your custom extension point provided you use\n      the same identifier.\n\n    \n",
              "documentationHtml": "<p>\nA document type has the following properties:\n</p><p>\n- id: its string identifier\n</p><p>\n- remove: if true, remove this ecm document type. Can be used, for\ninstance, if there is a document type contributed by nuxeo-dm that you\ndon&#39;t want in your application. (Be careful to add a dependency to the\ncontribution that creates this document type.)\n</p><p>\n- icon: icon path used to represent the document type.\n</p><p>\n- icon-expanded: icon used for instance in tree view\n</p><p>\n- bigIcon: icon path aimed at rich application\n</p><p>\n- bigIcon-expanded: same as icon-expanded for rich application\n</p><p>\n- category: Category of the document type.\n</p><p>\n- description: Description of the document type.\n</p><p>\n- label: string title.\n</p><p>\n- subtypes: list of the allowed sub document types for a given container.\nThis can be used to filter some document types creation and copy to\nspecific kinds of container documents.\n</p><p>\n- deniedSubtypes: list of forbidden sub document types for a given\ncontainer. Useful when you inherit from another container type and want to\nrestrict its subtypes.\n</p><p>\n- default-view: this view will be returned when accessing the document.\n</p><p>\n- create-view: this view will be returned when creating the document.\n</p><p>\n- edit-view: this view can be used to display the document default edit\npage.\n</p><p>\n- views: other views can be defined, so that they can be customized easily\nand trigger specific behaviour. For instance, defining a view named\n&#39;after-edit&#39; on the document will allow to parameter which view should be\ndisplayed after the document edition.\n</p><p>\nWARNING: the views definitions and associated behaviours may change in the\nfuture. You should avoid customizing more than default-view and\ncreate-view for now.\n</p><p>\n- layouts: the list of layouts to use in a given mode. Usual modes are\n&#34;view&#34;, &#34;create&#34; and &#34;edit&#34;. When no layouts are defined for a specific\nmode, layouts for the mode &#34;any&#34; are taken for document rendering. An\nadditional mode is &#34;listing&#34;: layouts defined in this mode are used in\ntemplates listing children documents.\n</p><p>\n- content views: the list of content views to use in a given category.\nCategories depend on the page displaying the content views. Available\nsince 5.4.0. By default, all content views are shown in the export view of\nthe document (available since 5.4.2) except when adding\nshowInExportView&#61;&#34;false&#34; on the content view definition.\n</p><p>\nExample:\n</p><p>\n</p><pre><code>    &lt;type id&#61;&#34;Domain&#34;&gt;\n        &lt;label&gt;Domain&lt;/label&gt;\n        &lt;icon&gt;/icons/folder.gif&lt;/icon&gt;\n        &lt;default-view&gt;view_documents&lt;/default-view&gt;\n        &lt;subtypes&gt;\n            &lt;type&gt;WorkspaceRoot&lt;/type&gt;\n            &lt;type&gt;SectionRoot&lt;/type&gt;\n        &lt;/subtypes&gt;\n        &lt;deniedSubtypes&gt;\n            &lt;type&gt;File&lt;/type&gt;\n        &lt;/deniedSubtypes&gt;\n        &lt;contentViews category&#61;&#34;content&#34;&gt;\n            &lt;contentView&gt;document_content&lt;/contentView&gt;\n        &lt;/contentViews&gt;\n        &lt;contentViews category&#61;&#34;trash_content&#34;&gt;\n            &lt;contentView showInExportView&#61;&#34;false&#34;&gt;\n              document_trash_content\n            &lt;/contentView&gt;\n        &lt;/contentViews&gt;\n    &lt;/type&gt;\n</code></pre><p>\nTypes extension point provides merging features: you can change an\nexisting type definition in your custom extension point provided you use\nthe same identifier.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.TypeService/ExtensionPoints/org.nuxeo.ecm.platform.types.TypeService--types",
              "id": "org.nuxeo.ecm.platform.types.TypeService--types",
              "label": "types (org.nuxeo.ecm.platform.types.TypeService)",
              "name": "types",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.TypeService",
          "name": "org.nuxeo.ecm.platform.types.TypeService",
          "requirements": [
            "org.nuxeo.ecm.core.schema.TypeService"
          ],
          "resolutionOrder": 451,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.types.TypeService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.TypeService/Services/org.nuxeo.ecm.platform.types.TypeManager",
              "id": "org.nuxeo.ecm.platform.types.TypeManager",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 643,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.types.TypeService\">\n  <documentation>\n    The type service provides extension points for pluggable document types.\n\n    Document types here can be seen as entities defining the behavior of a\n    document within the ECM: they hold information about the way they will be\n    managed and rendered.\n\n    @version 1.0\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.types.TypeService\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.types.TypeManager\" />\n  </service>\n\n  <require>org.nuxeo.ecm.core.schema.TypeService</require>\n\n  <extension-point name=\"types\">\n    <documentation>\n      A document type has the following properties:\n\n      - id: its string identifier\n\n      - remove: if true, remove this ecm document type. Can be used, for\n      instance, if there is a document type contributed by nuxeo-dm that you\n      don't want in your application. (Be careful to add a dependency to the\n      contribution that creates this document type.)\n\n      - icon: icon path used to represent the document type.\n\n      - icon-expanded: icon used for instance in tree view\n\n      - bigIcon: icon path aimed at rich application\n\n      - bigIcon-expanded: same as icon-expanded for rich application\n\n      - category: Category of the document type.\n\n      - description: Description of the document type.\n\n      - label: string title.\n\n      - subtypes: list of the allowed sub document types for a given container.\n      This can be used to filter some document types creation and copy to\n      specific kinds of container documents.\n\n      - deniedSubtypes: list of forbidden sub document types for a given\n      container. Useful when you inherit from another container type and want to\n      restrict its subtypes.\n\n      - default-view: this view will be returned when accessing the document.\n\n      - create-view: this view will be returned when creating the document.\n\n      - edit-view: this view can be used to display the document default edit\n      page.\n\n      - views: other views can be defined, so that they can be customized easily\n      and trigger specific behaviour. For instance, defining a view named\n      'after-edit' on the document will allow to parameter which view should be\n      displayed after the document edition.\n\n      WARNING: the views definitions and associated behaviours may change in the\n      future. You should avoid customizing more than default-view and\n      create-view for now.\n\n      - layouts: the list of layouts to use in a given mode. Usual modes are\n      \"view\", \"create\" and \"edit\". When no layouts are defined for a specific\n      mode, layouts for the mode \"any\" are taken for document rendering. An\n      additional mode is \"listing\": layouts defined in this mode are used in\n      templates listing children documents.\n\n      - content views: the list of content views to use in a given category.\n      Categories depend on the page displaying the content views. Available\n      since 5.4.0. By default, all content views are shown in the export view of\n      the document (available since 5.4.2) except when adding\n      showInExportView=\"false\" on the content view definition.\n\n      Example:\n\n      <code>\n        <type id=\"Domain\">\n          <label>Domain</label>\n          <icon>/icons/folder.gif</icon>\n          <default-view>view_documents</default-view>\n          <subtypes>\n            <type>WorkspaceRoot</type>\n            <type>SectionRoot</type>\n          </subtypes>\n          <deniedSubtypes>\n            <type>File</type>\n          </deniedSubtypes>\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      </code>\n\n      Types extension point provides merging features: you can change an\n      existing type definition in your custom extension point provided you use\n      the same identifier.\n\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.types.Type\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/nxtypes-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.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.local.configuration/Contributions/org.nuxeo.ecm.platform.types.local.configuration--schema",
              "id": "org.nuxeo.ecm.platform.types.local.configuration--schema",
              "registrationOrder": 36,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"ui_types_configuration\" prefix=\"uitypesconf\" src=\"schemas/ui_types_configuration.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.local.configuration/Contributions/org.nuxeo.ecm.platform.types.local.configuration--doctype",
              "id": "org.nuxeo.ecm.platform.types.local.configuration--doctype",
              "registrationOrder": 30,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"UITypesLocalConfiguration\">\n      <schema name=\"ui_types_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/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.local.configuration/Contributions/org.nuxeo.ecm.platform.types.local.configuration--adapters",
              "id": "org.nuxeo.ecm.platform.types.local.configuration--adapters",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n       <adapter class=\"org.nuxeo.ecm.platform.types.localconfiguration.UITypesConfiguration\" factory=\"org.nuxeo.ecm.platform.types.localconfiguration.UITypesConfigurationFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.local.configuration",
          "name": "org.nuxeo.ecm.platform.types.local.configuration",
          "requirements": [],
          "resolutionOrder": 452,
          "services": [],
          "startOrder": 401,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.types.local.configuration\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"schema\">\n    <schema name=\"ui_types_configuration\" prefix=\"uitypesconf\" src=\"schemas/ui_types_configuration.xsd\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\"\n    point=\"doctype\">\n\n    <facet name=\"UITypesLocalConfiguration\">\n      <schema name=\"ui_types_configuration\" />\n    </facet>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\" point=\"adapters\">\n       <adapter class=\"org.nuxeo.ecm.platform.types.localconfiguration.UITypesConfiguration\"\n           factory=\"org.nuxeo.ecm.platform.types.localconfiguration.UITypesConfigurationFactory\"/>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/ui-types-local-configuration.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Platform types registered marshallers set.\n  \n",
          "documentationHtml": "<p>\nPlatform types 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/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.marshallers/Contributions/org.nuxeo.ecm.platform.types.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.types.marshallers--marshallers",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- subtypes enricher -->\n    <register class=\"org.nuxeo.ecm.platform.types.SubtypesJsonEnricher\" enable=\"true\"/>\n   </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types/org.nuxeo.ecm.platform.types.marshallers",
          "name": "org.nuxeo.ecm.platform.types.marshallers",
          "requirements": [],
          "resolutionOrder": 453,
          "services": [],
          "startOrder": 402,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.types.marshallers\" version=\"1.0.0\">\n  <documentation>\n    Platform types registered marshallers set.\n  </documentation>\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <!-- subtypes enricher -->\n    <register class=\"org.nuxeo.ecm.platform.types.SubtypesJsonEnricher\" enable=\"true\" />\n   </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/subtypes-enricher-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-types-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.types",
      "id": "org.nuxeo.ecm.platform.types",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.types;core=split\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: web,stateless\r\nBundle-Localization: bundle\r\nBundle-Name: Nuxeo ECM Type Manager\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: true\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/contentview-local-configuration.xml,OSGI-INF/l\r\n isteners-contrib.xml,OSGI-INF/nxtypes-contrib.xml,OSGI-INF/nxtypes-fram\r\n ework.xml,OSGI-INF/ui-types-local-configuration.xml,OSGI-INF/subtypes-e\r\n nricher-contrib.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.schema,org.nuxeo.ecm.core.schema.types,org.nuxeo.ecm.dire\r\n ctory;api=split,org.nuxeo.runtime,org.nuxeo.runtime.api,org.nuxeo.runti\r\n me.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.types;singleton:=true\r\n\r\n",
      "maxResolutionOrder": 453,
      "minResolutionOrder": 448,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-url",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.url",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
          "declaredStartOrder": null,
          "documentation": "\n    This service provides extension points for document url generation from\n    pluggable codecs.\n\n    @version 1.0\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nThis service provides extension points for document url generation from\npluggable codecs.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
              "descriptors": [
                "org.nuxeo.ecm.platform.url.codec.descriptor.DocumentViewCodecDescriptor"
              ],
              "documentation": "\n      Codecs perform the translation between a url and a document view that\n      holds information about the document context as well as other parameters\n      (current tab for instance).\n    \n",
              "documentationHtml": "<p>\nCodecs perform the translation between a url and a document view that\nholds information about the document context as well as other parameters\n(current tab for instance).\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.url/org.nuxeo.ecm.platform.url.service.DocumentViewCodecService/ExtensionPoints/org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "id": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "label": "codecs (org.nuxeo.ecm.platform.url.service.DocumentViewCodecService)",
              "name": "codecs",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.url/org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
          "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
          "requirements": [],
          "resolutionOrder": 454,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.url/org.nuxeo.ecm.platform.url.service.DocumentViewCodecService/Services/org.nuxeo.ecm.platform.url.api.DocumentViewCodecManager",
              "id": "org.nuxeo.ecm.platform.url.api.DocumentViewCodecManager",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 645,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n  <documentation>\n    This service provides extension points for document url generation from\n    pluggable codecs.\n\n    @version 1.0\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <implementation\n    class=\" org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\" />\n\n  <service>\n    <provide\n      interface=\"org.nuxeo.ecm.platform.url.api.DocumentViewCodecManager\" />\n  </service>\n\n  <extension-point name=\"codecs\">\n    <documentation>\n      Codecs perform the translation between a url and a document view that\n      holds information about the document context as well as other parameters\n      (current tab for instance).\n    </documentation>\n    <object\n      class=\"org.nuxeo.ecm.platform.url.codec.descriptor.DocumentViewCodecDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/docviewurlservice-framework.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Contributions for basic rest navigation through the application.\n\n    @version 1.0\n    @author Anahide Tchertchian (at@nuxeo.com)\n  \n",
          "documentationHtml": "<p>\nContributions for basic rest navigation through the application.\n</p><p>\n&#64;version 1.0\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": "\n      The docid codec uses the document uid to resolve the context. Urls are of\n      the form http://site/nuxeo/nxdoc/demo/docuid/view.\n\n      The docpath codec uses the document path to resolve the context. Urls are\n      of the form http://site/nuxeo/nxpath/demo/path/to/my/doc@view.\n\n      The document file codec uses the document uid to resolve the document\n      model and extract a file held in its properties. Urls are of the form\n      http://site/nuxeo/nxfile/demo/docuid/file:content/mydoc.odt.\n\n      We declare three codecs using this same class but different prefixes\n      (nxfile, nxeditfile,...) so that we can define several url patterns,\n      performing different actions, but still using the same syntax.\n    \n",
              "documentationHtml": "<p>\nThe docid codec uses the document uid to resolve the context. Urls are of\nthe form http://site/nuxeo/nxdoc/demo/docuid/view.\n</p><p>\nThe docpath codec uses the document path to resolve the context. Urls are\nof the form http://site/nuxeo/nxpath/demo/path/to/my/doc&#64;view.\n</p><p>\nThe document file codec uses the document uid to resolve the document\nmodel and extract a file held in its properties. Urls are of the form\nhttp://site/nuxeo/nxfile/demo/docuid/file:content/mydoc.odt.\n</p><p>\nWe declare three codecs using this same class but different prefixes\n(nxfile, nxeditfile,...) so that we can define several url patterns,\nperforming different actions, but still using the same syntax.\n</p><p></p>",
              "extensionPoint": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService--codecs",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.url/org.nuxeo.ecm.platform.url.service.DocumentViewCodecService.contrib/Contributions/org.nuxeo.ecm.platform.url.service.DocumentViewCodecService.contrib--codecs",
              "id": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService.contrib--codecs",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"codecs\" target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\">\n    <documentation>\n      The docid codec uses the document uid to resolve the context. Urls are of\n      the form http://site/nuxeo/nxdoc/demo/docuid/view.\n\n      The docpath codec uses the document path to resolve the context. Urls are\n      of the form http://site/nuxeo/nxpath/demo/path/to/my/doc@view.\n\n      The document file codec uses the document uid to resolve the document\n      model and extract a file held in its properties. Urls are of the form\n      http://site/nuxeo/nxfile/demo/docuid/file:content/mydoc.odt.\n\n      We declare three codecs using this same class but different prefixes\n      (nxfile, nxeditfile,...) so that we can define several url patterns,\n      performing different actions, but still using the same syntax.\n    </documentation>\n    <documentViewCodec class=\"org.nuxeo.ecm.platform.url.codec.DocumentIdCodec\" default=\"true\" enabled=\"true\" name=\"docid\" prefix=\"nxdoc\"/>\n    <documentViewCodec class=\"org.nuxeo.ecm.platform.url.codec.DocumentPathCodec\" default=\"false\" enabled=\"true\" name=\"docpath\" prefix=\"nxpath\"/>\n    <documentViewCodec class=\"org.nuxeo.ecm.platform.url.codec.DocumentFileCodec\" enabled=\"true\" name=\"editFile\" prefix=\"nxeditfile\"/>\n    <documentViewCodec class=\"org.nuxeo.ecm.platform.url.codec.DocumentFileCodec\" enabled=\"true\" name=\"pdfFile\" prefix=\"nxpdffile\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.url/org.nuxeo.ecm.platform.url.service.DocumentViewCodecService.contrib",
          "name": "org.nuxeo.ecm.platform.url.service.DocumentViewCodecService.contrib",
          "requirements": [],
          "resolutionOrder": 455,
          "services": [],
          "startOrder": 412,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component\n  name=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService.contrib\">\n  <documentation>\n    Contributions for basic rest navigation through the application.\n\n    @version 1.0\n    @author Anahide Tchertchian (at@nuxeo.com)\n  </documentation>\n\n  <extension\n    target=\"org.nuxeo.ecm.platform.url.service.DocumentViewCodecService\"\n    point=\"codecs\">\n    <documentation>\n      The docid codec uses the document uid to resolve the context. Urls are of\n      the form http://site/nuxeo/nxdoc/demo/docuid/view.\n\n      The docpath codec uses the document path to resolve the context. Urls are\n      of the form http://site/nuxeo/nxpath/demo/path/to/my/doc@view.\n\n      The document file codec uses the document uid to resolve the document\n      model and extract a file held in its properties. Urls are of the form\n      http://site/nuxeo/nxfile/demo/docuid/file:content/mydoc.odt.\n\n      We declare three codecs using this same class but different prefixes\n      (nxfile, nxeditfile,...) so that we can define several url patterns,\n      performing different actions, but still using the same syntax.\n    </documentation>\n    <documentViewCodec name=\"docid\" enabled=\"true\" default=\"true\" prefix=\"nxdoc\"\n      class=\"org.nuxeo.ecm.platform.url.codec.DocumentIdCodec\" />\n    <documentViewCodec name=\"docpath\" enabled=\"true\" default=\"false\"\n      prefix=\"nxpath\"\n      class=\"org.nuxeo.ecm.platform.url.codec.DocumentPathCodec\" />\n    <documentViewCodec name=\"editFile\" enabled=\"true\" prefix=\"nxeditfile\"\n      class=\"org.nuxeo.ecm.platform.url.codec.DocumentFileCodec\" />\n    <documentViewCodec name=\"pdfFile\" enabled=\"true\" prefix=\"nxpdffile\"\n      class=\"org.nuxeo.ecm.platform.url.codec.DocumentFileCodec\" />\n  </extension>\n\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/docviewurlservice-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/org.nuxeo.ecm.platform.url/org.nuxeo.ecm.platform.url.marshallers/Contributions/org.nuxeo.ecm.platform.url.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.url.marshallers--marshallers",
              "registrationOrder": 17,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <!-- document url enricher -->\n    <register class=\"org.nuxeo.ecm.platform.url.io.DocumentUrlJsonEnricher\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.url/org.nuxeo.ecm.platform.url.marshallers",
          "name": "org.nuxeo.ecm.platform.url.marshallers",
          "requirements": [],
          "resolutionOrder": 456,
          "services": [],
          "startOrder": 411,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.url.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    <!-- document url enricher -->\n    <register class=\"org.nuxeo.ecm.platform.url.io.DocumentUrlJsonEnricher\" enable=\"true\" />\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/marshallers-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-url-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.url",
      "id": "org.nuxeo.ecm.platform.url",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.url.codec,org.nuxeo.ecm.platform.\r\n url.codec.descriptor,org.nuxeo.ecm.platform.url.service\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: web,stateless\r\nBundle-Name: Nuxeo URL Core\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-component: OSGI-INF/docviewurlservice-framework.xml,OSGI-INF/docvi\r\n ewurlservice-contrib.xml,OSGI-INF/marshallers-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.impl,org.nuxeo.ecm.directory;a\r\n pi=split,org.nuxeo.ecm.platform.url,org.nuxeo.ecm.platform.url.api,org.\r\n nuxeo.ecm.platform.url.codec,org.nuxeo.ecm.platform.url.codec.api,org.n\r\n uxeo.ecm.platform.url.service,org.nuxeo.runtime.model\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.url;singleton:=true\r\nOriginally-Created-By: 1.6.0_20 (Sun Microsystems Inc.)\r\n\r\n",
      "maxResolutionOrder": 456,
      "minResolutionOrder": 454,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-usermanager",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.platform.usermanager",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.usermanager.UserService",
          "declaredStartOrder": null,
          "documentation": "\n    A service to interact with the list of users and groups of the platform.\n  \n",
          "documentationHtml": "<p>\nA service to interact with the list of users and groups of the platform.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "descriptors": [
                "org.nuxeo.ecm.platform.usermanager.UserManagerDescriptor"
              ],
              "documentation": "\n      Configure the userManager.\n      <p/>\n\n      The extension should use the format:\n      <code>\n    <userManager>\n        <users>\n            <directory>somedirectory</directory>\n            <emailField>mail</emailField>\n            <searchFields append=\"true\">\n                <substringMatchSearchField>first</substringMatchSearchField>\n                <exactMatchSearchField>last</exactMatchSearchField>\n            </searchFields>\n            <listingMode>tabbed</listingMode>\n            <anonymousUser id=\"Anonymous\">\n                <property name=\"firstName\">Anonymous</property>\n                <property name=\"lastName\">User</property>\n            </anonymousUser>\n            <virtualUser id=\"MyCustomAdministrator\" searchable=\"false\">\n                <password>secret</password>\n                <property name=\"firstName\">My Custom</property>\n                <property name=\"lastName\">Administrator</property>\n                <group>administrators</group>\n            </virtualUser>\n            <virtualUser id=\"MyCustomMember\" searchable=\"false\">\n                <password>secret</password>\n                <property name=\"firstName\">My Custom</property>\n                <property name=\"lastName\">Member</property>\n                <group>members</group>\n                <group>othergroup</group>\n                <propertyList name=\"listprop\">\n                    <value>item1</value>\n                    <value>item2</value>\n                </propertyList>\n            </virtualUser>\n            <virtualUser id=\"ExistingVirtualUser\" remove=\"true\"/>\n        </users>\n        <defaultAdministratorId>admin</defaultAdministratorId>\n        <administratorsGroup>myAdministrators</administratorsGroup>\n        <disableDefaultAdministratorsGroup>\n            false\n          </disableDefaultAdministratorsGroup>\n        <userSortField>sn</userSortField>\n        <userPasswordPattern>^[a-zA-Z0-9]{5,}$</userPasswordPattern>\n        <groups>\n            <directory>somegroupdir</directory>\n            <membersField>members</membersField>\n            <groupLabelField>grouplabel</groupLabelField>\n            <subGroupsField>subgroups</subGroupsField>\n            <parentGroupsField>parentgroup</parentGroupsField>\n            <listingMode>search_only</listingMode>\n            <searchFields append=\"true\">\n                <substringMatchSearchField>grouplabel</substringMatchSearchField>\n                <exactMatchSearchField>groupname</exactMatchSearchField>\n            </searchFields>\n        </groups>\n        <defaultGroup>members</defaultGroup>\n        <groupSortField>groupname</groupSortField>\n    </userManager>\n</code>\n<p/>\n\n      If the element anonymousUser has the attribute remove=\"true\", then the\n      anonymous user will be disabled. The anonymous user is searchable by\n      default.\n      <p/>\n\n      If a virtual user has the attribute remove=\"true\", it is removed from the\n      list of virtual users. Virtual users are searchable by default, but it is\n      not implemented yet... so you should keep the attribute searchable=\"false\"\n      to keep the same behaviour when it will be.\n      <p/>\n\n      Virtual users with the \"administrators\" group will have the same rights\n      than the default administrator.\n      <p/>\n\n      New administrators groups can be added using the \"administratorsGroup\"\n      tag. Several groups can be defined, adding as many tags as needed. The\n      default group named \"administrators\" can be disabled by setting the\n      \"disableDefaultAdministratorsGroup\" to \"true\" (defaults to false): only\n      new defined administrators groups will then be taken into account. Note\n      that disabling this default group should be done after setting up custom\n      rights in the repository, as this group is usually defined as the group of\n      users who have all permissions at the root of the repository.\n      <p/>\n\n      Anonymous and virtual users properties have to match the users directory\n      schema fields to be taken into account.\n      <p/>\n\n      The userPasswordPattern format is specified by java.util.regex.Pattern.\n      <p/>\n\n      The values for users listingMode are: \"all\", \"tabbed\", \"search_only\".\n      (These values are defined in\n      org.nuxeo.ecm.webapp.security.UserManagerActionsBean.)\n      <p/>\n\n      The values for groups listingMode are: \"all\" and \"search_only\".\n    \n",
              "documentationHtml": "<p>\nConfigure the userManager.\n</p><p>\nThe extension should use the format:\n</p><p></p><pre><code>    &lt;userManager&gt;\n        &lt;users&gt;\n            &lt;directory&gt;somedirectory&lt;/directory&gt;\n            &lt;emailField&gt;mail&lt;/emailField&gt;\n            &lt;searchFields append&#61;&#34;true&#34;&gt;\n                &lt;substringMatchSearchField&gt;first&lt;/substringMatchSearchField&gt;\n                &lt;exactMatchSearchField&gt;last&lt;/exactMatchSearchField&gt;\n            &lt;/searchFields&gt;\n            &lt;listingMode&gt;tabbed&lt;/listingMode&gt;\n            &lt;anonymousUser id&#61;&#34;Anonymous&#34;&gt;\n                &lt;property name&#61;&#34;firstName&#34;&gt;Anonymous&lt;/property&gt;\n                &lt;property name&#61;&#34;lastName&#34;&gt;User&lt;/property&gt;\n            &lt;/anonymousUser&gt;\n            &lt;virtualUser id&#61;&#34;MyCustomAdministrator&#34; searchable&#61;&#34;false&#34;&gt;\n                &lt;password&gt;secret&lt;/password&gt;\n                &lt;property name&#61;&#34;firstName&#34;&gt;My Custom&lt;/property&gt;\n                &lt;property name&#61;&#34;lastName&#34;&gt;Administrator&lt;/property&gt;\n                &lt;group&gt;administrators&lt;/group&gt;\n            &lt;/virtualUser&gt;\n            &lt;virtualUser id&#61;&#34;MyCustomMember&#34; searchable&#61;&#34;false&#34;&gt;\n                &lt;password&gt;secret&lt;/password&gt;\n                &lt;property name&#61;&#34;firstName&#34;&gt;My Custom&lt;/property&gt;\n                &lt;property name&#61;&#34;lastName&#34;&gt;Member&lt;/property&gt;\n                &lt;group&gt;members&lt;/group&gt;\n                &lt;group&gt;othergroup&lt;/group&gt;\n                &lt;propertyList name&#61;&#34;listprop&#34;&gt;\n                    &lt;value&gt;item1&lt;/value&gt;\n                    &lt;value&gt;item2&lt;/value&gt;\n                &lt;/propertyList&gt;\n            &lt;/virtualUser&gt;\n            &lt;virtualUser id&#61;&#34;ExistingVirtualUser&#34; remove&#61;&#34;true&#34;/&gt;\n        &lt;/users&gt;\n        &lt;defaultAdministratorId&gt;admin&lt;/defaultAdministratorId&gt;\n        &lt;administratorsGroup&gt;myAdministrators&lt;/administratorsGroup&gt;\n        &lt;disableDefaultAdministratorsGroup&gt;\n            false\n          &lt;/disableDefaultAdministratorsGroup&gt;\n        &lt;userSortField&gt;sn&lt;/userSortField&gt;\n        &lt;userPasswordPattern&gt;^[a-zA-Z0-9]{5,}$&lt;/userPasswordPattern&gt;\n        &lt;groups&gt;\n            &lt;directory&gt;somegroupdir&lt;/directory&gt;\n            &lt;membersField&gt;members&lt;/membersField&gt;\n            &lt;groupLabelField&gt;grouplabel&lt;/groupLabelField&gt;\n            &lt;subGroupsField&gt;subgroups&lt;/subGroupsField&gt;\n            &lt;parentGroupsField&gt;parentgroup&lt;/parentGroupsField&gt;\n            &lt;listingMode&gt;search_only&lt;/listingMode&gt;\n            &lt;searchFields append&#61;&#34;true&#34;&gt;\n                &lt;substringMatchSearchField&gt;grouplabel&lt;/substringMatchSearchField&gt;\n                &lt;exactMatchSearchField&gt;groupname&lt;/exactMatchSearchField&gt;\n            &lt;/searchFields&gt;\n        &lt;/groups&gt;\n        &lt;defaultGroup&gt;members&lt;/defaultGroup&gt;\n        &lt;groupSortField&gt;groupname&lt;/groupSortField&gt;\n    &lt;/userManager&gt;\n</code></pre><p>\nIf the element anonymousUser has the attribute remove&#61;&#34;true&#34;, then the\nanonymous user will be disabled. The anonymous user is searchable by\ndefault.\n</p><p>\nIf a virtual user has the attribute remove&#61;&#34;true&#34;, it is removed from the\nlist of virtual users. Virtual users are searchable by default, but it is\nnot implemented yet... so you should keep the attribute searchable&#61;&#34;false&#34;\nto keep the same behaviour when it will be.\n</p><p>\nVirtual users with the &#34;administrators&#34; group will have the same rights\nthan the default administrator.\n</p><p>\nNew administrators groups can be added using the &#34;administratorsGroup&#34;\ntag. Several groups can be defined, adding as many tags as needed. The\ndefault group named &#34;administrators&#34; can be disabled by setting the\n&#34;disableDefaultAdministratorsGroup&#34; to &#34;true&#34; (defaults to false): only\nnew defined administrators groups will then be taken into account. Note\nthat disabling this default group should be done after setting up custom\nrights in the repository, as this group is usually defined as the group of\nusers who have all permissions at the root of the repository.\n</p><p>\nAnonymous and virtual users properties have to match the users directory\nschema fields to be taken into account.\n</p><p>\nThe userPasswordPattern format is specified by java.util.regex.Pattern.\n</p><p>\nThe values for users listingMode are: &#34;all&#34;, &#34;tabbed&#34;, &#34;search_only&#34;.\n(These values are defined in\norg.nuxeo.ecm.webapp.security.UserManagerActionsBean.)\n</p><p>\nThe values for groups listingMode are: &#34;all&#34; and &#34;search_only&#34;.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/ExtensionPoints/org.nuxeo.ecm.platform.usermanager.UserService--userManager",
              "id": "org.nuxeo.ecm.platform.usermanager.UserService--userManager",
              "label": "userManager (org.nuxeo.ecm.platform.usermanager.UserService)",
              "name": "userManager",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService",
          "name": "org.nuxeo.ecm.platform.usermanager.UserService",
          "requirements": [],
          "resolutionOrder": 457,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/Services/org.nuxeo.ecm.platform.usermanager.MultiTenantUserManager",
              "id": "org.nuxeo.ecm.platform.usermanager.MultiTenantUserManager",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/Services/org.nuxeo.ecm.platform.usermanager.UserManager",
              "id": "org.nuxeo.ecm.platform.usermanager.UserManager",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/Services/org.nuxeo.runtime.api.login.Authenticator",
              "id": "org.nuxeo.runtime.api.login.Authenticator",
              "overriden": false,
              "version": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.usermanager.UserService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserService/Services/org.nuxeo.ecm.core.api.security.AdministratorGroupsProvider",
              "id": "org.nuxeo.ecm.core.api.security.AdministratorGroupsProvider",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 646,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.UserService\">\n\n  <documentation>\n    A service to interact with the list of users and groups of the platform.\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.platform.usermanager.UserService\"/>\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.platform.usermanager.MultiTenantUserManager\"/>\n    <provide interface=\"org.nuxeo.ecm.platform.usermanager.UserManager\"/>\n    <provide interface=\"org.nuxeo.runtime.api.login.Authenticator\"/>\n    <provide interface=\"org.nuxeo.ecm.core.api.security.AdministratorGroupsProvider\"/>\n  </service>\n\n  <extension-point name=\"userManager\">\n\n    <documentation>\n      Configure the userManager.\n      <p/>\n      The extension should use the format:\n      <code>\n        <userManager>\n          <users>\n            <directory>somedirectory</directory>\n            <emailField>mail</emailField>\n            <searchFields append=\"true\">\n              <substringMatchSearchField>first</substringMatchSearchField>\n              <exactMatchSearchField>last</exactMatchSearchField>\n            </searchFields>\n            <listingMode>tabbed</listingMode>\n            <anonymousUser id=\"Anonymous\">\n              <property name=\"firstName\">Anonymous</property>\n              <property name=\"lastName\">User</property>\n            </anonymousUser>\n            <virtualUser id=\"MyCustomAdministrator\" searchable=\"false\">\n              <password>********</password>\n              <property name=\"firstName\">My Custom</property>\n              <property name=\"lastName\">Administrator</property>\n              <group>administrators</group>\n            </virtualUser>\n            <virtualUser id=\"MyCustomMember\" searchable=\"false\">\n              <password>********</password>\n              <property name=\"firstName\">My Custom</property>\n              <property name=\"lastName\">Member</property>\n              <group>members</group>\n              <group>othergroup</group>\n              <propertyList name=\"listprop\">\n                <value>item1</value>\n                <value>item2</value>\n              </propertyList>\n            </virtualUser>\n            <virtualUser id=\"ExistingVirtualUser\" remove=\"true\"/>\n          </users>\n          <defaultAdministratorId>admin</defaultAdministratorId>\n          <administratorsGroup>myAdministrators</administratorsGroup>\n          <disableDefaultAdministratorsGroup>\n            false\n          </disableDefaultAdministratorsGroup>\n          <userSortField>sn</userSortField>\n          <userPasswordPattern>^[a-zA-Z0-9]{5,}$</userPasswordPattern>\n          <groups>\n            <directory>somegroupdir</directory>\n            <membersField>members</membersField>\n            <groupLabelField>grouplabel</groupLabelField>\n            <subGroupsField>subgroups</subGroupsField>\n            <parentGroupsField>parentgroup</parentGroupsField>\n            <listingMode>search_only</listingMode>\n            <searchFields append=\"true\">\n              <substringMatchSearchField>grouplabel</substringMatchSearchField>\n              <exactMatchSearchField>groupname</exactMatchSearchField>\n            </searchFields>\n          </groups>\n          <defaultGroup>members</defaultGroup>\n          <groupSortField>groupname</groupSortField>\n        </userManager>\n      </code>\n      <p/>\n      If the element anonymousUser has the attribute remove=\"true\", then the\n      anonymous user will be disabled. The anonymous user is searchable by\n      default.\n      <p/>\n      If a virtual user has the attribute remove=\"true\", it is removed from the\n      list of virtual users. Virtual users are searchable by default, but it is\n      not implemented yet... so you should keep the attribute searchable=\"false\"\n      to keep the same behaviour when it will be.\n      <p/>\n      Virtual users with the \"administrators\" group will have the same rights\n      than the default administrator.\n      <p/>\n      New administrators groups can be added using the \"administratorsGroup\"\n      tag. Several groups can be defined, adding as many tags as needed. The\n      default group named \"administrators\" can be disabled by setting the\n      \"disableDefaultAdministratorsGroup\" to \"true\" (defaults to false): only\n      new defined administrators groups will then be taken into account. Note\n      that disabling this default group should be done after setting up custom\n      rights in the repository, as this group is usually defined as the group of\n      users who have all permissions at the root of the repository.\n      <p/>\n      Anonymous and virtual users properties have to match the users directory\n      schema fields to be taken into account.\n      <p/>\n      The userPasswordPattern format is specified by java.util.regex.Pattern.\n      <p/>\n      The values for users listingMode are: \"all\", \"tabbed\", \"search_only\".\n      (These values are defined in\n      org.nuxeo.ecm.webapp.security.UserManagerActionsBean.)\n      <p/>\n      The values for groups listingMode are: \"all\" and \"search_only\".\n    </documentation>\n\n    <object class=\"org.nuxeo.ecm.platform.usermanager.UserManagerDescriptor\"/>\n\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/UserService.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
          "declaredStartOrder": null,
          "documentation": null,
          "documentationHtml": "",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.computedgroups.GroupComputerDescriptor",
                "org.nuxeo.ecm.platform.computedgroups.UserMetadataGroupComputerDescriptor",
                "org.nuxeo.ecm.platform.computedgroups.DocumentMetadataGroupComputerDescriptor"
              ],
              "documentation": "\n    Extension point to contribute a new class to compute virtual groups.\n\n    The contribution should be as the following example :\n    <code>\n    <groupComputer name=\"MyGroupComputerName\">\n        <computer>fullClassName</computer>\n    </groupComputer>\n</code>\n\n\n    The contributed class must implement the org.nuxeo.ecm.platform.computedgroups.GroupComputer interface.\n\n    To simplify the Computer group generation you can also contribute a simple group computer without java\n    code contribution based on\n    <ul>\n    <li>user profile metadata (military grade given a abilitation level, for instance)</li>\n    <li>metadata given a list of documents (ex: local group)</li>\n</ul>\n\n\n    For the first case, you just have to contribute:\n    <code>\n    <userMetadataGroupComputer enabled=\"false\" groupPattern=\"grade_%s\"\n        name=\"grade_cg\" xpath=\"company\"/>\n</code>\n\n\n    Here for each user, during the connection time, Nuxeo affect the group grade_xxx where xxx the value of\n    the company metadata stored into the user profile. If the company metadata is empty or contains only spaces\n    No group is affected to the user.\n\n    For the second possibility (metadata given a list of documents), you just have to contribute:\n    <code>\n    <documentMetadataGroupComputer groupPattern=\"creator_%s\"\n        name=\"creator_cg\" whereClause=\"dc:creator = '%s'\" xpath=\"dc:title\"/>\n</code>\n\n\n    Here, we select documents created by the user. For each document found, we affect the group creator_xxx where xxx\n    is the title of the document. But you can also try this:\n\n    <code>\n    <documentMetadataGroupComputer groupPattern=\"creator_%s\"\n        name=\"creator_cg\" whereClause=\"dc:creator = '%s'\" xpath=\"ecm:uuid\"/>\n</code>\n\n\n    Here, xxx is replaced by the id of the document. XPath value is based on NXQL query and fetch selector. See the NXQL documentation\n    to have more information.\n\n    @author Thierry Delprat (td@nuxeo.com)\n    @author Benjamin JALON (bjalon@nuxeo.com)\n        \n",
              "documentationHtml": "<p>\nExtension point to contribute a new class to compute virtual groups.\n</p><p>\nThe contribution should be as the following example :\n</p><p></p><pre><code>    &lt;groupComputer name&#61;&#34;MyGroupComputerName&#34;&gt;\n        &lt;computer&gt;fullClassName&lt;/computer&gt;\n    &lt;/groupComputer&gt;\n</code></pre><p>\nThe contributed class must implement the org.nuxeo.ecm.platform.computedgroups.GroupComputer interface.\n</p><p>\nTo simplify the Computer group generation you can also contribute a simple group computer without java\ncode contribution based on\n</p><ul><li>user profile metadata (military grade given a abilitation level, for instance)</li><li>metadata given a list of documents (ex: local group)</li></ul>\n<p>\nFor the first case, you just have to contribute:\n</p><p></p><pre><code>    &lt;userMetadataGroupComputer enabled&#61;&#34;false&#34; groupPattern&#61;&#34;grade_%s&#34;\n        name&#61;&#34;grade_cg&#34; xpath&#61;&#34;company&#34;/&gt;\n</code></pre><p>\nHere for each user, during the connection time, Nuxeo affect the group grade_xxx where xxx the value of\nthe company metadata stored into the user profile. If the company metadata is empty or contains only spaces\nNo group is affected to the user.\n</p><p>\nFor the second possibility (metadata given a list of documents), you just have to contribute:\n</p><p></p><pre><code>    &lt;documentMetadataGroupComputer groupPattern&#61;&#34;creator_%s&#34;\n        name&#61;&#34;creator_cg&#34; whereClause&#61;&#34;dc:creator &#61; &#39;%s&#39;&#34; xpath&#61;&#34;dc:title&#34;/&gt;\n</code></pre><p>\nHere, we select documents created by the user. For each document found, we affect the group creator_xxx where xxx\nis the title of the document. But you can also try this:\n</p><p>\n</p><pre><code>    &lt;documentMetadataGroupComputer groupPattern&#61;&#34;creator_%s&#34;\n        name&#61;&#34;creator_cg&#34; whereClause&#61;&#34;dc:creator &#61; &#39;%s&#39;&#34; xpath&#61;&#34;ecm:uuid&#34;/&gt;\n</code></pre><p>\nHere, xxx is replaced by the id of the document. XPath value is based on NXQL query and fetch selector. See the NXQL documentation\nto have more information.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computer",
              "id": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computer",
              "label": "computer (org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl)",
              "name": "computer",
              "version": "2025.7.12"
            },
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
              "descriptors": [
                "org.nuxeo.ecm.platform.computedgroups.GroupComputerChainDescriptor"
              ],
              "documentation": "\n    Extension point to set or update the chain of group computer.\n    The GroupComputers will be called sequentially according the chain definition.\n\n    The contribution should be of the form :\n    <code>\n    <groupComputerChain>\n        <computers>\n            <computer>companyGroupComputer</computer>\n            <computer>myOtherGroupComputer</computer>\n        </computers>\n    </groupComputerChain>\n</code>\n\n\n    By default, each contribution will completly overwrite the chain.\n    If you just want to add a new computer to the existing chain, set the append attribute to true.\n\n    <code>\n    <groupComputerChain append=\"true\">\n        <computers>\n            <computer>myAdditionnalGroupComputer</computer>\n        </computers>\n    </groupComputerChain>\n</code>\n\n\n    @author Thierry Delprat (td@nuxeo.com)\n        \n",
              "documentationHtml": "<p>\nExtension point to set or update the chain of group computer.\nThe GroupComputers will be called sequentially according the chain definition.\n</p><p>\nThe contribution should be of the form :\n</p><p></p><pre><code>    &lt;groupComputerChain&gt;\n        &lt;computers&gt;\n            &lt;computer&gt;companyGroupComputer&lt;/computer&gt;\n            &lt;computer&gt;myOtherGroupComputer&lt;/computer&gt;\n        &lt;/computers&gt;\n    &lt;/groupComputerChain&gt;\n</code></pre><p>\nBy default, each contribution will completly overwrite the chain.\nIf you just want to add a new computer to the existing chain, set the append attribute to true.\n</p><p>\n</p><pre><code>    &lt;groupComputerChain append&#61;&#34;true&#34;&gt;\n        &lt;computers&gt;\n            &lt;computer&gt;myAdditionnalGroupComputer&lt;/computer&gt;\n        &lt;/computers&gt;\n    &lt;/groupComputerChain&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl/ExtensionPoints/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computerChain",
              "id": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl--computerChain",
              "label": "computerChain (org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl)",
              "name": "computerChain",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
          "name": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
          "requirements": [],
          "resolutionOrder": 458,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl/Services/org.nuxeo.ecm.platform.computedgroups.ComputedGroupsService",
              "id": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 610,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\">\n\n    <implementation class=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\" />\n\n    <service>\n        <provide interface=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsService\" />\n    </service>\n\n    <extension-point name=\"computer\">\n        <documentation>\n    Extension point to contribute a new class to compute virtual groups.\n\n    The contribution should be as the following example :\n    <code>\n        <groupComputer name=\"MyGroupComputerName\">\n            <computer>fullClassName</computer>\n        </groupComputer>\n    </code>\n\n    The contributed class must implement the org.nuxeo.ecm.platform.computedgroups.GroupComputer interface.\n\n    To simplify the Computer group generation you can also contribute a simple group computer without java\n    code contribution based on\n    <ul>\n      <li>user profile metadata (military grade given a abilitation level, for instance)</li>\n      <li>metadata given a list of documents (ex: local group)</li>\n    </ul>\n\n    For the first case, you just have to contribute:\n    <code>\n      <userMetadataGroupComputer enabled=\"false\" xpath=\"company\" groupPattern=\"grade_%s\" name=\"grade_cg\"/>\n    </code>\n\n    Here for each user, during the connection time, Nuxeo affect the group grade_xxx where xxx the value of\n    the company metadata stored into the user profile. If the company metadata is empty or contains only spaces\n    No group is affected to the user.\n\n    For the second possibility (metadata given a list of documents), you just have to contribute:\n    <code>\n      <documentMetadataGroupComputer xpath=\"dc:title\" whereClause=\"dc:creator = '%s'\" groupPattern=\"creator_%s\" name=\"creator_cg\"/>\n    </code>\n\n    Here, we select documents created by the user. For each document found, we affect the group creator_xxx where xxx\n    is the title of the document. But you can also try this:\n\n    <code>\n      <documentMetadataGroupComputer xpath=\"ecm:uuid\" whereClause=\"dc:creator = '%s'\" groupPattern=\"creator_%s\" name=\"creator_cg\"/>\n    </code>\n\n    Here, xxx is replaced by the id of the document. XPath value is based on NXQL query and fetch selector. See the NXQL documentation\n    to have more information.\n\n    @author Thierry Delprat (td@nuxeo.com)\n    @author Benjamin JALON (bjalon@nuxeo.com)\n        </documentation>\n        <object\n            class=\"org.nuxeo.ecm.platform.computedgroups.GroupComputerDescriptor\" />\n        <object\n            class=\"org.nuxeo.ecm.platform.computedgroups.UserMetadataGroupComputerDescriptor\" />\n        <object\n            class=\"org.nuxeo.ecm.platform.computedgroups.DocumentMetadataGroupComputerDescriptor\" />\n\n    </extension-point>\n\n    <extension-point name=\"computerChain\">\n        <documentation>\n    Extension point to set or update the chain of group computer.\n    The GroupComputers will be called sequentially according the chain definition.\n\n    The contribution should be of the form :\n    <code>\n      <groupComputerChain>\n         <computers>\n           <computer>companyGroupComputer</computer>\n           <computer>myOtherGroupComputer</computer>\n         </computers>\n      </groupComputerChain>\n    </code>\n\n    By default, each contribution will completly overwrite the chain.\n    If you just want to add a new computer to the existing chain, set the append attribute to true.\n\n    <code>\n          <groupComputerChain append=\"true\">\n             <computers>\n               <computer>myAdditionnalGroupComputer</computer>\n             </computers>\n          </groupComputerChain>\n    </code>\n\n    @author Thierry Delprat (td@nuxeo.com)\n        </documentation>\n        <object\n            class=\"org.nuxeo.ecm.platform.computedgroups.GroupComputerChainDescriptor\" />\n    </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/computedgroups-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.computedgroups.ComputedGroupsServiceImpl--computer",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib/Contributions/org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib--computer",
              "id": "org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib--computer",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "name": "org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"computer\" target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\">\n        <groupComputer name=\"companyGroupComputer\">\n            <computer>org.nuxeo.ecm.platform.computedgroups.CompanyGroupComputer</computer>\n        </groupComputer>\n    </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib",
          "name": "org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib",
          "requirements": [],
          "resolutionOrder": 459,
          "services": [],
          "startOrder": 244,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.computedgroups.UserManager.companyComputerContrib\">\n\n    <extension target=\"org.nuxeo.ecm.platform.computedgroups.ComputedGroupsServiceImpl\"\n        point=\"computer\">\n        <groupComputer name=\"companyGroupComputer\">\n            <computer>org.nuxeo.ecm.platform.computedgroups.CompanyGroupComputer</computer>\n        </groupComputer>\n    </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/companycomputedgroups-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.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserManagerImpl/Contributions/org.nuxeo.ecm.platform.usermanager.UserManagerImpl--userManager",
              "id": "org.nuxeo.ecm.platform.usermanager.UserManagerImpl--userManager",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.usermanager.UserService",
                "name": "org.nuxeo.ecm.platform.usermanager.UserService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"userManager\" target=\"org.nuxeo.ecm.platform.usermanager.UserService\">\n\n    <userManager class=\"org.nuxeo.ecm.platform.computedgroups.UserManagerWithComputedGroups\">\n      <users>\n        <listingMode>search_only</listingMode>\n      </users>\n    </userManager>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.UserManagerImpl",
          "name": "org.nuxeo.ecm.platform.usermanager.UserManagerImpl",
          "requirements": [
            "org.nuxeo.ecm.core.cache.CacheService"
          ],
          "resolutionOrder": 460,
          "services": [],
          "startOrder": 413,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.UserManagerImpl\">\n\n  <require>org.nuxeo.ecm.core.cache.CacheService</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.usermanager.UserService\"\n    point=\"userManager\">\n\n    <userManager\n      class=\"org.nuxeo.ecm.platform.computedgroups.UserManagerWithComputedGroups\">\n      <users>\n        <listingMode>search_only</listingMode>\n      </users>\n    </userManager>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/UserManagerImpl.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "Adapters for UserModel\n",
          "documentationHtml": "<p>\nAdapters for UserModel</p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.adapter/Contributions/org.nuxeo.ecm.platform.usermanager.adapter--adapters",
              "id": "org.nuxeo.ecm.platform.usermanager.adapter--adapters",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"org.nuxeo.ecm.platform.usermanager.UserAdapter\" factory=\"org.nuxeo.ecm.platform.usermanager.UserAdapterFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.adapter",
          "name": "org.nuxeo.ecm.platform.usermanager.adapter",
          "requirements": [],
          "resolutionOrder": 462,
          "services": [],
          "startOrder": 414,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.usermanager.adapter\">\n  <documentation>Adapters for UserModel</documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n    <adapter class=\"org.nuxeo.ecm.platform.usermanager.UserAdapter\"\n      factory=\"org.nuxeo.ecm.platform.usermanager.UserAdapterFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/user-adapter-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Resolver for NuxeoPrincipal and NuxeoGroup document properties. Values for properties must be prefixed\n    by 'user:' or 'group:'.\n  \n",
          "documentationHtml": "<p>\nResolver for NuxeoPrincipal and NuxeoGroup document properties. Values for properties must be prefixed\nby &#39;user:&#39; or &#39;group:&#39;.\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/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.resolver/Contributions/org.nuxeo.ecm.platform.usermanager.resolver--resolvers",
              "id": "org.nuxeo.ecm.platform.usermanager.resolver--resolvers",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.ObjectResolverService",
                "name": "org.nuxeo.ecm.core.schema.ObjectResolverService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"resolvers\" target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\">\n    <resolver class=\"org.nuxeo.ecm.platform.usermanager.UserManagerResolver\" type=\"userManagerResolver\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.resolver",
          "name": "org.nuxeo.ecm.platform.usermanager.resolver",
          "requirements": [],
          "resolutionOrder": 463,
          "services": [],
          "startOrder": 418,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.ecm.platform.usermanager.resolver\">\n  <documentation>\n    Resolver for NuxeoPrincipal and NuxeoGroup document properties. Values for properties must be prefixed\n    by 'user:' or 'group:'.\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.ObjectResolverService\" point=\"resolvers\">\n    <resolver type=\"userManagerResolver\" class=\"org.nuxeo.ecm.platform.usermanager.UserManagerResolver\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/usermanager-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/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.marshallers/Contributions/org.nuxeo.ecm.platform.usermanager.marshallers--marshallers",
              "id": "org.nuxeo.ecm.platform.usermanager.marshallers--marshallers",
              "registrationOrder": 18,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalListJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupJsonReader\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupListJsonWriter\" enable=\"true\"/>\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupListJsonReader\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.marshallers",
          "name": "org.nuxeo.ecm.platform.usermanager.marshallers",
          "requirements": [],
          "resolutionOrder": 464,
          "services": [],
          "startOrder": 415,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.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.usermanager.io.NuxeoPrincipalJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoPrincipalListJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupJsonReader\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupListJsonWriter\" enable=\"true\" />\n    <register class=\"org.nuxeo.ecm.platform.usermanager.io.NuxeoGroupListJsonReader\" 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      Controls whether we check the validity of password when changing it.\n\n      @since 8.4\n    \n",
              "documentationHtml": "<p>\nControls whether we check the validity of password when changing it.\n</p><p>\n&#64;since 8.4\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.properties/Contributions/org.nuxeo.ecm.platform.usermanager.properties--configuration",
              "id": "org.nuxeo.ecm.platform.usermanager.properties--configuration",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<?xml version='1.0' encoding='UTF-8'?>\n<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Controls whether we check the validity of password when changing it.\n\n      @since 8.4\n    </documentation>\n    <property name=\"nuxeo.usermanager.check.password\">********</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Controls whether the UserManager.searchUsers(pattern) and UserManager.searchGroups(pattern)\n      APIs interpret the pattern as a generic string with arbitrary characters\n      that will be matched exactly (depending on the directory substring match style)\n      (non-compat mode), or as a LIKE pattern where % and _ are interpreted as LIKE escapes (compat mode).\n\n      @since 11.1\n    \n",
              "documentationHtml": "<p>\nControls whether the UserManager.searchUsers(pattern) and UserManager.searchGroups(pattern)\nAPIs interpret the pattern as a generic string with arbitrary characters\nthat will be matched exactly (depending on the directory substring match style)\n(non-compat mode), or as a LIKE pattern where % and _ are interpreted as LIKE escapes (compat mode).\n</p><p>\n&#64;since 11.1\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.properties/Contributions/org.nuxeo.ecm.platform.usermanager.properties--configuration1",
              "id": "org.nuxeo.ecm.platform.usermanager.properties--configuration1",
              "registrationOrder": 35,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Controls whether the UserManager.searchUsers(pattern) and UserManager.searchGroups(pattern)\n      APIs interpret the pattern as a generic string with arbitrary characters\n      that will be matched exactly (depending on the directory substring match style)\n      (non-compat mode), or as a LIKE pattern where % and _ are interpreted as LIKE escapes (compat mode).\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.usermanager.search.escape.compat\">false</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.properties",
          "name": "org.nuxeo.ecm.platform.usermanager.properties",
          "requirements": [],
          "resolutionOrder": 465,
          "services": [],
          "startOrder": 417,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.properties\">\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Controls whether we check the validity of password when changing it.\n\n      @since 8.4\n    </documentation>\n    <property name=\"nuxeo.usermanager.check.password\">********</property>\n  </extension>\n\n <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Controls whether the UserManager.searchUsers(pattern) and UserManager.searchGroups(pattern)\n      APIs interpret the pattern as a generic string with arbitrary characters\n      that will be matched exactly (depending on the directory substring match style)\n      (non-compat mode), or as a LIKE pattern where % and _ are interpreted as LIKE escapes (compat mode).\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.usermanager.search.escape.compat\">false</property>\n  </extension>\n\n</component>",
          "xmlFileName": "/OSGI-INF/usermanager-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.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.pageproviders/Contributions/org.nuxeo.ecm.platform.usermanager.pageproviders--providers",
              "id": "org.nuxeo.ecm.platform.usermanager.pageproviders--providers",
              "registrationOrder": 22,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.UsersPageProvider\" name=\"users_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.NuxeoPrincipalsPageProvider\" name=\"nuxeo_principals_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupsPageProvider\" name=\"groups_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.NuxeoGroupsPageProvider\" name=\"nuxeo_groups_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupMemberUsersPageProvider\" name=\"nuxeo_group_member_users_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n    <genericPageProvider class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupMemberGroupsPageProvider\" name=\"nuxeo_group_member_groups_listing\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager/org.nuxeo.ecm.platform.usermanager.pageproviders",
          "name": "org.nuxeo.ecm.platform.usermanager.pageproviders",
          "requirements": [],
          "resolutionOrder": 466,
          "services": [],
          "startOrder": 416,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.platform.usermanager.pageproviders\">\n\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\"\n    point=\"providers\">\n\n    <genericPageProvider name=\"users_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.UsersPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"nuxeo_principals_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.NuxeoPrincipalsPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"groups_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupsPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"nuxeo_groups_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.NuxeoGroupsPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n    <genericPageProvider name=\"nuxeo_group_member_users_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupMemberUsersPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n    <genericPageProvider name=\"nuxeo_group_member_groups_listing\"\n      class=\"org.nuxeo.ecm.platform.usermanager.providers.GroupMemberGroupsPageProvider\">\n      <pageSize>20</pageSize>\n    </genericPageProvider>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/pageproviders-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-platform-usermanager-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.usermanager",
      "id": "org.nuxeo.ecm.platform.usermanager",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: 1.6.0_20 (Sun Microsystems Inc.)\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nExport-Package: org.nuxeo.ecm.platform.usermanager;core=split,org.nuxeo.\r\n ecm.platform.computedgroups\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Category: web,stateful\r\nBundle-Name: Nuxeo User Manager Module\r\nBundle-Localization: plugin\r\nBundle-RequiredExecutionEnvironment: JavaSE-1.6\r\nBundle-Vendor: Nuxeo\r\nEclipse-LazyStart: false\r\nBundle-Version: 0.0.0.SNAPSHOT\r\nNuxeo-Component: OSGI-INF/UserService.xml,OSGI-INF/computedgroups-framew\r\n ork.xml,OSGI-INF/companycomputedgroups-contrib.xml,OSGI-INF/UserManager\r\n Impl.xml,OSGI-INF/user-adapter-contrib.xml,OSGI-INF/usermanager-resolve\r\n r-contrib.xml,OSGI-INF/marshallers-contrib.xml,OSGI-INF/usermanager-pro\r\n perties.xml,OSGI-INF/pageproviders-contrib.xml\r\nImport-Package: org.apache.commons.logging,org.nuxeo.common.collections,\r\n org.nuxeo.common.xmap.annotation,org.nuxeo.ecm.core;api=split,org.nuxeo\r\n .ecm.core.api;api=split,org.nuxeo.ecm.core.api.impl,org.nuxeo.ecm.core.\r\n api.security,org.nuxeo.ecm.directory;api=split,org.nuxeo.ecm.directory.\r\n api,org.nuxeo.ecm.platform.usermanager.exceptions,org.nuxeo.runtime,org\r\n .nuxeo.runtime.api,org.nuxeo.runtime.model,org.nuxeo.runtime.services.e\r\n vent\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.usermanager\r\n\r\n",
      "maxResolutionOrder": 466,
      "minResolutionOrder": 457,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-platform-userworkspace",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.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/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": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
          "name": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
          "requirements": [],
          "resolutionOrder": 467,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            },
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/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": "2025.7.12"
            }
          ],
          "startOrder": 647,
          "version": "2025.7.12",
          "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/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": 39,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.listener",
          "name": "org.nuxeo.ecm.platform.userworkspace.listener",
          "requirements": [],
          "resolutionOrder": 468,
          "services": [],
          "startOrder": 422,
          "version": "2025.7.12",
          "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/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": "2025.7.12",
              "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/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl",
          "name": "org.nuxeo.ecm.platform.userworkspace.UserWorkspaceServiceImpl",
          "requirements": [],
          "resolutionOrder": 469,
          "services": [],
          "startOrder": 419,
          "version": "2025.7.12",
          "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/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": 24,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.operationsContrib",
          "name": "org.nuxeo.ecm.platform.userworkspace.operationsContrib",
          "requirements": [],
          "resolutionOrder": 471,
          "services": [],
          "startOrder": 423,
          "version": "2025.7.12",
          "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/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": 31,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/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": 472,
          "services": [],
          "startOrder": 421,
          "version": "2025.7.12",
          "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/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": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.types.TypeService",
                "name": "org.nuxeo.ecm.platform.types.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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      <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/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.types.web",
          "name": "org.nuxeo.ecm.platform.types.web",
          "requirements": [],
          "resolutionOrder": 473,
          "services": [],
          "startOrder": 403,
          "version": "2025.7.12",
          "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      <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/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": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2025.7.12",
              "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/org.nuxeo.ecm.platform.userworkspace/org.nuxeo.ecm.platform.userworkspace.core.LifeCycleManagerExtensions",
          "name": "org.nuxeo.ecm.platform.userworkspace.core.LifeCycleManagerExtensions",
          "requirements": [],
          "resolutionOrder": 474,
          "services": [],
          "startOrder": 420,
          "version": "2025.7.12",
          "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-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.platform.userworkspace",
      "id": "org.nuxeo.ecm.platform.userworkspace",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo User Workspace\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.userworkspace\r\nBundle-Version: 1.0.0\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": 474,
      "minResolutionOrder": 467,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-quota",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.ecm.quota",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.quota.QuotaStatsServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Service used to compute quota and statistics on documents.\n\n    @author Thomas Roger (troger@nuxeo.com)\n    @since 5.5\n  \n",
          "documentationHtml": "<p>\nService used to compute quota and statistics on documents.\n</p><p>\n&#64;since 5.5\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.quota.QuotaStatsService",
              "descriptors": [
                "org.nuxeo.ecm.quota.QuotaStatsUpdaterDescriptor"
              ],
              "documentation": "\n      Extension point to register QuotaStatsUpdaters that will be used\n      by the service to update the statistics.\n\n      @since 5.5\n    \n",
              "documentationHtml": "<p>\nExtension point to register QuotaStatsUpdaters that will be used\nby the service to update the statistics.\n</p><p>\n&#64;since 5.5\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.QuotaStatsService/ExtensionPoints/org.nuxeo.ecm.quota.QuotaStatsService--quotaStatsUpdaters",
              "id": "org.nuxeo.ecm.quota.QuotaStatsService--quotaStatsUpdaters",
              "label": "quotaStatsUpdaters (org.nuxeo.ecm.quota.QuotaStatsService)",
              "name": "quotaStatsUpdaters",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.QuotaStatsService",
          "name": "org.nuxeo.ecm.quota.QuotaStatsService",
          "requirements": [],
          "resolutionOrder": 521,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.quota.QuotaStatsService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.QuotaStatsService/Services/org.nuxeo.ecm.quota.QuotaStatsService",
              "id": "org.nuxeo.ecm.quota.QuotaStatsService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 655,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.quota.QuotaStatsService\">\n\n  <documentation>\n    Service used to compute quota and statistics on documents.\n\n    @author Thomas Roger (troger@nuxeo.com)\n    @since 5.5\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.quota.QuotaStatsServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.quota.QuotaStatsService\" />\n  </service>\n\n  <extension-point name=\"quotaStatsUpdaters\">\n    <documentation>\n      Extension point to register QuotaStatsUpdaters that will be used\n      by the service to update the statistics.\n\n      @since 5.5\n    </documentation>\n    <object class=\"org.nuxeo.ecm.quota.QuotaStatsUpdaterDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/quotastats-service.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": null,
          "declaredStartOrder": null,
          "documentation": "\n    Default contribution to the QuotaStatsService registering a\n    QuotaStatsUpdater to count non-folderish documents.\n\n    @author Thomas Roger (troger@nuxeo.com)\n    @since 5.5\n  \n",
          "documentationHtml": "<p>\nDefault contribution to the QuotaStatsService registering a\nQuotaStatsUpdater to count non-folderish documents.\n</p><p>\n&#64;since 5.5\n</p><p></p>",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.quota.QuotaStatsService--quotaStatsUpdaters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.contrib/Contributions/org.nuxeo.ecm.quota.contrib--quotaStatsUpdaters",
              "id": "org.nuxeo.ecm.quota.contrib--quotaStatsUpdaters",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.quota.QuotaStatsService",
                "name": "org.nuxeo.ecm.quota.QuotaStatsService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"quotaStatsUpdaters\" target=\"org.nuxeo.ecm.quota.QuotaStatsService\">\n\n    <quotaStatsUpdater class=\"org.nuxeo.ecm.quota.count.DocumentsCountUpdater\" descriptionLabel=\"label.quota.documentsCountUpdater.description\" label=\"label.quota.documentsCountUpdater\" name=\"documentsCountUpdater\"/>\n\n    <quotaStatsUpdater class=\"org.nuxeo.ecm.quota.size.DocumentsSizeUpdater\" descriptionLabel=\"label.quota.documentsCountAndSizeUpdater.description\" label=\"label.quota.documentsCountSizeUpdater\" name=\"documentsSizeUpdater\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property controlling the scroll size when clearing quota size.\n\n      @since 11.1\n    \n",
              "documentationHtml": "<p>\nProperty controlling the scroll size when clearing quota size.\n</p><p>\n&#64;since 11.1\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.contrib/Contributions/org.nuxeo.ecm.quota.contrib--configuration",
              "id": "org.nuxeo.ecm.quota.contrib--configuration",
              "registrationOrder": 40,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property controlling the scroll size when clearing quota size.\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.quota.clear.scroll.size\">500</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property controlling the scroll lifetime when clearing quota size.\n\n      @since 11.1\n    \n",
              "documentationHtml": "<p>\nProperty controlling the scroll lifetime when clearing quota size.\n</p><p>\n&#64;since 11.1\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.contrib/Contributions/org.nuxeo.ecm.quota.contrib--configuration1",
              "id": "org.nuxeo.ecm.quota.contrib--configuration1",
              "registrationOrder": 41,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property controlling the scroll lifetime when clearing quota size.\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.quota.clear.scroll.keepAliveSeconds\">60</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property controlling the scroll size when initialising quota size.\n\n      @since 11.1\n    \n",
              "documentationHtml": "<p>\nProperty controlling the scroll size when initialising quota size.\n</p><p>\n&#64;since 11.1\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.contrib/Contributions/org.nuxeo.ecm.quota.contrib--configuration2",
              "id": "org.nuxeo.ecm.quota.contrib--configuration2",
              "registrationOrder": 42,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property controlling the scroll size when initialising quota size.\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.quota.init.scroll.size\">250</property>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": "\n      Property controlling the scroll lifetime when initialising quota size.\n\n      @since 11.1\n    \n",
              "documentationHtml": "<p>\nProperty controlling the scroll lifetime when initialising quota size.\n</p><p>\n&#64;since 11.1\n</p><p></p>",
              "extensionPoint": "org.nuxeo.runtime.ConfigurationService--configuration",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.contrib/Contributions/org.nuxeo.ecm.quota.contrib--configuration3",
              "id": "org.nuxeo.ecm.quota.contrib--configuration3",
              "registrationOrder": 43,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.ConfigurationService",
                "name": "org.nuxeo.runtime.ConfigurationService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"configuration\" target=\"org.nuxeo.runtime.ConfigurationService\">\n    <documentation>\n      Property controlling the scroll lifetime when initialising quota size.\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.quota.init.scroll.keepAliveSeconds\">120</property>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.contrib",
          "name": "org.nuxeo.ecm.quota.contrib",
          "requirements": [],
          "resolutionOrder": 522,
          "services": [],
          "startOrder": 441,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.quota.contrib\">\n\n  <documentation>\n    Default contribution to the QuotaStatsService registering a\n    QuotaStatsUpdater to count non-folderish documents.\n\n    @author Thomas Roger (troger@nuxeo.com)\n    @since 5.5\n  </documentation>\n\n  <extension target=\"org.nuxeo.ecm.quota.QuotaStatsService\" point=\"quotaStatsUpdaters\">\n\n    <quotaStatsUpdater name=\"documentsCountUpdater\"\n      class=\"org.nuxeo.ecm.quota.count.DocumentsCountUpdater\"\n      label=\"label.quota.documentsCountUpdater\"\n      descriptionLabel=\"label.quota.documentsCountUpdater.description\"/>\n\n    <quotaStatsUpdater name=\"documentsSizeUpdater\"\n      class=\"org.nuxeo.ecm.quota.size.DocumentsSizeUpdater\"\n      label=\"label.quota.documentsCountSizeUpdater\"\n      descriptionLabel=\"label.quota.documentsCountAndSizeUpdater.description\"/>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property controlling the scroll size when clearing quota size.\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.quota.clear.scroll.size\">500</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property controlling the scroll lifetime when clearing quota size.\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.quota.clear.scroll.keepAliveSeconds\">60</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property controlling the scroll size when initialising quota size.\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.quota.init.scroll.size\">250</property>\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.ConfigurationService\" point=\"configuration\">\n    <documentation>\n      Property controlling the scroll lifetime when initialising quota size.\n\n      @since 11.1\n    </documentation>\n    <property name=\"nuxeo.quota.init.scroll.keepAliveSeconds\">120</property>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/quotastats-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/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.listeners/Contributions/org.nuxeo.ecm.quota.listeners--listener",
              "id": "org.nuxeo.ecm.quota.listeners--listener",
              "registrationOrder": 41,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.event.EventServiceComponent",
                "name": "org.nuxeo.ecm.core.event.EventServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"listener\" target=\"org.nuxeo.ecm.core.event.EventServiceComponent\">\n\n    <listener async=\"false\" class=\"org.nuxeo.ecm.quota.QuotaStatsListener\" name=\"quotaStatsListener\" postCommit=\"false\" priority=\"100\">\n      <event>documentCreated</event>\n      <event>aboutToRemove</event>\n      <event>documentCreatedByCopy</event>\n      <event>documentMoved</event>\n      <event>documentModified</event>\n      <event>beforeDocumentModification</event>\n      <event>aboutToRemoveVersion</event>\n      <event>aboutToCheckIn</event>\n      <event>documentCheckedIn</event>\n      <event>aboutToCheckout</event>\n      <event>documentCheckedOut</event>\n      <event>documentRestored</event>\n      <event>beforeRestoringDocument</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n     <listener async=\"false\" class=\"org.nuxeo.ecm.quota.QuotaUserWorkspaceListener\" name=\"quotaUserWorkspaceSetter\" priority=\"110\">\n      <event>userWorkspaceCreated</event>\n    </listener>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.listeners",
          "name": "org.nuxeo.ecm.quota.listeners",
          "requirements": [],
          "resolutionOrder": 523,
          "services": [],
          "startOrder": 443,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.quota.listeners\">\n\n  <extension target=\"org.nuxeo.ecm.core.event.EventServiceComponent\"\n    point=\"listener\">\n\n    <listener name=\"quotaStatsListener\" async=\"false\" postCommit=\"false\"\n      class=\"org.nuxeo.ecm.quota.QuotaStatsListener\" priority=\"100\">\n      <event>documentCreated</event>\n      <event>aboutToRemove</event>\n      <event>documentCreatedByCopy</event>\n      <event>documentMoved</event>\n      <event>documentModified</event>\n      <event>beforeDocumentModification</event>\n      <event>aboutToRemoveVersion</event>\n      <event>aboutToCheckIn</event>\n      <event>documentCheckedIn</event>\n      <event>aboutToCheckout</event>\n      <event>documentCheckedOut</event>\n      <event>documentRestored</event>\n      <event>beforeRestoringDocument</event>\n      <event>documentTrashed</event>\n      <event>documentUntrashed</event>\n    </listener>\n\n     <listener name=\"quotaUserWorkspaceSetter\" async=\"false\"\n      class=\"org.nuxeo.ecm.quota.QuotaUserWorkspaceListener\" priority=\"110\">\n      <event>userWorkspaceCreated</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/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.core.types/Contributions/org.nuxeo.ecm.quota.core.types--schema",
              "id": "org.nuxeo.ecm.quota.core.types--schema",
              "registrationOrder": 39,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <schema name=\"documents_count_statistics\" prefix=\"dcs\" src=\"schemas/documents_count_statistics.xsd\"/>\n\n    <schema name=\"documents_size_statistics\" prefix=\"dss\" src=\"schemas/documents_size_statistics.xsd\"/>\n\n    <schema name=\"quota_heaviest_containers_cv\" prefix=\"quota_heaviest_containers_cv\" src=\"schemas/quota_heaviest_containers_cv.xsd\"/>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.core.types/Contributions/org.nuxeo.ecm.quota.core.types--doctype",
              "id": "org.nuxeo.ecm.quota.core.types--doctype",
              "registrationOrder": 34,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <facet name=\"DocumentsCountStatistics\">\n      <schema name=\"documents_count_statistics\"/>\n    </facet>\n\n    <facet name=\"DocumentsSizeStatistics\">\n      <schema name=\"documents_size_statistics\"/>\n    </facet>\n\n    <doctype extends=\"Document\" name=\"quota_heaviest_containers_cv\">\n     <schema name=\"quota_heaviest_containers_cv\"/>\n    </doctype>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.core.types",
          "name": "org.nuxeo.ecm.quota.core.types",
          "requirements": [],
          "resolutionOrder": 524,
          "services": [],
          "startOrder": 442,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.quota.core.types\">\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n\n    <schema name=\"documents_count_statistics\" prefix=\"dcs\"\n      src=\"schemas/documents_count_statistics.xsd\"/>\n\n    <schema name=\"documents_size_statistics\" prefix=\"dss\"\n      src=\"schemas/documents_size_statistics.xsd\"/>\n\n    <schema name=\"quota_heaviest_containers_cv\" prefix=\"quota_heaviest_containers_cv\"\n      src=\"schemas/quota_heaviest_containers_cv.xsd\"/>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <facet name=\"DocumentsCountStatistics\">\n      <schema name=\"documents_count_statistics\" />\n    </facet>\n\n    <facet name=\"DocumentsSizeStatistics\">\n      <schema name=\"documents_size_statistics\" />\n    </facet>\n\n    <doctype name=\"quota_heaviest_containers_cv\" extends=\"Document\">\n     <schema name=\"quota_heaviest_containers_cv\"/>\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.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.adapters/Contributions/org.nuxeo.ecm.quota.adapters--adapters",
              "id": "org.nuxeo.ecm.quota.adapters--adapters",
              "registrationOrder": 21,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n\n    <adapter class=\"org.nuxeo.ecm.core.api.quota.QuotaStatsNonFolderishCount\" facet=\"Folderish\" factory=\"org.nuxeo.ecm.quota.count.QuotaStatsAdapterFactory\"/>\n\n    <adapter class=\"org.nuxeo.ecm.quota.size.QuotaAware\" factory=\"org.nuxeo.ecm.quota.size.QuotaAwareDocumentFactory\"/>\n\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.adapters",
          "name": "org.nuxeo.ecm.quota.adapters",
          "requirements": [],
          "resolutionOrder": 525,
          "services": [],
          "startOrder": 440,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.ecm.quota.adapters\">\n\n  <extension target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\"\n    point=\"adapters\">\n\n    <adapter facet=\"Folderish\"\n      class=\"org.nuxeo.ecm.core.api.quota.QuotaStatsNonFolderishCount\"\n      factory=\"org.nuxeo.ecm.quota.count.QuotaStatsAdapterFactory\" />\n\n    <adapter\n      class=\"org.nuxeo.ecm.quota.size.QuotaAware\"\n      factory=\"org.nuxeo.ecm.quota.size.QuotaAwareDocumentFactory\" />\n\n\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.core.work.service--queues",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.work/Contributions/org.nuxeo.ecm.quota.work--queues",
              "id": "org.nuxeo.ecm.quota.work--queues",
              "registrationOrder": 13,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.work.service",
                "name": "org.nuxeo.ecm.core.work.service",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"queues\" target=\"org.nuxeo.ecm.core.work.service\">\n    <queue id=\"quota\">\n      <maxThreads>1</maxThreads>\n      <category>quotaInitialStatistics</category>\n      <category>quotaMaxSizeSetter</category>\n      <name>quota</name>\n    </queue>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.work",
          "name": "org.nuxeo.ecm.quota.work",
          "requirements": [],
          "resolutionOrder": 526,
          "services": [],
          "startOrder": 444,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.quota.work\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.work.service\" point=\"queues\">\n    <queue id=\"quota\">\n      <maxThreads>1</maxThreads>\n      <category>quotaInitialStatistics</category>\n      <category>quotaMaxSizeSetter</category>\n      <name>quota</name>\n    </queue>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/quota-work-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.ecm.quota.size.QuotaSizeServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    Component to holds config for the size quota computation\n\n    @author Damien METZLER\n    @since 5.7\n  \n",
          "documentationHtml": "<p>\nComponent to holds config for the size quota computation\n</p><p>\n&#64;since 5.7\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.ecm.quota.size.QuotaSizeService",
              "descriptors": [
                "org.nuxeo.ecm.quota.size.BlobExcludeDescriptor"
              ],
              "documentation": "\n      Extension point to exclude some blob paths for quota computation.\n      When computing the total blobs size of a document it can be useful\n      to exclude some blob that could be not relevant to end user. For\n      instance for a document of type Picture, one perhaps don't want\n      to see the blobs for the differents views (thumbnail, medium)\n      to be included in the total size computation.\n\n      <code>\n    <extension point=\"exclusions\" target=\"org.nuxeo.ecm.quota.size.QuotaSizeService\">\n        <exclude path=\"files/*/file\"/>\n        <exclude path=\"views/*/content\"/>\n        <exclude path=\"prefix:attached/*/content\"/>\n    </extension>\n</code>\n",
              "documentationHtml": "<p>\nExtension point to exclude some blob paths for quota computation.\nWhen computing the total blobs size of a document it can be useful\nto exclude some blob that could be not relevant to end user. For\ninstance for a document of type Picture, one perhaps don&#39;t want\nto see the blobs for the differents views (thumbnail, medium)\nto be included in the total size computation.\n</p><p>\n</p><pre><code>    &lt;extension point&#61;&#34;exclusions&#34; target&#61;&#34;org.nuxeo.ecm.quota.size.QuotaSizeService&#34;&gt;\n        &lt;exclude path&#61;&#34;files/*/file&#34;/&gt;\n        &lt;exclude path&#61;&#34;views/*/content&#34;/&gt;\n        &lt;exclude path&#61;&#34;prefix:attached/*/content&#34;/&gt;\n    &lt;/extension&gt;\n</code></pre><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.size.QuotaSizeService/ExtensionPoints/org.nuxeo.ecm.quota.size.QuotaSizeService--exclusions",
              "id": "org.nuxeo.ecm.quota.size.QuotaSizeService--exclusions",
              "label": "exclusions (org.nuxeo.ecm.quota.size.QuotaSizeService)",
              "name": "exclusions",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.size.QuotaSizeService",
          "name": "org.nuxeo.ecm.quota.size.QuotaSizeService",
          "requirements": [],
          "resolutionOrder": 527,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.ecm.quota.size.QuotaSizeService",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/org.nuxeo.ecm.quota.size.QuotaSizeService/Services/org.nuxeo.ecm.quota.size.QuotaSizeService",
              "id": "org.nuxeo.ecm.quota.size.QuotaSizeService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 656,
          "version": "2025.7.12",
          "xmlFileContent": "<component name=\"org.nuxeo.ecm.quota.size.QuotaSizeService\">\n\n  <documentation>\n    Component to holds config for the size quota computation\n\n    @author Damien METZLER\n    @since 5.7\n  </documentation>\n\n  <implementation class=\"org.nuxeo.ecm.quota.size.QuotaSizeServiceImpl\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.ecm.quota.size.QuotaSizeService\" />\n  </service>\n\n\n  <extension-point name=\"exclusions\">\n    <documentation>\n      Extension point to exclude some blob paths for quota computation.\n      When computing the total blobs size of a document it can be useful\n      to exclude some blob that could be not relevant to end user. For\n      instance for a document of type Picture, one perhaps don't want\n      to see the blobs for the differents views (thumbnail, medium)\n      to be included in the total size computation.\n\n      <code>\n        <extension target=\"org.nuxeo.ecm.quota.size.QuotaSizeService\"\n          point=\"exclusions\">\n          <exclude path=\"files/*/file\"></exclude>\n          <exclude path=\"views/*/content\"></exclude>\n          <exclude path=\"prefix:attached/*/content\"></exclude>\n        </extension>\n      </code>\n\n    </documentation>\n    <object class=\"org.nuxeo.ecm.quota.size.BlobExcludeDescriptor\" />\n  </extension-point>\n\n</component>",
          "xmlFileName": "/OSGI-INF/quotasize-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.platform/org.nuxeo.ecm.quota/rg.nuxeo.ecm.quota.automation.contrib/Contributions/rg.nuxeo.ecm.quota.automation.contrib--operations",
              "id": "rg.nuxeo.ecm.quota.automation.contrib--operations",
              "registrationOrder": 26,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.ecm.quota.automation.GetQuotaInfoOperation\"/>\n    <operation class=\"org.nuxeo.ecm.quota.automation.SetQuotaInfoOperation\"/>\n    <operation class=\"org.nuxeo.ecm.quota.automation.GetQuotaStatisticsOperation\"/>\n    <operation class=\"org.nuxeo.ecm.quota.automation.RecomputeQuotaStatistics\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentation": null,
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.automation.server.AutomationServer--bindings",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/rg.nuxeo.ecm.quota.automation.contrib/Contributions/rg.nuxeo.ecm.quota.automation.contrib--bindings",
              "id": "rg.nuxeo.ecm.quota.automation.contrib--bindings",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.automation.server.AutomationServer",
                "name": "org.nuxeo.ecm.automation.server.AutomationServer",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"bindings\" target=\"org.nuxeo.ecm.automation.server.AutomationServer\">\n    <binding name=\"org.nuxeo.ecm.quota.automation.RecomputeQuotaStatistics\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota/rg.nuxeo.ecm.quota.automation.contrib",
          "name": "rg.nuxeo.ecm.quota.automation.contrib",
          "requirements": [],
          "resolutionOrder": 528,
          "services": [],
          "startOrder": 529,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"rg.nuxeo.ecm.quota.automation.contrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\"\n    point=\"operations\">\n    <operation\n      class=\"org.nuxeo.ecm.quota.automation.GetQuotaInfoOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.quota.automation.SetQuotaInfoOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.quota.automation.GetQuotaStatisticsOperation\" />\n    <operation\n      class=\"org.nuxeo.ecm.quota.automation.RecomputeQuotaStatistics\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.automation.server.AutomationServer\"\n    point=\"bindings\">\n    <binding name=\"org.nuxeo.ecm.quota.automation.RecomputeQuotaStatistics\">\n      <administrator>true</administrator>\n    </binding>\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-quota-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.ecm.quota",
      "id": "org.nuxeo.ecm.quota",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-Name: Nuxeo Quota\r\nBundle-SymbolicName: org.nuxeo.ecm.quota;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nBundle-Version: 1.0.0\r\nNuxeo-component: OSGI-INF/quotastats-service.xml,OSGI-INF/quotastats-con\r\n trib.xml,OSGI-INF/listeners-contrib.xml,OSGI-INF/core-types-contrib.xml\r\n ,OSGI-INF/adapters-contrib.xml,OSGI-INF/quota-work-contrib.xml,OSGI-INF\r\n /quotasize-service.xml,OSGI-INF/operations-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 528,
      "minResolutionOrder": 521,
      "packages": [
        "nuxeo-quota"
      ],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "# Nuxeo Quota\n\nNuxeo Quota module.\n\n## About this module\n\nThis module provides a pluggable infrastructure to be able to collect some real time statistics about content in the repository and enforce rules (like Quota).\n\n### Principles\n\nThe QuotaStatsService service provides an extension point to register QuotaStatsUpdater that will be responsible for computing the statistics.\nThe QuotaStatsUpdater will be called:\n\n - via a Synchronous Event Listener\n - in batch mode for initial computation\n\nThe batch mode is triggered via the Admin Center.\n\n### Default contributions\n\nThere are 2 default contributions to QuotaStatsService:\n\n#### documentsCountUpdater\n\nCounts the number non folderish objects and maintain the total number on the parent.\nCount data is stored in a documents_count_statistics.xsd schema that is automatically added to each folderish document during computation.\n\n#### documentsSizeUpdater\n\nComputes Blob size on each item in the content tree.\nEach content item in the tree will have an additional schema documents_size_statistics.xsd that contains:\n\n - the inner size of the object (innerSize): size of all the blobs in this document (in bytes)\n - the total size of the object (totalSize): inner size + size of all the children (in bytes)\n - the allowed maximum total size (maxSize): maximum quota\n\nIf the maxSize is set to -1, then no quota check is performed, otherwise maxSize enforcement is done synchronously.\n\ndocumentsSizeUpdater works in a 2 phases manner:\n\n - synchronously : check what has changed in the document and checks quota\n - asynchronously : update counters on item and all parents\n\nThe synchronous execution that checks Quota will rollback the transaction and raise a QuotaExceededException if the current transaction would break the quota rule.\n\nThe current implementation of documentSizeUpdater:\n\n - handles checks create / update / delete / move / copy\n - takes into accounts the versions (Document with 2 versions will have a total size of inner size + size of the versions).\n\n## Automation API\n\n2 Automation Operations are defined to be able to remotely manage the Quota on a given Document:\n\n - Quotas.GetInfo: to retrieve informations about the Quota Info of a Document (innerSize, totalSize and maxSize)\n - Quotas.SetMaxSize: to define the maximum size allowed in a given Document\n\n# Building\n\n    mvn clean install\n\n## Deploying\n\nInstall [the Nuxeo Quota Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-quota).\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": "7992b4298700b0a4819b0001cbde4384",
        "encoding": "UTF-8",
        "length": 3289,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-importer-stream",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.importer.stream",
      "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/org.nuxeo.importer.stream/org.nuxeo.importer.stream.automation.contrib/Contributions/org.nuxeo.importer.stream.automation.contrib--operations",
              "id": "org.nuxeo.importer.stream.automation.contrib--operations",
              "registrationOrder": 9,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2025.7.12",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"org.nuxeo.importer.stream.automation.RandomBlobProducers\"/>\n    <operation class=\"org.nuxeo.importer.stream.automation.FileBlobProducers\"/>\n    <operation class=\"org.nuxeo.importer.stream.automation.BlobConsumers\"/>\n    <operation class=\"org.nuxeo.importer.stream.automation.RandomDocumentProducers\"/>\n    <operation class=\"org.nuxeo.importer.stream.automation.DocumentConsumers\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.importer.stream/org.nuxeo.importer.stream.automation.contrib",
          "name": "org.nuxeo.importer.stream.automation.contrib",
          "requirements": [],
          "resolutionOrder": 190,
          "services": [],
          "startOrder": 470,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"org.nuxeo.importer.stream.automation.contrib\" version=\"1.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"operations\">\n    <operation class=\"org.nuxeo.importer.stream.automation.RandomBlobProducers\" />\n    <operation class=\"org.nuxeo.importer.stream.automation.FileBlobProducers\" />\n    <operation class=\"org.nuxeo.importer.stream.automation.BlobConsumers\" />\n    <operation class=\"org.nuxeo.importer.stream.automation.RandomDocumentProducers\" />\n    <operation class=\"org.nuxeo.importer.stream.automation.DocumentConsumers\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/operations-contrib.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-importer-stream-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.importer.stream",
      "id": "org.nuxeo.importer.stream",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 1\r\nBundle-SymbolicName: org.nuxeo.importer.stream;singleton:=true\r\nBundle-Name: Nuxeo Importer Stream\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/operations-contrib.xml\r\n\r\n",
      "maxResolutionOrder": 190,
      "minResolutionOrder": 190,
      "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": {
        "blobProviderId": "default",
        "content": "nuxeo-importer-stream\n======================\n\n## About\n\nThis module defines a producer/consumer pattern and uses the Log features provided by Nuxeo Stream.\n\n## Producer/Consumer pattern with automation operations\n\nThe Log is used to perform mass import.\n\nIt decouples the Extraction/Transformation from the Load (using the [ETL](https://en.wikipedia.org/wiki/Extract-transform-load) terminology).\n\nThe extraction and transformation is done by a document message producer with custom logic.\n\nThis module comes with a random document and a random blob generator, that does the same job as the random importer of the `nuxeo-importer-core` module.\n\nThe load into Nuxeo is done with a generic consumer.\n\nAutomation operations are exposed to run producers and consumers.\n\n\n### Two steps import: Generate and Import documents with blobs\n\n1. Run a random producers of document messages, these message represent Folder and File document a blob. The total number of document created is: `nbThreads * nbDocuments`.\n  ```\ncurl -X POST 'http://localhost:8080/nuxeo/site/automation/StreamImporter.runRandomDocumentProducers' -u Administrator:Administrator -H 'content-type: application/json' \\\n  -d '{\"params\":{\"nbDocuments\": 100, \"nbThreads\": 5}}'\n```\n\n| Params| Default | Description |\n| --- | ---: | --- |\n| `nbDocuments` |  | The number of documents to generate per producer thread |\n| `nbThreads` | `8` | The number of concurrent producer to run |\n| `avgBlobSizeKB` | `1` | The average blob size fo each file documents in KB. If set to `0` create File document without blob. |\n| `lang` | `en_US` |The locale used for the generated content, can be `fr_FR` or `en_US` |\n| `logName` | `import/doc` | The name of the Log. |\n| `logSize` | `$nbThreads` |The number of partitions in the Log which will fix the maximum number of consumer threads |\n| `logBlobInfo` |  | A Log name containing blob information to use, see section below for use case |\n\n2. Run consumers of document messages creating Nuxeo documents, the concurrency will match the previous nbThreads producers parameters\n  ```\ncurl -X POST 'http://localhost:8080/nuxeo/site/automation/StreamImporter.runDocumentConsumers' -u Administrator:Administrator -H 'content-type: application/json' \\\n  -d '{\"params\":{\"rootFolder\": \"/default-domain/workspaces\"}}'\n```\n\n| Params| Default | Description |\n| --- | ---: | --- |\n| `rootFolder` |  | The path of the Nuxeo container to import documents, this document must exists |\n| `repositoryName` |  | The repository name used to import documents |\n| `nbThreads` | `logSize` | The number of concurrent consumer, should not be greater than the number of partition in the Log |\n| `batchSize` | `10` | The consumer commit documents every batch size |\n| `batchThresholdS` | `20` | The consumer commit documents if the transaction is longer that this threshold |\n| `retryMax` | `3` | Number of time a consumer retry to import in case of failure |\n| `retryDelayS` | `2` | Delay between retries |\n| `logName` | `import/doc` | The name of the Log to tail |\n| `useBulkMode` | `false` | Process asynchronous listeners in bulk mode |\n| `blockIndexing` | `false` | Do not index created document with Elasticsearch |\n| `blockAsyncListeners` | `false` | Do not process any asynchronous listeners |\n| `blockPostCommitListeners` | `false` | Do not process any post commit listeners |\n| `blockDefaultSyncListeners` | `false` | Disable some default synchronous listeners: dublincore, mimetype, notification, template, binarymetadata and uid |\n\n### 4 steps import: Generate and Import blobs, then Generate and Import documents\n\n1. Run producers of random blob messages\n  ```\ncurl -X POST 'http://localhost:8080/nuxeo/site/automation/StreamImporter.runRandomBlobProducers' -u Administrator:Administrator -H 'content-type: application/json' \\\n  -d '{\"params\":{\"nbBlobs\": 100, \"nbThreads\": 5}}'\n```\n\n| Params| Default | Description |\n| --- | ---: | --- |\n| `nbBlobs` |  | The number of blobs to generate per producer thread |\n| `nbThreads` | `8` | The number of concurrent producer to run |\n| `avgBlobSizeKB` | `1` | The average blob size fo each file documents in KB |\n| `lang` | `en_US` | The locale used for the generated content, can be \"fr_FR\" or \"en_US\" |\n| `logName` | `import/blob` |  The name of the Log to append blobs. |\n| `logSize` | `$nbThreads`| The number of partitions in the Log which will fix the maximum number of consumer threads |\n\n2. Run consumers of blob messages importing into the Nuxeo binary store, saving blob information into a new Log.\n  ```\ncurl -X POST 'http://localhost:8080/nuxeo/site/automation/StreamImporter.runBlobConsumers' -u Administrator:Administrator -H 'content-type: application/json' \\\n  -d '{\"params\":{\"blobProviderName\": \"default\", \"logBlobInfo\": \"blob-info\"}}'\n```\n\n| Params| Default | Description |\n| --- | ---: | --- |\n| `blobProviderName` | `default` | The name of the binary store blob provider |\n| `logName` | `import/blob` | The name of the Log that contains the blob |\n| `logBlobInfo` | `import/blob-info` | The name of the Log to append blob information about imported blobs |\n| `nbThreads` | `$logSize` | The number of concurrent consumer, should not be greater than the number of partitions in the Log |\n| `retryMax` | `3` | Number of time a consumer retry to import in case of failure |\n| `retryDelayS` | `2` | Delay between retries |\n\n3. Run producers of random Nuxeo document messages which use produced blobs created in step 2\n  ```\ncurl -X POST 'http://localhost:8080/nuxeo/site/automation/StreamImporter.runRandomDocumentProducers' -u Administrator:Administrator -H 'content-type: application/json' \\\n  -d '{\"params\":{\"nbDocuments\": 200, \"nbThreads\": 5, \"logBlobInfo\": \"blob-info\"}}'\n```\nSame params listed in the previous previous runRandomDocumentProducers call, here we set the `logBlobInfo` parameter.\n\n4. Run consumers of document messages\n  ```\ncurl -X POST 'http://localhost:8080/nuxeo/site/automation/StreamImporter.runDocumentConsumers' -u Administrator:Administrator -H 'content-type: application/json' \\\n  -d '{\"params\":{\"rootFolder\": \"/default-domain/workspaces\"}}'\n```\n\nSame params listed in the previous previous runDocumentConsumers call.\n\n### Create blobs using existing files\n\nCreate a file containing the list of files to import then:\n\n1. Generate blob messages corresponding to the files, dispatch the messages into 4 partitions:\n  ```\ncurl -X POST 'http://localhost:8080/nuxeo/site/automation/StreamImporter.runFileBlobProducers' -u Administrator:Administrator -H 'content-type: application/json' \\\n  -d '{\"params\":{\"listFile\": \"/tmp/my-file-list.txt\", \"logSize\": 4}}'\n```\n\n| Params| Default | Description |\n| --- | ---: | --- |\n| `listFile` | | The path to the listing file |\n| `basePath` | '' | The base path to use as prefix of each file listed in the `listFile` |\n| `nbBlobs` | 0 | The number of blobs to generate per producer thread, 0 means all entries, loop on `listFile` entries if necessary |\n| `nbThreads` | `1` | The number of concurrent producer to run |\n| `logName` | `import/blob` |  The name of the Log to append blobs. |\n| `logSize` | `$nbThreads`| The number of partitions in the Log which will fix the maximum number of consumer threads |\n\n\nThe you can use the 3 others steps describes the above section to import blobs with 4 threads and create documents.\n\nNote that the type of document will be adapted to the detected mime type of the file so that\n- image file will generate a `Picture` document\n- video file will generate a `Video` document\n- other type will be translated to `File` document\n\n\n### Generate random file for testing purpose\n\nFor testing purpose it can be handy to generate different file from an existing one, the goal is to generate lots of unique files with a limited set of files.\n\nTo do this you need to first generates blob messages pointing to file (see previous section) and choose the `nbBlobs` corresponding to the expected number of blob to import,\n(use a greater number that the existing files).\n\nThe next step is to add some special option to blob consumer so that instead of importing the existing file, a watermark will be\nadded to the blob before importing it.\n\n\n2. Run consumers of blob messages adding watermark to file and importing into the Nuxeo binary store, saving blob information into a new Log.\n  ```\ncurl -X POST 'http://localhost:8080/nuxeo/site/automation/StreamImporter.runBlobConsumers' -u Administrator:Administrator -H 'content-type: application/json' \\\n  -d '{\"params\":{\"watermark\": \"foo\"}}'\n```\n\nThe additional parameters are:\n\n| Params| Default | Description |\n| --- | ---: | --- |\n| `watermark` | | Ask to add a watermark to the file before importing it, use the provided string if possible. |\n| `persistBlobPath` | | Use a path if you want to keep the generated files on disk |\n| `blobProviderName` | `default` | If blank there is no Nuxeo blob import |\n\n\nContinue with other steps described above to generate and create documents.\n\nNote that only few mime type are supported for watermark so far:\n- `text/plain`: Insert a uniq tag at the beginning of text.\n- `image/jpeg`: Set the exif software tag to a uniq tag.\n- `video/mp4`:  Set the title with the uniq tag.\n\n## Building\n\nTo build and run the tests, simply start the Maven build:\n\n    mvn clean install\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": "8cb2b603a318e4e5999cbbe5b0570034",
        "encoding": "UTF-8",
        "length": 9960,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-mail",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.mail",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.mail.MailServiceImpl",
          "declaredStartOrder": null,
          "documentation": "\n    A service to send mails.\n  \n",
          "documentationHtml": "<p>\nA service to send mails.\n</p><p></p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.mail.MailServiceComponent",
              "descriptors": [
                "org.nuxeo.mail.MailSenderDescriptor"
              ],
              "documentation": "\n      Extension point to register mail senders.\n      <p/>\n\n      Senders can be configured with properties.\n      For example:\n      <code>\n    <sender class=\"org.nuxeo.mail.SMTPMailSender\" name=\"default\">\n        <property name=\"from\">foo@bar.baz</property>\n        <property name=\"replyTo\">ping@p.org</property>\n    </sender>\n</code>\n\n\n      The class attribute needs to reference a class implementing org.nuxeo.mail.MailSender.\n    \n",
              "documentationHtml": "<p>\nExtension point to register mail senders.\n</p><p>\nSenders can be configured with properties.\nFor example:\n</p><p></p><pre><code>    &lt;sender class&#61;&#34;org.nuxeo.mail.SMTPMailSender&#34; name&#61;&#34;default&#34;&gt;\n        &lt;property name&#61;&#34;from&#34;&gt;foo&#64;bar.baz&lt;/property&gt;\n        &lt;property name&#61;&#34;replyTo&#34;&gt;ping&#64;p.org&lt;/property&gt;\n    &lt;/sender&gt;\n</code></pre><p>\nThe class attribute needs to reference a class implementing org.nuxeo.mail.MailSender.\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.mail/org.nuxeo.mail.MailServiceComponent/ExtensionPoints/org.nuxeo.mail.MailServiceComponent--senders",
              "id": "org.nuxeo.mail.MailServiceComponent--senders",
              "label": "senders (org.nuxeo.mail.MailServiceComponent)",
              "name": "senders",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.mail/org.nuxeo.mail.MailServiceComponent",
          "name": "org.nuxeo.mail.MailServiceComponent",
          "requirements": [],
          "resolutionOrder": 207,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.mail.MailServiceComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.mail/org.nuxeo.mail.MailServiceComponent/Services/org.nuxeo.mail.MailService",
              "id": "org.nuxeo.mail.MailService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 660,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.mail.MailServiceComponent\" version=\"1.0\">\n  <documentation>\n    A service to send mails.\n  </documentation>\n\n  <service>\n    <provide interface=\"org.nuxeo.mail.MailService\" />\n  </service>\n\n  <implementation class=\"org.nuxeo.mail.MailServiceImpl\" />\n\n  <extension-point name=\"senders\">\n    <documentation>\n      Extension point to register mail senders.\n      <p/>\n      Senders can be configured with properties.\n      For example:\n      <code>\n        <sender name=\"default\" class=\"org.nuxeo.mail.SMTPMailSender\">\n          <property name=\"from\">foo@bar.baz</property>\n          <property name=\"replyTo\">ping@p.org</property>\n        </sender>\n      </code>\n\n      The class attribute needs to reference a class implementing org.nuxeo.mail.MailSender.\n    </documentation>\n\n    <object class=\"org.nuxeo.mail.MailSenderDescriptor\" />\n  </extension-point>\n</component>\n",
          "xmlFileName": "/OSGI-INF/mail-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-mail-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.mail",
      "id": "org.nuxeo.mail",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Name: Nuxeo Mail Services\r\nBundle-SymbolicName: org.nuxeo.mail;singleton:=true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/mail-service.xml\r\n\r\n",
      "maxResolutionOrder": 207,
      "minResolutionOrder": 207,
      "packages": [],
      "parentReadme": null,
      "readme": null,
      "requirements": [],
      "version": "2025.7.12"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-usermapper",
      "artifactVersion": "2025.7.12",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.admin.center",
          "org.nuxeo.binary.metadata",
          "org.nuxeo.directory.mongodb",
          "org.nuxeo.dmk-adaptor",
          "org.nuxeo.ecm.actions",
          "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.audio.core",
          "org.nuxeo.ecm.platform.audit",
          "org.nuxeo.ecm.platform.collections.core",
          "org.nuxeo.ecm.platform.commandline.executor",
          "org.nuxeo.ecm.platform.content.template",
          "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.notification",
          "org.nuxeo.ecm.platform.oauth",
          "org.nuxeo.ecm.platform.oauth1",
          "org.nuxeo.ecm.platform.pdf",
          "org.nuxeo.ecm.platform.preview",
          "org.nuxeo.ecm.platform.publisher",
          "org.nuxeo.ecm.platform.query.api",
          "org.nuxeo.ecm.platform.rendering",
          "org.nuxeo.ecm.platform.search.core",
          "org.nuxeo.ecm.platform.suggestbox.core",
          "org.nuxeo.ecm.platform.tag",
          "org.nuxeo.ecm.platform.thumbnail",
          "org.nuxeo.ecm.platform.types",
          "org.nuxeo.ecm.platform.url",
          "org.nuxeo.ecm.platform.usermanager",
          "org.nuxeo.ecm.platform.userworkspace",
          "org.nuxeo.ecm.quota",
          "org.nuxeo.importer.stream",
          "org.nuxeo.mail",
          "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": "2025.7"
      },
      "bundleId": "org.nuxeo.usermapper",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.usermapper.service.UserMapperComponent",
          "declaredStartOrder": null,
          "documentation": "\n    This component expose a service to help mapping NuxeoPrincipal to\n    userObject provided by an external system.\n\n    The mapping itself is configurable using an extension point.\n\n    Typical use cases include :\n\n    <ul>\n    <li> SSO plugin that are able to do Just In Time provisioning </li>\n    <ul>\n        <li> SAML </li>\n        <li> Shibboleth </li>\n        <li> OpenId </li>\n        <li> Keyloack </li>\n    </ul>\n    <li> User provisioning API (such as SCIM) </li>\n</ul>\n",
          "documentationHtml": "<p>\nThis component expose a service to help mapping NuxeoPrincipal to\nuserObject provided by an external system.\n</p><p>\nThe mapping itself is configurable using an extension point.\n</p><p>\nTypical use cases include :\n</p><p>\n</p><ul><li> SSO plugin that are able to do Just In Time provisioning </li><li><ul><li> SAML </li><li> Shibboleth </li><li> OpenId </li><li> Keyloack </li></ul>\n</li><li> User provisioning API (such as SCIM) </li></ul>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.usermapper.service.UserMapperComponent",
              "descriptors": [
                "org.nuxeo.usermapper.service.UserMapperDescriptor"
              ],
              "documentation": "\n      Allow to contribute mapper classes that will be responsible for\n      handling the mapping in 2 directions :\n\n      <ul>\n    <li> find and update NuxeoPrincipal given a userObject coming from\n          the external system</li>\n    <li> create an external userObject from a NuxeoPrincipal</li>\n</ul>\n\n\n      Here is an example to contribute a custom class :\n      <code>\n    <mapper class=\"org.nuxeo.usermapper.test.dummy.DummyUserMapper\" name=\"javaDummy\">\n        <parameters>\n            <parameter name=\"param1\">value1</parameter>\n        </parameters>\n    </mapper>\n</code>\n\n\n      The contributed class has to implement the UserMapper interface.\n\n      You can also contribute the implementation via a Groovy or JavaScript.\n\n      In this case, simply omit the class attribute and add a script tag:\n\n      <code>\n    <mapper name=\"scim\" type=\"groovy\">\n        <mapperScript><![CDATA[\n          import org.nuxeo.ecm.platform.usermanager.UserManager;\n          import org.nuxeo.runtime.api.Framework;\n\n              UserManager um = Framework.getService(UserManager.class);\n\n              String userId = userObject.getId();\n              if (userId == null || userId.isEmpty()) {\n                userId = userObject.getUserName();\n              }\n\n              searchAttributes.put(um.getUserIdField(), userId);\n\n              if (searchAttributes.containsKey(\"uid\")) {\n                userAttributes.put(um.getUserIdField(), searchAttributes.get(\"uid\"));\n              }\n\n              if (userObject.getEmails() != null && userObject.getEmails().size() > 0) {\n                userAttributes.put(\"email\",userObject.getEmails().iterator().next().getValue());\n              }\n              String displayName = userObject.getDisplayName();\n              if (displayName!=null && !displayName.isEmpty()) {\n                int idx = displayName.indexOf(\" \");\n                if (idx>0) {\n                    userAttributes.put(\"firstName\", displayName.substring(0, idx).trim());\n                    userAttributes.put(\"lastName\", displayName.substring(idx+1).trim());\n                } else {\n                    userAttributes.put(\"firstName\", displayName);\n                    userAttributes.put(\"lastName\", \"\");\n                }\n            }\n            ]]></mapperScript>\n        <wrapperScript><![CDATA[\n          import org.nuxeo.ecm.core.api.DocumentModel;\n          import org.nuxeo.ecm.core.api.NuxeoException;\n          import org.nuxeo.ecm.platform.usermanager.UserManager;\n          import org.nuxeo.runtime.api.Framework;\n\n          import com.unboundid.scim.data.Entry;\n          import com.unboundid.scim.data.GroupResource;\n          import com.unboundid.scim.data.Meta;\n          import com.unboundid.scim.data.Name;\n          import com.unboundid.scim.data.UserResource;\n          import com.unboundid.scim.schema.CoreSchema;\n          import com.unboundid.scim.sdk.SCIMConstants;\n\n              UserManager um = Framework.getService(UserManager.class);\n              DocumentModel userModel = nuxeoPrincipal.getModel();\n              String userId = (String) userModel.getProperty(um.getUserSchemaName(),\n                      um.getUserIdField());\n\n              String fname = (String) userModel.getProperty(um.getUserSchemaName(),\n                      \"firstName\");\n              String lname = (String) userModel.getProperty(um.getUserSchemaName(),\n                      \"lastName\");\n              String email = (String) userModel.getProperty(um.getUserSchemaName(),\n                      \"email\");\n              String company = (String) userModel.getProperty(um.getUserSchemaName(),\n                      \"company\");\n\n              String displayName = fname + \" \" + lname;\n              displayName = displayName.trim();\n              userObject.setDisplayName(displayName);\n              Collection<Entry<String>> emails = new ArrayList<>();\n              if (email!=null) {\n                  emails.add(new Entry<String>(email, \"string\"));\n                  userObject.setEmails(emails);\n              }\n\n              Name fullName = new Name(displayName, lname, \"\", fname, \"\", \"\");\n              userObject.setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE,\n                      \"name\", Name.NAME_RESOLVER, fullName);\n\n              // manage groups\n              List<String> groupIds = um.getPrincipal(userId).getAllGroups();\n              Collection<Entry<String>> groups = new ArrayList<>();\n              for (String groupId : groupIds) {\n                  groups.add(new Entry<String>(groupId, \"string\"));\n              }\n              userObject.setGroups(groups);\n\n              userObject.setActive(true);\n            ]]></wrapperScript>\n    </mapper>\n    <mapper name=\"jsDummy\" type=\"js\">\n        <mapperScript>\n              searchAttributes.put(\"username\", userObject.login);\n              userAttributes.put(\"firstName\", userObject.name.firstName);\n              userAttributes.put(\"lastName\", userObject.name.lastName);\n              profileAttributes.put(\"userprofile:phonenumber\", \"555.666.7777\");\n          </mapperScript>\n    </mapper>\n</code>\n\n\n      In the script context for mapping userObject to NuxeoPrincipal :\n      <ul>\n    <li>\n          userObject : represent the object passed to the\n          <pre>getCreateOrUpdateNuxeoPrincipal</pre>\n          method\n        </li>\n    <li> searchAttributes : is the Map&lt;String,String&gt; that will be used\n          to search the NuxeoPrincipal</li>\n    <li> userAttributes : is the Map&lt;String,String&gt; that will be used\n          to create/update the NuxeoPrincipal</li>\n    <li> profileAttribute : is the Map&lt;String,String&gt; that will be used\n          to update the user's profile</li>\n</ul>\n\n\n\n      In the script context for wrapping a NuxeoPrincipal into a userObject :\n      <ul>\n    <li>\n          userObject : represent the userObject as initialized by the caller code\n        </li>\n    <li> nuxeoPrincipal : is the principal to wrap</li>\n    <li> params : is the Map&lt;String,Serializable&gt; passed by the caller</li>\n</ul>\n",
              "documentationHtml": "<p>\nAllow to contribute mapper classes that will be responsible for\nhandling the mapping in 2 directions :\n</p><p>\n</p><ul><li> find and update NuxeoPrincipal given a userObject coming from\nthe external system</li><li> create an external userObject from a NuxeoPrincipal</li></ul>\n<p>\nHere is an example to contribute a custom class :\n</p><p></p><pre><code>    &lt;mapper class&#61;&#34;org.nuxeo.usermapper.test.dummy.DummyUserMapper&#34; name&#61;&#34;javaDummy&#34;&gt;\n        &lt;parameters&gt;\n            &lt;parameter name&#61;&#34;param1&#34;&gt;value1&lt;/parameter&gt;\n        &lt;/parameters&gt;\n    &lt;/mapper&gt;\n</code></pre><p>\nThe contributed class has to implement the UserMapper interface.\n</p><p>\nYou can also contribute the implementation via a Groovy or JavaScript.\n</p><p>\nIn this case, simply omit the class attribute and add a script tag:\n</p><p>\n</p><pre><code>    &lt;mapper name&#61;&#34;scim&#34; type&#61;&#34;groovy&#34;&gt;\n        &lt;mapperScript&gt;&lt;![CDATA[\n          import org.nuxeo.ecm.platform.usermanager.UserManager;\n          import org.nuxeo.runtime.api.Framework;\n\n              UserManager um &#61; Framework.getService(UserManager.class);\n\n              String userId &#61; userObject.getId();\n              if (userId &#61;&#61; null || userId.isEmpty()) {\n                userId &#61; userObject.getUserName();\n              }\n\n              searchAttributes.put(um.getUserIdField(), userId);\n\n              if (searchAttributes.containsKey(&#34;uid&#34;)) {\n                userAttributes.put(um.getUserIdField(), searchAttributes.get(&#34;uid&#34;));\n              }\n\n              if (userObject.getEmails() !&#61; null &amp;&amp; userObject.getEmails().size() &gt; 0) {\n                userAttributes.put(&#34;email&#34;,userObject.getEmails().iterator().next().getValue());\n              }\n              String displayName &#61; userObject.getDisplayName();\n              if (displayName!&#61;null &amp;&amp; !displayName.isEmpty()) {\n                int idx &#61; displayName.indexOf(&#34; &#34;);\n                if (idx&gt;0) {\n                    userAttributes.put(&#34;firstName&#34;, displayName.substring(0, idx).trim());\n                    userAttributes.put(&#34;lastName&#34;, displayName.substring(idx&#43;1).trim());\n                } else {\n                    userAttributes.put(&#34;firstName&#34;, displayName);\n                    userAttributes.put(&#34;lastName&#34;, &#34;&#34;);\n                }\n            }\n            ]]&gt;&lt;/mapperScript&gt;\n        &lt;wrapperScript&gt;&lt;![CDATA[\n          import org.nuxeo.ecm.core.api.DocumentModel;\n          import org.nuxeo.ecm.core.api.NuxeoException;\n          import org.nuxeo.ecm.platform.usermanager.UserManager;\n          import org.nuxeo.runtime.api.Framework;\n\n          import com.unboundid.scim.data.Entry;\n          import com.unboundid.scim.data.GroupResource;\n          import com.unboundid.scim.data.Meta;\n          import com.unboundid.scim.data.Name;\n          import com.unboundid.scim.data.UserResource;\n          import com.unboundid.scim.schema.CoreSchema;\n          import com.unboundid.scim.sdk.SCIMConstants;\n\n              UserManager um &#61; Framework.getService(UserManager.class);\n              DocumentModel userModel &#61; nuxeoPrincipal.getModel();\n              String userId &#61; (String) userModel.getProperty(um.getUserSchemaName(),\n                      um.getUserIdField());\n\n              String fname &#61; (String) userModel.getProperty(um.getUserSchemaName(),\n                      &#34;firstName&#34;);\n              String lname &#61; (String) userModel.getProperty(um.getUserSchemaName(),\n                      &#34;lastName&#34;);\n              String email &#61; (String) userModel.getProperty(um.getUserSchemaName(),\n                      &#34;email&#34;);\n              String company &#61; (String) userModel.getProperty(um.getUserSchemaName(),\n                      &#34;company&#34;);\n\n              String displayName &#61; fname &#43; &#34; &#34; &#43; lname;\n              displayName &#61; displayName.trim();\n              userObject.setDisplayName(displayName);\n              Collection&lt;Entry&lt;String&gt;&gt; emails &#61; new ArrayList&lt;&gt;();\n              if (email!&#61;null) {\n                  emails.add(new Entry&lt;String&gt;(email, &#34;string&#34;));\n                  userObject.setEmails(emails);\n              }\n\n              Name fullName &#61; new Name(displayName, lname, &#34;&#34;, fname, &#34;&#34;, &#34;&#34;);\n              userObject.setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE,\n                      &#34;name&#34;, Name.NAME_RESOLVER, fullName);\n\n              // manage groups\n              List&lt;String&gt; groupIds &#61; um.getPrincipal(userId).getAllGroups();\n              Collection&lt;Entry&lt;String&gt;&gt; groups &#61; new ArrayList&lt;&gt;();\n              for (String groupId : groupIds) {\n                  groups.add(new Entry&lt;String&gt;(groupId, &#34;string&#34;));\n              }\n              userObject.setGroups(groups);\n\n              userObject.setActive(true);\n            ]]&gt;&lt;/wrapperScript&gt;\n    &lt;/mapper&gt;\n    &lt;mapper name&#61;&#34;jsDummy&#34; type&#61;&#34;js&#34;&gt;\n        &lt;mapperScript&gt;\n              searchAttributes.put(&#34;username&#34;, userObject.login);\n              userAttributes.put(&#34;firstName&#34;, userObject.name.firstName);\n              userAttributes.put(&#34;lastName&#34;, userObject.name.lastName);\n              profileAttributes.put(&#34;userprofile:phonenumber&#34;, &#34;555.666.7777&#34;);\n          &lt;/mapperScript&gt;\n    &lt;/mapper&gt;\n</code></pre><p>\nIn the script context for mapping userObject to NuxeoPrincipal :\n</p><ul><li>\nuserObject : represent the object passed to the\n<pre>getCreateOrUpdateNuxeoPrincipal</pre>\nmethod\n</li><li> searchAttributes : is the Map&lt;String,String&gt; that will be used\nto search the NuxeoPrincipal</li><li> userAttributes : is the Map&lt;String,String&gt; that will be used\nto create/update the NuxeoPrincipal</li><li> profileAttribute : is the Map&lt;String,String&gt; that will be used\nto update the user&#39;s profile</li></ul>\n<p>\nIn the script context for wrapping a NuxeoPrincipal into a userObject :\n</p><ul><li>\nuserObject : represent the userObject as initialized by the caller code\n</li><li> nuxeoPrincipal : is the principal to wrap</li><li> params : is the Map&lt;String,Serializable&gt; passed by the caller</li></ul>",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.usermapper/org.nuxeo.usermapper.service.UserMapperComponent/ExtensionPoints/org.nuxeo.usermapper.service.UserMapperComponent--mapper",
              "id": "org.nuxeo.usermapper.service.UserMapperComponent--mapper",
              "label": "mapper (org.nuxeo.usermapper.service.UserMapperComponent)",
              "name": "mapper",
              "version": "2025.7.12"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.usermapper/org.nuxeo.usermapper.service.UserMapperComponent",
          "name": "org.nuxeo.usermapper.service.UserMapperComponent",
          "requirements": [
            "org.nuxeo.automation.scripting.internals.AutomationScriptingComponent"
          ],
          "resolutionOrder": 665,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.usermapper.service.UserMapperComponent",
              "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.usermapper/org.nuxeo.usermapper.service.UserMapperComponent/Services/org.nuxeo.usermapper.service.UserMapperService",
              "id": "org.nuxeo.usermapper.service.UserMapperService",
              "overriden": false,
              "version": "2025.7.12"
            }
          ],
          "startOrder": 677,
          "version": "2025.7.12",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n\n<component name=\"org.nuxeo.usermapper.service.UserMapperComponent\"\n  version=\"1.0\">\n\n  <implementation class=\"org.nuxeo.usermapper.service.UserMapperComponent\" />\n\n  <service>\n    <provide interface=\"org.nuxeo.usermapper.service.UserMapperService\" />\n  </service>\n\n  <require>org.nuxeo.automation.scripting.internals.AutomationScriptingComponent</require>\n\n  <documentation>\n    This component expose a service to help mapping NuxeoPrincipal to\n    userObject provided by an external system.\n\n    The mapping itself is configurable using an extension point.\n\n    Typical use cases include :\n\n    <ul>\n      <li> SSO plugin that are able to do Just In Time provisioning </li>\n      <ul>\n        <li> SAML </li>\n        <li> Shibboleth </li>\n        <li> OpenId </li>\n        <li> Keyloack </li>\n      </ul>\n      <li> User provisioning API (such as SCIM) </li>\n    </ul>\n  </documentation>\n\n\n  <extension-point name=\"mapper\">\n    <documentation>\n      Allow to contribute mapper classes that will be responsible for\n      handling the mapping in 2 directions :\n\n      <ul>\n        <li> find and update NuxeoPrincipal given a userObject coming from\n          the external system</li>\n        <li> create an external userObject from a NuxeoPrincipal</li>\n      </ul>\n\n      Here is an example to contribute a custom class :\n      <code>\n\n        <mapper name=\"javaDummy\"\n          class=\"org.nuxeo.usermapper.test.dummy.DummyUserMapper\">\n          <parameters>\n            <parameter name=\"param1\">value1</parameter>\n          </parameters>\n        </mapper>\n\n      </code>\n\n      The contributed class has to implement the UserMapper interface.\n\n      You can also contribute the implementation via a Groovy or JavaScript.\n\n      In this case, simply omit the class attribute and add a script tag:\n\n      <code>\n\n        <mapper name=\"scim\" type=\"groovy\">\n          <mapperScript>\n              <![CDATA[\n          import org.nuxeo.ecm.platform.usermanager.UserManager;\n          import org.nuxeo.runtime.api.Framework;\n\n              UserManager um = Framework.getService(UserManager.class);\n\n              String userId = userObject.getId();\n              if (userId == null || userId.isEmpty()) {\n                userId = userObject.getUserName();\n              }\n\n              searchAttributes.put(um.getUserIdField(), userId);\n\n              if (searchAttributes.containsKey(\"uid\")) {\n                userAttributes.put(um.getUserIdField(), searchAttributes.get(\"uid\"));\n              }\n\n              if (userObject.getEmails() != null && userObject.getEmails().size() > 0) {\n                userAttributes.put(\"email\",userObject.getEmails().iterator().next().getValue());\n              }\n              String displayName = userObject.getDisplayName();\n              if (displayName!=null && !displayName.isEmpty()) {\n                int idx = displayName.indexOf(\" \");\n                if (idx>0) {\n                    userAttributes.put(\"firstName\", displayName.substring(0, idx).trim());\n                    userAttributes.put(\"lastName\", displayName.substring(idx+1).trim());\n                } else {\n                    userAttributes.put(\"firstName\", displayName);\n                    userAttributes.put(\"lastName\", \"\");\n                }\n            }\n            ]]>\n              </mapperScript>\n\n        <wrapperScript>\n              <![CDATA[\n          import org.nuxeo.ecm.core.api.DocumentModel;\n          import org.nuxeo.ecm.core.api.NuxeoException;\n          import org.nuxeo.ecm.platform.usermanager.UserManager;\n          import org.nuxeo.runtime.api.Framework;\n\n          import com.unboundid.scim.data.Entry;\n          import com.unboundid.scim.data.GroupResource;\n          import com.unboundid.scim.data.Meta;\n          import com.unboundid.scim.data.Name;\n          import com.unboundid.scim.data.UserResource;\n          import com.unboundid.scim.schema.CoreSchema;\n          import com.unboundid.scim.sdk.SCIMConstants;\n\n              UserManager um = Framework.getService(UserManager.class);\n              DocumentModel userModel = nuxeoPrincipal.getModel();\n              String userId = (String) userModel.getProperty(um.getUserSchemaName(),\n                      um.getUserIdField());\n\n              String fname = (String) userModel.getProperty(um.getUserSchemaName(),\n                      \"firstName\");\n              String lname = (String) userModel.getProperty(um.getUserSchemaName(),\n                      \"lastName\");\n              String email = (String) userModel.getProperty(um.getUserSchemaName(),\n                      \"email\");\n              String company = (String) userModel.getProperty(um.getUserSchemaName(),\n                      \"company\");\n\n              String displayName = fname + \" \" + lname;\n              displayName = displayName.trim();\n              userObject.setDisplayName(displayName);\n              Collection<Entry<String>> emails = new ArrayList<>();\n              if (email!=null) {\n                  emails.add(new Entry<String>(email, \"string\"));\n                  userObject.setEmails(emails);\n              }\n\n              Name fullName = new Name(displayName, lname, \"\", fname, \"\", \"\");\n              userObject.setSingularAttributeValue(SCIMConstants.SCHEMA_URI_CORE,\n                      \"name\", Name.NAME_RESOLVER, fullName);\n\n              // manage groups\n              List<String> groupIds = um.getPrincipal(userId).getAllGroups();\n              Collection<Entry<String>> groups = new ArrayList<>();\n              for (String groupId : groupIds) {\n                  groups.add(new Entry<String>(groupId, \"string\"));\n              }\n              userObject.setGroups(groups);\n\n              userObject.setActive(true);\n            ]]>\n        </wrapperScript>\n    </mapper>\n\n\n    <mapper name=\"jsDummy\" type=\"js\">\n          <mapperScript>\n              searchAttributes.put(\"username\", userObject.login);\n              userAttributes.put(\"firstName\", userObject.name.firstName);\n              userAttributes.put(\"lastName\", userObject.name.lastName);\n              profileAttributes.put(\"userprofile:phonenumber\", \"555.666.7777\");\n          </mapperScript>\n      </mapper>\n\n    </code>\n\n      In the script context for mapping userObject to NuxeoPrincipal :\n      <ul>\n        <li>\n          userObject : represent the object passed to the\n          <pre>getCreateOrUpdateNuxeoPrincipal</pre>\n          method\n        </li>\n        <li> searchAttributes : is the Map&lt;String,String&gt; that will be used\n          to search the NuxeoPrincipal</li>\n        <li> userAttributes : is the Map&lt;String,String&gt; that will be used\n          to create/update the NuxeoPrincipal</li>\n        <li> profileAttribute : is the Map&lt;String,String&gt; that will be used\n          to update the user's profile</li>\n\n      </ul>\n\n\n      In the script context for wrapping a NuxeoPrincipal into a userObject :\n      <ul>\n        <li>\n          userObject : represent the userObject as initialized by the caller code\n        </li>\n        <li> nuxeoPrincipal : is the principal to wrap</li>\n        <li> params : is the Map&lt;String,Serializable&gt; passed by the caller</li>\n      </ul>\n\n    </documentation>\n\n    <object class=\"org.nuxeo.usermapper.service.UserMapperDescriptor\" />\n  </extension-point>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/usermapper-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-usermapper-2025.7.12.jar",
      "groupId": "org.nuxeo.ecm.platform",
      "hierarchyPath": "/grp:org.nuxeo.ecm.platform/org.nuxeo.usermapper",
      "id": "org.nuxeo.usermapper",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nCreated-By: Maven JAR Plugin 3.4.2\r\nBuild-Jdk-Spec: 21\r\nBundle-ManifestVersion: 2\r\nBundle-Vendor: Nuxeo\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Name: org.nuxeo.usermapper\r\nNuxeo-Component: OSGI-INF/usermapper-service.xml\r\nBundle-SymbolicName: org.nuxeo.usermapper\r\n\r\n",
      "maxResolutionOrder": 665,
      "minResolutionOrder": 665,
      "packages": [
        "shibboleth-authentication"
      ],
      "parentReadme": null,
      "readme": {
        "blobProviderId": "default",
        "content": "nuxeo-usermapper\n==========================\n\n## Principles\n\n### Use cases\n\nWe currently have several places where we need to Create/Update a Nuxeo User (and possibly groups) from data provided by an external system.\n\nThis can typically be :\n\n - an Authentication plugin that handles Just In Time user provisioning\n     - Shibboleth\n     - SAML\n     - OpenId\n     - Jboss Keycloak\n - a provisioning API like [SCIM](http://www.simplecloud.info/)\n\nThe goal of this module is double :\n\n - avoid duplicated code in several modules\n - make the mapping pluggable\n\n### UserMapper Service\n\n#### Configurable mapping\n\nOf course, we need the mapping to be configurable, but unfortunately, the source object is different depending on the source : SAML user, Shibboleth user, SCIM user.\n\nIdeally, we would like to rely on a key value system (i.e. see user and group as a Map) with simple mapping, but :\n\n - SCIM Model is more complex than simple Key/Value\n - some time we need to compute some attributes (like : FullName = FirstName + LastName)\n\nFor this reason, the mapping can be contributed :\n\n - as a Java Class\n - as Groovy Scriptlets\n - as JavaScript\n\n#### 2 Ways mapping\n\nAt least for SCIM use cases, the Service needs to handle 2 ways :\n\n     NuxeoPrincipal getOrCreateAndUpdateNuxeoPrincipal(Object userObject, boolean createIfNeeded, boolean update,\n            Map<String, Serializable> params);\n\nThis API will be used to create / update a Nuxeo Principal based on SCIM user object.\n\n     Object wrapNuxeoPrincipal(NuxeoPrincipal principal, Object nativePrincipal, Map<String, Serializable> params);\n\nGet the SCIM representation of a Nuxeo User.\n\n#### Contributing new mapping\n\nThe component expose a `mapper` extension point that can be used to contribute new mappers.\n\nUsing plain Java Code :\n\n    <mapper name=\"javaDummy\" class=\"org.nuxeo.usermapper.test.dummy.DummyUserMapper\">\n       <parameters>\n         <param name=\"param1\">value1</param>\n       </parameters>\n    </mapper>\n\nUsing Groovy Scriptlet :\n\n    <mapper name=\"scim\" type=\"groovy\">\n      <mapperScript>\n      <![CDATA[\n          import org.nuxeo.ecm.platform.usermanager.UserManager;\n          import org.nuxeo.runtime.api.Framework;\n\n          UserManager um = Framework.getService(UserManager.class);\n\n          String userId = userObject.getId();\n          if (userId == null || userId.isEmpty()) {\n            userId = userObject.getUserName();\n          }\n          ...\n        ]]>\n      </mapperScript>\n\n      <wrapperScript>\n        <![CDATA[\n          import org.nuxeo.ecm.core.api.DocumentModel;\n          import org.nuxeo.ecm.core.api.NuxeoException;\n          import org.nuxeo.ecm.platform.usermanager.UserManager;\n          import org.nuxeo.runtime.api.Framework;\n\n          UserManager um = Framework.getService(UserManager.class);\n          DocumentModel userModel = nuxeoPrincipal.getModel();\n          ...\n        ]]>\n      </wrapperScript>\n    </mapper>\n\nUsing JavaScript :\n\n    <mapper name=\"jsDummy\" type=\"js\">\n      <mapperScript>\n          searchAttributes.put(\"username\", userObject.login);\n          userAttributes.put(\"firstName\", userObject.name.firstName);\n          userAttributes.put(\"lastName\", userObject.name.lastName);\n          profileAttributes.put(\"userprofile:phonenumber\", \"555.666.7777\");\n       </mapperScript>\n     </mapper>\n\n**mapperScript**\n\nIn the script context for mapping userObject to NuxeoPrincipal (i.e. `mapperScript` tag corresponding to the `getOrCreateAndUpdateNuxeoPrincipal`)\n\n - userObject : represent the object passed to the\n - searchAttributes : is the Map&lt;String, String&gt; that will be used to search the NuxeoPrincipal\n - userAttributes : is the Map&lt;String, String&gt; that will be used to create/update the NuxeoPrincipal\n - profileAttribute : is the Map&lt;String, String&gt; that will be used to update the user's profile\n\n**wrapperScript**\n\nIn the script context for wrapping a NuxeoPrincipal into a userObject (i.e. `wrapperScript` tag corresponding to the `wrapNuxeoPrincipal` method) :\n\n - userObject : represent the userObject as initialized by the caller code\n - nuxeoPrincipal : is the principal to wrap\n - params : is the Map&lt;String, Serializable&gt; passed by the caller\n\n## Building / Install\n\nBuild :\n\n    mvn clean install\n",
        "digest": "18dd5a4d8f9fa9beeb55c791c05d30bd",
        "encoding": "UTF-8",
        "length": 4274,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2025.7.12"
    }
  ],
  "creationDate": 1756719801434,
  "key": "Nuxeo Platform-2025.7",
  "name": "Nuxeo Platform",
  "operations": [
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "com.nuxeo.ecm.arender.content.redaction",
      "description": "Save the redacted blob to a copy of the original document.",
      "hierarchyPath": "/op:ARenderRedactCompletion",
      "label": "Save the redacted blob",
      "name": "ARenderRedactCompletion",
      "operationClass": "com.nuxeo.ecm.arender.core.ARenderRedactCompletion",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "originalDoc",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nbRedactions",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "document"
      ],
      "since": null,
      "url": "ARenderRedactCompletion",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Retrieve list of available actions for a given category. Action context is built based on the Operation context (currentDocument will be fetched from Context if not provided as input). If this operation is executed in a chain that initialized the Seam context, it will be used for Action context",
      "hierarchyPath": "/op:Actions.GET",
      "label": "List available actions",
      "name": "Actions.GET",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.GetActions",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "category",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob",
        "document",
        "blob"
      ],
      "since": null,
      "url": "Actions.GET",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": null,
      "hierarchyPath": "/op:AttachFiles",
      "label": "AttachFiles",
      "name": "AttachFiles",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "bloblist",
        "document",
        "blob",
        "document"
      ],
      "since": null,
      "url": "AttachFiles",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Audit.Log"
      ],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Log events into audit for each of the input document. The operation accept as input one ore more documents that are returned back as the output.",
      "hierarchyPath": "/op:Audit.LogEvent",
      "label": "Log Event In Audit",
      "name": "Audit.LogEvent",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.AuditLog",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "event",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "AuditEvent"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "category",
          "order": 0,
          "type": "string",
          "values": [
            "Automation"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "comment",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "TextArea"
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Audit.LogEvent",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Audit.PageProvider"
      ],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Perform a query or a named provider query against Audit logs. Result is paginated. The query result will become the input for the next operation. If no query or provider name is given, a query based on default Audit page provider will be executed.",
      "hierarchyPath": "/op:Audit.QueryWithPageProvider",
      "label": "Audit Query With Page Provider",
      "name": "Audit.QueryWithPageProvider",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.AuditPageProviderOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "currentPageIndex",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "language",
          "order": 0,
          "type": "string",
          "values": [
            "NXQL"
          ],
          "widget": "Option"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "namedQueryParams",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pageSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "providerName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "query",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "queryParams",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort by properties (separated by comma)",
          "isRequired": false,
          "name": "sortBy",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort order, ASC or DESC",
          "isRequired": false,
          "name": "sortOrder",
          "order": 0,
          "type": "string",
          "values": [
            "ASC",
            "DESC"
          ],
          "widget": "Option"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "paginable"
      ],
      "since": null,
      "url": "Audit.QueryWithPageProvider",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Restore log entries from an audit storage implementation to the audit backend.",
      "hierarchyPath": "/op:Audit.Restore",
      "label": "Restore log entries",
      "name": "Audit.Restore",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.AuditRestore",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "auditStorage",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "batchSize",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "keepAlive",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Audit.Restore",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Login As the given user. If no user is given a system login is performed. This is a void operations - the input will be returned back as the output.",
      "hierarchyPath": "/op:Auth.LoginAs",
      "label": "Login As",
      "name": "Auth.LoginAs",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.login.LoginAs",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void",
        "document",
        "document"
      ],
      "since": null,
      "url": "Auth.LoginAs",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Perform a logout. This should be used only after using the Login As operation to restore original login. This is a void operations - the input will be returned back as the output.",
      "hierarchyPath": "/op:Auth.Logout",
      "label": "Logout",
      "name": "Auth.Logout",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.login.Logout",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void",
        "document",
        "document"
      ],
      "since": null,
      "url": "Auth.Logout",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.Attach"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Attach the input file to the document given as a parameter. If the xpath points to a blob list then the blob is appended to the list, otherwise the xpath should point to a blob property. If the save parameter is set the document modification will be automatically saved. Return the blob.",
      "hierarchyPath": "/op:Blob.AttachOnDocument",
      "label": "Attach File",
      "name": "Blob.AttachOnDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.AttachBlob",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "document",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "bloblist",
        "blob",
        "blob"
      ],
      "since": null,
      "url": "Blob.AttachOnDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Prepare a Zip of a list of documents.",
      "hierarchyPath": "/op:Blob.BulkDownload",
      "label": "Bulk Download",
      "name": "Blob.BulkDownload",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.BulkDownload",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "filename",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "documents",
        "blob"
      ],
      "since": null,
      "url": "Blob.BulkDownload",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Given a File document holding a pdf on the file:content property and 2 pdfs on the files:files property, the following operation will provide a pdf that is the result of the merge of all the pdfs, with the content of the one in file:content property first.",
      "hierarchyPath": "/op:Blob.ConcatenatePDFs",
      "label": "Concatenate PDFs",
      "name": "Blob.ConcatenatePDFs",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.ConcatenatePDFs",
      "params": [
        {
          "description": "The merge pdf result filename.",
          "isRequired": true,
          "name": "filename",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Optional blob reference in context to append in first place.",
          "isRequired": false,
          "name": "blob_to_append",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "blob",
        "blob",
        "blob"
      ],
      "since": null,
      "url": "Blob.ConcatenatePDFs",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Convert the input file to a file of the given mime-type and return the new file.",
      "hierarchyPath": "/op:Blob.Convert",
      "label": "Convert to given mime-type",
      "name": "Blob.Convert",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.ConvertBlob",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "mimeType",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "bloblist",
        "blob",
        "blob",
        "document",
        "blob"
      ],
      "since": "5.7",
      "url": "Blob.Convert",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.Create"
      ],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Creates a file from a given URL. The file parameter specifies how to retrieve the file content. It should be an URL to the file you want to use as the source. You can also use an expression to get an URL from the context. Returns the created file.",
      "hierarchyPath": "/op:Blob.CreateFromURL",
      "label": "File From URL",
      "name": "Blob.CreateFromURL",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.CreateBlob",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "file",
          "order": 0,
          "type": "resource",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "encoding",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "filename",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "mime-type",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Blob.CreateFromURL",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Creates a zip file from the input file(s). If no file name is given, the first file name in the input will be used. Returns the zip file.",
      "hierarchyPath": "/op:Blob.CreateZip",
      "label": "Zip",
      "name": "Blob.CreateZip",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.CreateZip",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "filename",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "blob",
        "blob",
        "blob"
      ],
      "since": null,
      "url": "Blob.CreateZip",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.ToFile"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Save the input blob(s) as a file(s) into the given target directory. The blob(s) filename is used as the file name. You can specify an optional <b>prefix</b> string to prepend to the file name. Return back the blob(s).",
      "hierarchyPath": "/op:Blob.ExportToFS",
      "label": "Export to File",
      "name": "Blob.ExportToFS",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.BlobToFile",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "directory",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "prefix",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist"
      ],
      "since": null,
      "url": "Blob.ExportToFS",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.Post"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Post the input file to a target HTTP URL. Returns back the input file.",
      "hierarchyPath": "/op:Blob.PostToURL",
      "label": "HTTP Post",
      "name": "Blob.PostToURL",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.PostBlob",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "url",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist"
      ],
      "since": null,
      "url": "Blob.PostToURL",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Binary.ReadMetadata"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.binary.metadata",
      "description": "Read Metadata From Binary with the default Nuxeo processor.",
      "hierarchyPath": "/op:Blob.ReadMetadata",
      "label": "Read Metadata From Binary",
      "name": "Blob.ReadMetadata",
      "operationClass": "org.nuxeo.binary.metadata.internals.operations.ReadMetadataFromBinary",
      "params": [
        {
          "description": "Ignore metadata prefixes or not",
          "isRequired": false,
          "name": "ignorePrefix",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "map"
      ],
      "since": "7.1",
      "url": "Blob.ReadMetadata",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.Remove"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Remove the file attached to the input document as specified by the 'xpath' parameter. If the 'xpath' point to a blob list then the list will be cleared. If the file to remove is part of a list it will be removed from the list otherwise the 'xpath' should point to a blob property that will be removed. If the save parameter is set the document modification will be automatically saved. Return the document.",
      "hierarchyPath": "/op:Blob.RemoveFromDocument",
      "label": "Remove File",
      "name": "Blob.RemoveFromDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.RemoveDocumentBlob",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Blob.RemoveFromDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Simply call a converter based on the 'converter' parameter. You can pass the converter properties with the 'properties' parameter.",
      "hierarchyPath": "/op:Blob.RunConverter",
      "label": "Blob.RunConverter",
      "name": "Blob.RunConverter",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.RunConverter",
      "params": [
        {
          "description": "The name of the converter to call",
          "isRequired": true,
          "name": "converter",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "The converter parameters to pass",
          "isRequired": false,
          "name": "parameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob"
      ],
      "since": "7.1",
      "url": "Blob.RunConverter",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Binary.WriteMetadataFromContext"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.binary.metadata",
      "description": "Write Metadata To Blob From Context given a processor name (or the default Nuxeo one) and given metadata, and return the updated Blob.",
      "hierarchyPath": "/op:Blob.SetMetadataFromContext",
      "label": "Write Metadata To Blob From Context",
      "name": "Blob.SetMetadataFromContext",
      "operationClass": "org.nuxeo.binary.metadata.internals.operations.WriteMetadataToBinaryFromContext",
      "params": [
        {
          "description": "Metadata to write into the input blob.",
          "isRequired": true,
          "name": "metadata",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": "Ignore metadata prefixes or not",
          "isRequired": false,
          "name": "ignorePrefix",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "The processor to execute for overriding the input blob.",
          "isRequired": false,
          "name": "processor",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob"
      ],
      "since": "7.1",
      "url": "Blob.SetMetadataFromContext",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Binary.WriteMetadataFromDocument"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.binary.metadata",
      "description": "Write metadata to a Blob (xpath parameter, or BlobHolder if empty) from a document (input) given a custom metadata mapping defined in a Properties parameter, using a named processor (exifTool for instance).",
      "hierarchyPath": "/op:Blob.SetMetadataFromDocument",
      "label": "Write Metadata To Binary From Document",
      "name": "Blob.SetMetadataFromDocument",
      "operationClass": "org.nuxeo.binary.metadata.internals.operations.WriteMetadataToBinaryFromDocument",
      "params": [
        {
          "description": "Metadata to write into the input document blob.",
          "isRequired": true,
          "name": "metadata",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": "The blob xpath on the document. Default blob property for empty parameter.",
          "isRequired": false,
          "name": "blobXPath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Ignore metadata prefixes or not",
          "isRequired": false,
          "name": "ignorePrefix",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "The processor to execute for overriding the input document blob.",
          "isRequired": false,
          "name": "processor",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document"
      ],
      "since": "7.1",
      "url": "Blob.SetMetadataFromDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Convert the input file to a PDF and return the new file.",
      "hierarchyPath": "/op:Blob.ToPDF",
      "label": "Convert To PDF",
      "name": "Blob.ToPDF",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.BlobToPDF",
      "params": [],
      "requires": null,
      "signature": [
        "bloblist",
        "bloblist",
        "blob",
        "blob",
        "document",
        "blob"
      ],
      "since": null,
      "url": "Blob.ToPDF",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "BlobHolder.Attach"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Attach the input file(s) to the current document using the BlobHolder abstraction",
      "hierarchyPath": "/op:BlobHolder.AttachOnCurrentDocument",
      "label": "Attach File or files to the currentDocument.",
      "name": "BlobHolder.AttachOnCurrentDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.BlobHolderAttach",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "useMainBlob",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "document",
        "blob",
        "document"
      ],
      "since": null,
      "url": "BlobHolder.AttachOnCurrentDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Run a bulk action on a set of documents expressed by a NXQL.",
      "hierarchyPath": "/op:Bulk.RunAction",
      "label": "Run a bulk command",
      "name": "Bulk.RunAction",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.bulk.BulkRunAction",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "action",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "batchSize",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "bucketSize",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "excludeDocs",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Named parameters to pass to the page provider to fill in query variables.",
          "isRequired": false,
          "name": "namedParameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "parameters",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "providerName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "query",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "queryLimit",
          "order": 0,
          "type": "long",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "queryParams",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Quick filter properties (separated by comma)",
          "isRequired": false,
          "name": "quickFilters",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "repositoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "bulkstatus"
      ],
      "since": null,
      "url": "Bulk.RunAction",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Wait until Bulk computation is done. This operation is meant to be used for tests. Its usage in production is not recommended.",
      "hierarchyPath": "/op:Bulk.WaitForAction",
      "label": "Wait for Bulk computation",
      "name": "Bulk.WaitForAction",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.bulk.BulkWaitForAction",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "commandId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "timeoutSecond",
          "order": 0,
          "type": "long",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "boolean"
      ],
      "since": "10.2",
      "url": "Bulk.WaitForAction",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Business",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "This operation map pojo client side to document adapter server side and create NX document assuming that pojo and adapter have both properties in common.",
      "hierarchyPath": "/op:Business.BusinessCreateOperation",
      "label": "BusinessCreateOperation",
      "name": "Business.BusinessCreateOperation",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.business.BusinessCreateOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "parentPath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "businessadapter",
        "businessadapter"
      ],
      "since": null,
      "url": "Business.BusinessCreateOperation",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Business",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "This operation map pojo client side to document adapter server side and fetch the related NX document.",
      "hierarchyPath": "/op:Business.BusinessFetchOperation",
      "label": "BusinessFetchOperation",
      "name": "Business.BusinessFetchOperation",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.business.BusinessFetchOperation",
      "params": [],
      "requires": null,
      "signature": [
        "businessadapter",
        "businessadapter"
      ],
      "since": null,
      "url": "Business.BusinessFetchOperation",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Business",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "This operation map pojo client side to document adapter server side and update the related NX document.",
      "hierarchyPath": "/op:Business.BusinessUpdateOperation",
      "label": "BusinessUpdateOperation",
      "name": "Business.BusinessUpdateOperation",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.business.BusinessUpdateOperation",
      "params": [],
      "requires": null,
      "signature": [
        "businessadapter",
        "businessadapter"
      ],
      "since": null,
      "url": "Business.BusinessUpdateOperation",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.csv.core.operation.contrib",
      "description": null,
      "hierarchyPath": "/op:CSV.Import",
      "label": "CSVImport",
      "name": "CSV.Import",
      "operationClass": "org.nuxeo.ecm.csv.core.operation.CSVImportOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "path",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "documentMode",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "sendReport",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "trim",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "string"
      ],
      "since": null,
      "url": "CSV.Import",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.csv.core.operation.contrib",
      "description": null,
      "hierarchyPath": "/op:CSV.ImportLog",
      "label": "CSVImportLog",
      "name": "CSV.ImportLog",
      "operationClass": "org.nuxeo.ecm.csv.core.operation.CSVImportLogOperation",
      "params": [],
      "requires": null,
      "signature": [
        "string",
        "list"
      ],
      "since": null,
      "url": "CSV.ImportLog",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.csv.core.operation.contrib",
      "description": null,
      "hierarchyPath": "/op:CSV.ImportResult",
      "label": "CSVImportResults",
      "name": "CSV.ImportResult",
      "operationClass": "org.nuxeo.ecm.csv.core.operation.CSVImportResultOperation",
      "params": [],
      "requires": null,
      "signature": [
        "string",
        "csvimportresult"
      ],
      "since": null,
      "url": "CSV.ImportResult",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.csv.core.operation.contrib",
      "description": null,
      "hierarchyPath": "/op:CSV.ImportStatus",
      "label": "CSVImportStatus",
      "name": "CSV.ImportStatus",
      "operationClass": "org.nuxeo.ecm.csv.core.operation.CSVImportStatusOperation",
      "params": [],
      "requires": null,
      "signature": [
        "string",
        "csvimportstatus"
      ],
      "since": null,
      "url": "CSV.ImportStatus",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Collection.CreateCollection"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Create a new collection. This is returning the document serialization of the created collection.",
      "hierarchyPath": "/op:Collection.Create",
      "label": "Create a collection",
      "name": "Collection.Create",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.CreateCollectionOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "description",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "document",
        "document",
        "document"
      ],
      "since": null,
      "url": "Collection.Create",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Get the list of documents visible by the currentUser in a collection. This is returning a list of documents.",
      "hierarchyPath": "/op:Collection.GetDocumentsFromCollection",
      "label": "Get documents from collection",
      "name": "Collection.GetDocumentsFromCollection",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.GetDocumentsFromCollectionOperation",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "documents"
      ],
      "since": null,
      "url": "Collection.GetDocumentsFromCollection",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Remove a list of documents from a collection. No value is returned.",
      "hierarchyPath": "/op:Collection.RemoveFromCollection",
      "label": "Remove from collection",
      "name": "Collection.RemoveFromCollection",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.RemoveFromCollectionOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "collection",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Collection.RemoveFromCollection",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Get the collection list accessible by the current user. This is returning a blob containing a serialized JSON array..",
      "hierarchyPath": "/op:Collection.Suggestion",
      "label": "Get collection suggestion",
      "name": "Collection.Suggestion",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.SuggestCollectionEntry",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "currentPageIndex",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pageSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "searchTerm",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Collection.Suggestion",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.platform.comment.workflow.operation.contrib",
      "description": "Follow publish if accept is true, reject otherwise.",
      "hierarchyPath": "/op:Comment.Moderate",
      "label": "Follow publish or reject transition",
      "name": "Comment.Moderate",
      "operationClass": "org.nuxeo.ecm.platform.comment.workflow.ModerateCommentOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "accept",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Comment.Moderate",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Fetch the input of the context as a document or list of documents. The document will become the input for the next operation.",
      "hierarchyPath": "/op:Context.FetchDocument",
      "label": "Context Document(s)",
      "name": "Context.FetchDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.FetchContextDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Context.FetchDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Fetch the input of the context as a file or list of files. The file(s) will become the input for the next operation.",
      "hierarchyPath": "/op:Context.FetchFile",
      "label": "Context File(s)",
      "name": "Context.FetchFile",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.FetchContextBlob",
      "params": [],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist"
      ],
      "since": null,
      "url": "Context.FetchFile",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.GetPrincipalEmails"
      ],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Fetch the principal emails that have a given permission on the input document and then set them in the context under the given key variable name. The operation returns the input document. You can later use the list of principals set by this operation on the context from another operation. The 'key' argument represents the variable name and the 'permission' argument the permission to check. If the 'ignore groups' argument is false then groups are recursively resolved, extracting user members of these groups. Be <b>warned</b> that this may be a very consuming operation.<ul>Note that <li></li><li>groups are not included</li><li>the list pushed into the context is a string list of emails.</li></ul>",
      "hierarchyPath": "/op:Context.GetEmailsWithPermissionOnDoc",
      "label": "Get Principal Emails",
      "name": "Context.GetEmailsWithPermissionOnDoc",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.users.GetDocumentPrincipalEmails",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "permission",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "variable name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "ignore groups",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document"
      ],
      "since": null,
      "url": "Context.GetEmailsWithPermissionOnDoc",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Returns a list of current user open tasks where their translated name matches (partially or fully ) the 'searchTerm' parameter. This operation is invoked from a select2widget and the number of returned results is limited to 15.",
      "hierarchyPath": "/op:Context.GetTaskNames",
      "label": "Get Task Translated Names",
      "name": "Context.GetTaskNames",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.GetTaskNamesOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "limit",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "searchTerm",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "value",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": null,
      "url": "Context.GetTaskNames",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.GetUsersAndGroups"
      ],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Fetch the users and groups that have a given permission on the input document and then set them in the context under the given key variable name. The operation returns the input document. You can later use the list of identifiers set by this operation on the context from another operation. The 'key' argument represents the variable name and the 'permission' argument the permission to check. If the 'ignore groups' argument is false then groups will be part of the result. If the 'resolve groups' argument is true then groups are recursively resolved, adding user members of these groups in place of them. Be <b>warned</b> that this may be a very consuming operation. If the 'prefix identifiers' argument is true, then user identifiers are prefixed by 'user:' and groups identifiers are prefixed by 'group:'.",
      "hierarchyPath": "/op:Context.GetUsersGroupIdsWithPermissionOnDoc",
      "label": "Get Users and Groups",
      "name": "Context.GetUsersGroupIdsWithPermissionOnDoc",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.users.GetDocumentUsersAndGroups",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "permission",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "variable name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "ignore groups",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "prefix identifiers",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "resolve groups",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document"
      ],
      "since": null,
      "url": "Context.GetUsersGroupIdsWithPermissionOnDoc",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.Pop"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the last saved input file in the context input stack. This operation must be used only if a PUSH operation was previously made. Return the last <i>pushed</i> file.",
      "hierarchyPath": "/op:Context.PopBlob",
      "label": "Pop File",
      "name": "Context.PopBlob",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PopBlob",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Context.PopBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.PopList"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the last saved input file list in the context input stack",
      "hierarchyPath": "/op:Context.PopBlobList",
      "label": "Pop File List",
      "name": "Context.PopBlobList",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PopBlobList",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "bloblist"
      ],
      "since": null,
      "url": "Context.PopBlobList",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.Pop"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the last saved input document in the context input stack. This operation must be used only if a PUSH operation was previously made. Return the last <i>pushed</i> document.",
      "hierarchyPath": "/op:Context.PopDocument",
      "label": "Pop Document",
      "name": "Context.PopDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PopDocument",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "document"
      ],
      "since": null,
      "url": "Context.PopDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.PopList"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the last saved input document list in the context input stack",
      "hierarchyPath": "/op:Context.PopDocumentList",
      "label": "Pop Document List",
      "name": "Context.PopDocumentList",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PopDocumentList",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": null,
      "url": "Context.PopDocumentList",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.Pull"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the last saved input file in the context input stack. This operation must be used only if a PUSH operation was previously made. Return the first <i>pushed</i> file.",
      "hierarchyPath": "/op:Context.PullBlob",
      "label": "Pull File",
      "name": "Context.PullBlob",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PullBlob",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Context.PullBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.PullList"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the first saved input file list in the context input stack",
      "hierarchyPath": "/op:Context.PullBlobList",
      "label": "Pull File List",
      "name": "Context.PullBlobList",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PullBlobList",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "bloblist"
      ],
      "since": null,
      "url": "Context.PullBlobList",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.Pull"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the first saved input document in the context input stack. This operation must be used only if a PUSH operation was previously made. Return the first <i>pushed</i> document.",
      "hierarchyPath": "/op:Context.PullDocument",
      "label": "Pull Document",
      "name": "Context.PullDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PullDocument",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "document"
      ],
      "since": null,
      "url": "Context.PullDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.PullList"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the first saved input document list in the context input stack",
      "hierarchyPath": "/op:Context.PullDocumentList",
      "label": "Pull Document List",
      "name": "Context.PullDocumentList",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PullDocumentList",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": null,
      "url": "Context.PullDocumentList",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.Push"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Push the input file on the context stack. The file can be restored later as the input using the corrresponding pop operation. Returns the input file.",
      "hierarchyPath": "/op:Context.PushBlob",
      "label": "Push File",
      "name": "Context.PushBlob",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PushBlob",
      "params": [],
      "requires": null,
      "signature": [
        "blob",
        "blob"
      ],
      "since": null,
      "url": "Context.PushBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.PushList"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Push the input file list on the context stack. The file list can be restored later as the input using the corrresponding pop operation. Returns the input file list.",
      "hierarchyPath": "/op:Context.PushBlobList",
      "label": "Push File List",
      "name": "Context.PushBlobList",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PushBlobList",
      "params": [],
      "requires": null,
      "signature": [
        "bloblist",
        "bloblist"
      ],
      "since": null,
      "url": "Context.PushBlobList",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.Push"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Push the input document on the context stack. The document can be restored later as the input using the corrresponding pop operation. Returns the input document.",
      "hierarchyPath": "/op:Context.PushDocument",
      "label": "Push Document",
      "name": "Context.PushDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PushDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document"
      ],
      "since": null,
      "url": "Context.PushDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.PushList"
      ],
      "category": "Push & Pop",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Push the input document list on the context stack. The document list can be restored later as the input using the corrresponding pop operation. Returns the input document list.",
      "hierarchyPath": "/op:Context.PushDocumentList",
      "label": "Push Document List",
      "name": "Context.PushDocumentList",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.stack.PushDocumentList",
      "params": [],
      "requires": null,
      "signature": [
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Context.PushDocumentList",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the file input from a context variable given its name. Return the file.",
      "hierarchyPath": "/op:Context.RestoreBlobInput",
      "label": "Restore File Input",
      "name": "Context.RestoreBlobInput",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RestoreBlobInput",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Context.RestoreBlobInput",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run a script and return the result blob object of the script the output of the operation",
      "hierarchyPath": "/op:Context.RestoreBlobInputFromScript",
      "label": "Restore input blob from a script",
      "name": "Context.RestoreBlobInputFromScript",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RestoreBlobInputFromScript",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "script",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "TextArea"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Context.RestoreBlobInputFromScript",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the file list input from a context variable given its name. Return the files.",
      "hierarchyPath": "/op:Context.RestoreBlobsInput",
      "label": "Restore Files Input",
      "name": "Context.RestoreBlobsInput",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RestoreBlobsInput",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "bloblist"
      ],
      "since": null,
      "url": "Context.RestoreBlobsInput",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run a script and return the result Blobs object of the script the output of the operation",
      "hierarchyPath": "/op:Context.RestoreBlobsInputFromScript",
      "label": "Restore input blobs from a script",
      "name": "Context.RestoreBlobsInputFromScript",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RestoreBlobsInputFromScript",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "script",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "TextArea"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "bloblist"
      ],
      "since": null,
      "url": "Context.RestoreBlobsInputFromScript",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the document input from a context variable given its name. Return the document.",
      "hierarchyPath": "/op:Context.RestoreDocumentInput",
      "label": "Restore Document Input",
      "name": "Context.RestoreDocumentInput",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RestoreDocumentInput",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "document"
      ],
      "since": null,
      "url": "Context.RestoreDocumentInput",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run a script and return the result Document object of the script the output of the operation",
      "hierarchyPath": "/op:Context.RestoreDocumentInputFromScript",
      "label": "Restore input document from a script",
      "name": "Context.RestoreDocumentInputFromScript",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RestoreDocumentInputFromScript",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "script",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "TextArea"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "document"
      ],
      "since": null,
      "url": "Context.RestoreDocumentInputFromScript",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restore the document list input from a context variable given its name. Return the document list.",
      "hierarchyPath": "/op:Context.RestoreDocumentsInput",
      "label": "Restore Documents Input",
      "name": "Context.RestoreDocumentsInput",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RestoreDocumentsInput",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": null,
      "url": "Context.RestoreDocumentsInput",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run a script and return the result documents object of the script the output of the operation",
      "hierarchyPath": "/op:Context.RestoreDocumentsInputFromScript",
      "label": "Restore input documents from a script",
      "name": "Context.RestoreDocumentsInputFromScript",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RestoreDocumentsInputFromScript",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "script",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "TextArea"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": null,
      "url": "Context.RestoreDocumentsInputFromScript",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Flow",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run an operation chain in a separate tx. The 'parameters' injected are accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
      "hierarchyPath": "/op:Context.RunDocumentOperationInNewTx",
      "label": "Run Document Chain in new Tx",
      "name": "Context.RunDocumentOperationInNewTx",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.execution.RunInNewTransaction",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "isolate",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": "Accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
          "isRequired": false,
          "name": "parameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "rollbackGlobalOnError",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "timeout",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Context.RunDocumentOperationInNewTx",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Set a context variable that points to the current input object. You must give a name for the variable. This operation works on any input type and return back the input as the output.",
      "hierarchyPath": "/op:Context.SetInputAsVar",
      "label": "Set Context Variable From Input",
      "name": "Context.SetInputAsVar",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.SetInputAsVar",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Context.SetInputAsVar",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.ReadMetadataFromBinary"
      ],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.binary.metadata",
      "description": "Read Metadata From binary to Context for a given input blob and given metadata to inject into the Operation context (if not specified, all metadata will be injected) ",
      "hierarchyPath": "/op:Context.SetMetadataFromBlob",
      "label": "Read Metadata From Binary to Context",
      "name": "Context.SetMetadataFromBlob",
      "operationClass": "org.nuxeo.binary.metadata.internals.operations.ReadMetadataFromBinaryToContext",
      "params": [
        {
          "description": "Ignore metadata prefixes or not",
          "isRequired": false,
          "name": "ignorePrefix",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "Metadata list to filter on the blob.",
          "isRequired": false,
          "name": "metadata",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "The processor to execute for overriding the input blob.",
          "isRequired": false,
          "name": "processor",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "void"
      ],
      "since": "7.1",
      "url": "Context.SetMetadataFromBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Set a context variable given a name and the value. To compute the value at runtime from the current context you should use an EL expression as the value. This operation works on any input type and return back the input as the output.",
      "hierarchyPath": "/op:Context.SetVar",
      "label": "Set Context Variable",
      "name": "Context.SetVar",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.SetVar",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "value",
          "order": 0,
          "type": "object",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Context.SetVar",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Set a workflow variable. The workflow variable must exists on the workflow. If no workflowId is specified the variable is set on the current workflow.To compute the value at runtime from the current context you should use a MVEL expression as the value. This operation works on any input type and return back the input as the output.",
      "hierarchyPath": "/op:Context.SetWorkflowVar",
      "label": "Set Workflow Variable",
      "name": "Context.SetWorkflowVar",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.SetWorkflowVar",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "value",
          "order": 0,
          "type": "object",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "workflowInstanceId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Context.SetWorkflowVar",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Starts the workflow with the given model id on the input documents. Returns back the input documents.The id of the created workflow instance is available under the \"workflowInstanceId\" context variable.@Since 5.7.2 you can set multiple variables on the workflow (before 5.8 only scalar types are supported). The variables are specified as <i>key=value</i> pairs separated by a new line.To specify multi-line values you can use a \\ character followed by a new line. <p>Example:<pre>description=foo bar</pre>For updating a date, you will need to expose the value as ISO 8601 format, for instance : <p>Example:<pre>title=The Document Title<br>issued=@{org.nuxeo.ecm.core.schema.utils.DateParser.formatW3CDateTime(CurrentDate.date)}</pre><p> @since 5.9.3 and 5.8.0-HF10 you can also set variables of complex types, by submiting a JSON representation: <p><pre>assignees = [\"John Doe\", \"John Test\"]</pre></p>",
      "hierarchyPath": "/op:Context.StartWorkflow",
      "label": "Start workflow",
      "name": "Context.StartWorkflow",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.StartWorkflowOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "start",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "variables",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Context.StartWorkflow",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Retrieve data collected by one or more Counters",
      "hierarchyPath": "/op:Counters.GET",
      "label": "Retrieve counters values",
      "name": "Counters.GET",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.management.GetCounters",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "counterNames",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Counters.GET",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.mail.automation.chains",
      "description": null,
      "hierarchyPath": "/op:CreateMailDocumentFromAutomation",
      "label": "CreateMailDocumentFromAutomation",
      "name": "CreateMailDocumentFromAutomation",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "document"
      ],
      "since": null,
      "url": "CreateMailDocumentFromAutomation",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Creates directory entries. Entries are sent as a JSON array. Returning the created entries ids as a JSON array.",
      "hierarchyPath": "/op:Directory.CreateEntries",
      "label": "Creates directory entries",
      "name": "Directory.CreateEntries",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.directory.CreateDirectoryEntries",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "directoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "entries",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Directory.CreateEntries",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Add a new entry in the <i>vocabularyName</i> vocabulary only if <i>id</i> is not found (an existing entry isnot updated). If <i>label</i> is empty, it is set to the id. WARNING: Current user must have enough rights to write in a vocabulary.",
      "hierarchyPath": "/op:Directory.CreateVocabularyEntry",
      "label": "Vocabulary: Add Entry",
      "name": "Directory.CreateVocabularyEntry",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.directory.CreateVocabularyEntry",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "vocabularyName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "label",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "obsolete",
          "order": 0,
          "type": "long",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "ordering",
          "order": 0,
          "type": "long",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "parent",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Directory.CreateVocabularyEntry",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Deletes directory entries. Entries ids to delete are sent through a JSON array. Returns deleted entries id as a JSON array.",
      "hierarchyPath": "/op:Directory.DeleteEntries",
      "label": "Deletes directory entries",
      "name": "Directory.DeleteEntries",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.directory.DeleteDirectoryEntries",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "directoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "entries",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "markObsolete",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Directory.DeleteEntries",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Get the entries of a directory. This is returning a blob containing a serialized JSON array. The input document, if specified, is used as a context for a potential local configuration of the directory.",
      "hierarchyPath": "/op:Directory.Entries",
      "label": "Get directory entries",
      "name": "Directory.Entries",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.GetDirectoryEntries",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "directoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "translateLabels",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob",
        "document",
        "blob"
      ],
      "since": null,
      "url": "Directory.Entries",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Load directory entries from a CSV file. Depending on the data loading policy, duplicate entries are ignored, updated or trigger an error.",
      "hierarchyPath": "/op:Directory.LoadFromCSV",
      "label": "Load directory entries from CSV file",
      "name": "Directory.LoadFromCSV",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.directory.LoadFromCSV",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "dataLoadingPolicy",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "directoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "void"
      ],
      "since": null,
      "url": "Directory.LoadFromCSV",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Executes a query using given filter and return only the column *<b>columnName</b>*. The result is assigned to the context variable *<b>variableName</b>*. The filters are specified as <i>key=value</i> pairs separated by a new line. The key used for a filter is the column name of the directory. To specify multi-line values you can use a \\ character followed by a new line. <p>Example:<pre>firstName=John<br>lastName=doe</pre>By default, the search filters use exact match. You can do a fulltext search on some specific columns using the fulltextFields. it's specified as comma separated columnName, for instance : <p>Example:<pre>firstName,lastName</pre>",
      "hierarchyPath": "/op:Directory.Projection",
      "label": "Get a Directory Projection",
      "name": "Directory.Projection",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.directory.DirectoryProjection",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "columnName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "directoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "variableName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "filters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "fulltextFields",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": "5.7.2",
      "url": "Directory.Projection",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Reads directory entries. Entries ids to read are sent as a JSON array. Returns the entries as a JSON array of JSON objects containing all fields.",
      "hierarchyPath": "/op:Directory.ReadEntries",
      "label": "Reads directory entries",
      "name": "Directory.ReadEntries",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.directory.ReadDirectoryEntries",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "directoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "entries",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "translateLabels",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Directory.ReadEntries",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Get the entries suggestions of a directory. This is returning a blob containing a serialized JSON array. Prefix parameter is used to filter the entries.",
      "hierarchyPath": "/op:Directory.SuggestEntries",
      "label": "Get suggested directory entries",
      "name": "Directory.SuggestEntries",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.directory.SuggestDirectoryEntries",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "directoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "absoluteLabelSeparator",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "canSelectParent",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "caseSensitive",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "contains",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "dbl10n",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "displayObsoleteEntries",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "filterParent",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "filters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "keySeparator",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "labelFieldName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "limit",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "localize",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "searchTerm",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Directory.SuggestEntries",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Updates directory entries. Entries to update are sent as a JSON array. Returns the updated entries ids as a JSON array of JSON objects containing all fields",
      "hierarchyPath": "/op:Directory.UpdateEntries",
      "label": "Updates directory entries",
      "name": "Directory.UpdateEntries",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.directory.UpdateDirectoryEntries",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "directoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "entries",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Directory.UpdateEntries",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "com.nuxeo.ecm.arender.low.resolution",
      "description": "Get the blob for ARender visualisation",
      "hierarchyPath": "/op:Document.ARenderGetBlob",
      "label": "Get the blob for ARender",
      "name": "Document.ARenderGetBlob",
      "operationClass": "com.nuxeo.ecm.arender.core.ARenderGetBlob",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "blobXPath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob"
      ],
      "since": null,
      "url": "Document.ARenderGetBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "com.nuxeo.ecm.arender.operations",
      "description": "Get the ARender diff url to compare 2 documents.",
      "hierarchyPath": "/op:Document.ARenderGetDiffUrl",
      "label": "Get ARender diff url",
      "name": "Document.ARenderGetDiffUrl",
      "operationClass": "com.nuxeo.ecm.arender.core.ARenderGetDiffUrl",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "leftDocId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "rightDocId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "leftBlobXPath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "rightBlobXPath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Document.ARenderGetDiffUrl",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "com.nuxeo.ecm.arender.operations",
      "description": "Get the ARender previewer url depending on input.",
      "hierarchyPath": "/op:Document.ARenderGetPreviewerUrl",
      "label": "Get ARender previewer url",
      "name": "Document.ARenderGetPreviewerUrl",
      "operationClass": "com.nuxeo.ecm.arender.core.ARenderGetPreviewerUrl",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "blobXPath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob",
        "documents",
        "blob"
      ],
      "since": null,
      "url": "Document.ARenderGetPreviewerUrl",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.SetACE"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Set Acces Control Entry on the input document(s). Returns the document(s).",
      "hierarchyPath": "/op:Document.AddACE",
      "label": "Set ACL",
      "name": "Document.AddACE",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.SetDocumentACE",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "permission",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "user",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "acl",
          "order": 0,
          "type": "string",
          "values": [
            "local"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "grant",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "overwrite",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.AddACE",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "AddEntryToMultivaluedProperty",
        "DocumentMultivaluedProperty.addItem"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Add value into the field expressed by the xpath parameter. This field must be a multivalued metadata.<p> 'checkExists' parameter enables to add value only if doesn't already exists in the field: <ul><li> if checked, the value will not be added if it exists already in the list</li><li>if not checked the value will be always added</li</ul>.<p> Remark: <b>only works for a field that stores a list of scalars (string, boolean, date, int, long) and not list of complex types.</b></p><p>Save parameter automatically saves the document in the database. It has to be turned off when this operation is used in the context of the empty document created, about to create, before document modification, document modified events.</p>",
      "hierarchyPath": "/op:Document.AddEntryToMultivaluedProperty",
      "label": "Add entry into multi-valued metadata",
      "name": "Document.AddEntryToMultivaluedProperty",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.AddEntryToMultiValuedProperty",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "value",
          "order": 0,
          "type": "serializable",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "checkExists",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.AddEntryToMultivaluedProperty",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Adds the facet to the document. <p>WARNING: The save parameter is true by default, which means the document is saved in the database after adding the facet. It must be set to false when the operation is used in the context of an event that will fail if the document is saved (empty document created, about to create, before modification, ...).</p>",
      "hierarchyPath": "/op:Document.AddFacet",
      "label": "Add Facet",
      "name": "Document.AddFacet",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.AddFacet",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "facet",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.AddFacet",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "This operation can add new entries to a multivalued complex property. The xpath parameter is the property that should be updated (e.g.: contract:customers). The value parameter is a String containing the JSON-formatted list of entries to add. E.g.: assuming a Contract document type holding customers, each having a firstName and lastName property: [{\"lastName\":\"Norris\", \"firstName\": \"Chuck\"}, {\"lastName\":\"Lee\", \"firstName\": \"Bruce\"}] . Activating the save parameter forces the changes to be written in database immediately (at the cost of performance loss), otherwise changes made to the document will be written in bulk when the chain succeeds. <p>Save parameter has to be turned off when this operation is used in the context of the empty document created, about to create, before document modification, document modified events.</p>",
      "hierarchyPath": "/op:Document.AddItemToListProperty",
      "label": "Adds an Entry Into a Multivalued Complex Property",
      "name": "Document.AddItemToListProperty",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.AddItemToListProperty",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "complexJsonProperties",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.AddItemToListProperty",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.AddACL"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Add Permission on the input document(s). Returns the document(s).",
      "hierarchyPath": "/op:Document.AddPermission",
      "label": "Add Permission",
      "name": "Document.AddPermission",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.AddPermission",
      "params": [
        {
          "description": "ACE permission.",
          "isRequired": true,
          "name": "permission",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "ACL name.",
          "isRequired": false,
          "name": "acl",
          "order": 0,
          "type": "string",
          "values": [
            "local"
          ],
          "widget": null
        },
        {
          "description": "ACE begin date.",
          "isRequired": false,
          "name": "begin",
          "order": 0,
          "type": "date",
          "values": [],
          "widget": null
        },
        {
          "description": "Block inheritance or not.",
          "isRequired": false,
          "name": "blockInheritance",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "Comment",
          "isRequired": false,
          "name": "comment",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "ACE target user/group.",
          "isRequired": false,
          "name": "email",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "ACE end date.",
          "isRequired": false,
          "name": "end",
          "order": 0,
          "type": "date",
          "values": [],
          "widget": null
        },
        {
          "description": "Notify the user or not",
          "isRequired": false,
          "name": "notify",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "ACE target set of users and/or groups.",
          "isRequired": false,
          "name": "users",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.AddPermission",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Relations.CreateRelation"
      ],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Create a relation between 2 documents. The subject of the relation will be the input of the operation and the object of the relation will be retrieved from the context using the 'object' field. The 'predicate' field specifies the relation predicate (When using a known predicate, use the full URL like 'http://purl.org/dc/terms/IsBasedOn', unknown predicates will be treated as plain strings and be the same on the subject and object). The 'outgoing' flag indicates the direction of the relation - the default is false which means the relation will go from the input object to the object specified as 'object' parameter. Return back the subject document.",
      "hierarchyPath": "/op:Document.AddRelation",
      "label": "Create Relation",
      "name": "Document.AddRelation",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.CreateRelation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "object",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "predicate",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "outgoing",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.AddRelation",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Collection.AddToCollection"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Add a list of documents in a collection. No value is returned.",
      "hierarchyPath": "/op:Document.AddToCollection",
      "label": "Add document to collection",
      "name": "Document.AddToCollection",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.AddToCollectionOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "collection",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.AddToCollection",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Collection.AddToFavorites"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Add a list of documents in the favorites. No value is returned.",
      "hierarchyPath": "/op:Document.AddToFavorites",
      "label": "Add document to favorites",
      "name": "Document.AddToFavorites",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.AddToFavoritesOperation",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.AddToFavorites",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Block the permission inheritance on the input document(s). Returns the document(s).",
      "hierarchyPath": "/op:Document.BlockPermissionInheritance",
      "label": "Block Permission Inheritance",
      "name": "Document.BlockPermissionInheritance",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.BlockPermissionInheritance",
      "params": [
        {
          "description": "ACL name.",
          "isRequired": false,
          "name": "acl",
          "order": 0,
          "type": "string",
          "values": [
            "local"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.BlockPermissionInheritance",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Checks in the input document. Returns back the document.",
      "hierarchyPath": "/op:Document.CheckIn",
      "label": "Check In",
      "name": "Document.CheckIn",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.CheckInDocument",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "version",
          "order": 0,
          "type": "string",
          "values": [
            "none",
            "minor",
            "major"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "comment",
          "order": 1,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "versionVarName",
          "order": 2,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.CheckIn",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Checks out the input document. Returns back the document.",
      "hierarchyPath": "/op:Document.CheckOut",
      "label": "Check Out",
      "name": "Document.CheckOut",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.CheckOutDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.CheckOut",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Copy the input document into the given Folderish. The name parameter will be used as the copy name otherwise if not specified the original name will be preserved. The target Folderish can be specified as an absolute or relative path (relative to the input document) as an UID or by using an EL expression. Return the newly created document (the copy). The document is copied with its children recursively. The resetLifeCycle parameter allows to reset the life cycle of the copied document.",
      "hierarchyPath": "/op:Document.Copy",
      "label": "Copy",
      "name": "Document.Copy",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.CopyDocument",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "target",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "resetLifeCycle",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Copy",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Copy all the properties from the schema of the source into the input document. Either sourceId or sourcePath parameter should be filled. When both are filled, sourceId will be used. If saveDocument is true, the document is saved. If save is true, the session is saved (setting save to true and saveDocument to false has no effect, the session will not be saved)",
      "hierarchyPath": "/op:Document.CopySchema",
      "label": "Copy Schema",
      "name": "Document.CopySchema",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.CopySchema",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "schema",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "saveDocument",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "sourceId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "sourcePath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.CopySchema",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Create a new document in the input folder. You can initialize the document properties using the 'properties' parameter. The properties are specified as <i>key=value</i> pairs separated by a new line. The key used for a property is the property xpath. To specify multi-line values, you can use a \\ character followed by a new line. <p>Example:<pre>dc:title=The Document Title<br>dc:description=foo bar</pre>. Returns the created document.",
      "hierarchyPath": "/op:Document.Create",
      "label": "Create",
      "name": "Document.Create",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.CreateDocument",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "type",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Create",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "CreateProxyLive"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "This operation will create a proxy that points the given document as input. This is like a symbolic link for File System. The proxy will be created into the destination specified as parameter. <p>The document returned is the proxy live.<p> Remark: <b>you will have a strange behavior if the input is a folderish.</b>",
      "hierarchyPath": "/op:Document.CreateLiveProxy",
      "label": "Create Proxy Live",
      "name": "Document.CreateLiveProxy",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.CreateProxyLive",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "Destination Path",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.CreateLiveProxy",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Create a new version for the input document. Any modification made on the document by the chain will be automatically saved. Increment version if this was specified through the 'snapshot' parameter. This operation should not be used in the context of the empty document created, about to create, before document modification, document modified events. Returns the live document (not the version).",
      "hierarchyPath": "/op:Document.CreateVersion",
      "label": "Snapshot Version",
      "name": "Document.CreateVersion",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.CreateVersion",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "increment",
          "order": 0,
          "type": "string",
          "values": [
            "None",
            "Minor",
            "Major"
          ],
          "widget": "Option"
        },
        {
          "description": "Save the document in the session after versioning",
          "isRequired": false,
          "name": "saveDocument",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": "Check"
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.CreateVersion",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Delete the input document. The previous context input will be restored for the next operation.",
      "hierarchyPath": "/op:Document.Delete",
      "label": "Delete",
      "name": "Document.Delete",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.DeleteDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Delete",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Relations.DeleteRelation"
      ],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Delete a relation between 2 documents. The subject of the relation will be the input of the operation and the object of the relation will be retrieved from the context using the 'object' field. The 'predicate' field specifies the relation predicate (When using a known predicate, use the full URL like 'purl.org/dc/terms/IsBasedOn', unknown predicates will be treated as plain strings and be the same on the subject and object). The 'outgoing' flag indicates the direction of the relation - the default is false which means the relation will go from the input object to the object specified as 'object' parameter. Return back the subject document.",
      "hierarchyPath": "/op:Document.DeleteRelation",
      "label": "Delete Relation",
      "name": "Document.DeleteRelation",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.DeleteRelation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "object",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "predicate",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "outgoing",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.DeleteRelation",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Emtpy a folder's trash by permanently deleting documents marked as trashed.",
      "hierarchyPath": "/op:Document.EmptyTrash",
      "label": "Empty Trash",
      "name": "Document.EmptyTrash",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.EmptyTrash",
      "params": [
        {
          "description": "A Folderish document whose trash will be emptied",
          "isRequired": true,
          "name": "parent",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Document.EmptyTrash",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.io.operations",
      "description": "Export the given document.",
      "hierarchyPath": "/op:Document.Export",
      "label": "Document Export",
      "name": "Document.Export",
      "operationClass": "org.nuxeo.ecm.platform.io.operation.ExportDocument",
      "params": [
        {
          "description": "Export the document and all its children",
          "isRequired": false,
          "name": "exportAsTree",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "Create a ZIP of the export. If 'exportAsTree' is true, exportAsZip is force to true",
          "isRequired": false,
          "name": "exportAsZip",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob"
      ],
      "since": null,
      "url": "Document.Export",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "For each specified string property value, fetch all documents that match the property and the optional where clause. Matching documents are collected into a list and the returned to the next operation. The operation has no input.",
      "hierarchyPath": "/op:Document.FetchByProperty",
      "label": "Fetch By Property",
      "name": "Document.FetchByProperty",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.FetchByProperty",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "property",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "values",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "query",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": null,
      "url": "Document.FetchByProperty",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Filter the input list of documents given a condition. The condition can be expressed using 4 parameters: types, facets, lifecycle and condition. If more than one parameter is specified an AND will be used to group conditions. <br>The 'types' parameter can take a comma separated list of document type: File,Note.<br>The 'facet' parameter can take a single facet name.<br> The 'life cycle' parameter takes a name of a life cycle state the document should have.<br>The 'condition' parameter can take any EL expression.<p>Returns the list of documents that match the filter condition.",
      "hierarchyPath": "/op:Document.Filter",
      "label": "Filter List",
      "name": "Document.Filter",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.FilterDocuments",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "class",
          "order": 0,
          "type": "string",
          "values": [
            "Any",
            "Regular Document",
            "Document Link",
            "Published Document",
            "Document Proxy",
            "Document Version",
            "Immutable Document",
            "Mutable Document"
          ],
          "widget": "Option"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "condition",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "facet",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lifecycle",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pathStartsWith",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "types",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "documents",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Filter",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.SetLifeCycle"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Follow the given transition on the input document life cycle state",
      "hierarchyPath": "/op:Document.FollowLifecycleTransition",
      "label": "Follow Life Cycle Transition",
      "name": "Document.FollowLifecycleTransition",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.SetDocumentLifeCycle",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "value",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.FollowLifecycleTransition",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.Get"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Gets a file attached to the input document. The file location is specified using an xpath to the blob property of the document. Returns the file.",
      "hierarchyPath": "/op:Document.GetBlob",
      "label": "Get Document File",
      "name": "Document.GetBlob",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.GetDocumentBlob",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "Document.GetBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.GetAll"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Gets a list of all blobs that are attached on the input document. Returns a list of files.",
      "hierarchyPath": "/op:Document.GetBlobs",
      "label": "Get All Document Files",
      "name": "Document.GetBlobs",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.GetAllDocumentBlobs",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "bloblist",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "Document.GetBlobs",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.GetList"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Gets a list of files that are attached on the input document. The files location should be specified using the blob list property xpath. Returns a list of files.",
      "hierarchyPath": "/op:Document.GetBlobsByProperty",
      "label": "Get Document Files",
      "name": "Document.GetBlobsByProperty",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.GetDocumentBlobs",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "files:files"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "bloblist",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "Document.GetBlobsByProperty",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Get a child document given its name. Take as input the parent document and return the child document.",
      "hierarchyPath": "/op:Document.GetChild",
      "label": "Get Child",
      "name": "Document.GetChild",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.GetDocumentChild",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.GetChild",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Get the children of a document. The list of children will become the input for the next operation",
      "hierarchyPath": "/op:Document.GetChildren",
      "label": "Get Children",
      "name": "Document.GetChildren",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.GetDocumentChildren",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "documents",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.GetChildren",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.platform.rendition.operations",
      "description": "Gets the list of blob of the folder's children or the collection's members default renditions. Returns a blob list file containing all the default rendition blobs.",
      "hierarchyPath": "/op:Document.GetContainerRendition",
      "label": "Gets the folder's children or the collection's members default renditions",
      "name": "Document.GetContainerRendition",
      "operationClass": "org.nuxeo.ecm.platform.rendition.operation.GetContainerRendition",
      "params": [
        {
          "description": "Limit of members to be returned. Default is 100.",
          "isRequired": false,
          "name": "limit",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": "Depth of the hierarchy to be explored. Default is 1.",
          "isRequired": false,
          "name": "maxDepth",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "reason",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob"
      ],
      "since": null,
      "url": "Document.GetContainerRendition",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Returns the last version of the document if it exists.",
      "hierarchyPath": "/op:Document.GetLastVersion",
      "label": "Get Last version",
      "name": "Document.GetLastVersion",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.GetLastDocumentVersion",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.GetLastVersion",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Relations.GetRelations"
      ],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Get the relations for the input document. The 'outgoing' parameter ca be used to specify whether outgoing or incoming relations should be returned. Retuns a document list.",
      "hierarchyPath": "/op:Document.GetLinkedDocuments",
      "label": "Get Linked Documents",
      "name": "Document.GetLinkedDocuments",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.GetRelations",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "predicate",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "graphName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "outgoing",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "documents"
      ],
      "since": null,
      "url": "Document.GetLinkedDocuments",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Get the parent document of the input document. The parent document will become the input for the next operation. You can use the 'type' parameter to specify which parent to select from the document ancestors",
      "hierarchyPath": "/op:Document.GetParent",
      "label": "Get Parent",
      "name": "Document.GetParent",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.GetDocumentParent",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "type",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.GetParent",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.platform.rendition.operations",
      "description": "Gets a document rendition given its name. Returns the rendition blob.",
      "hierarchyPath": "/op:Document.GetRendition",
      "label": "Gets a document rendition",
      "name": "Document.GetRendition",
      "operationClass": "org.nuxeo.ecm.platform.rendition.operation.GetRendition",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "renditionName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "Document.GetRendition",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Gets the versions of the input document.",
      "hierarchyPath": "/op:Document.GetVersions",
      "label": "Get Versions",
      "name": "Document.GetVersions",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.GetDocumentVersions",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "documents"
      ],
      "since": null,
      "url": "Document.GetVersions",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Turn the input document into a record and set a legal hold on it. Returns back the hold document.",
      "hierarchyPath": "/op:Document.Hold",
      "label": "Apply Legal Hold",
      "name": "Document.Hold",
      "operationClass": "org.nuxeo.retention.operations.HoldDocument",
      "params": [
        {
          "description": "Optional description of the hold",
          "isRequired": false,
          "name": "description",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Hold",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Lock the input document for the current user. Returns back the locked document.",
      "hierarchyPath": "/op:Document.Lock",
      "label": "Lock",
      "name": "Document.Lock",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.LockDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Lock",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Notification.SendMail"
      ],
      "category": "Notification",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Send an email using the input document to the specified recipients. You can use the HTML parameter to specify whether you message is in HTML format or in plain text. Also you can attach any blob on the current document to the message by using the comma separated list of xpath expressions 'files'. If you xpath points to a blob list all blobs in the list will be attached. Return back the input document(s). If rollbackOnError is true, the whole chain will be rollbacked if an error occurs while trying to send the email (for instance if no SMTP server is configured), else a simple warning will be logged and the chain will continue.",
      "hierarchyPath": "/op:Document.Mail",
      "label": "Send E-Mail",
      "name": "Document.Mail",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.notification.SendMail",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "from",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "message",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "MailTemplate"
        },
        {
          "description": null,
          "isRequired": true,
          "name": "subject",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "HTML",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "Strict User Resolution",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "bcc",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "cc",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "files",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "replyto",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "rollbackOnError",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "to",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "viewId",
          "order": 0,
          "type": "string",
          "values": [
            "view_documents"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Mail",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Move the input document into the target folder.",
      "hierarchyPath": "/op:Document.Move",
      "label": "Move",
      "name": "Document.Move",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.MoveDocument",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "target",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Move",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Move member1 of a collection right after member2 of the same collection. If member2 is not sepcified, the member1 is moved to first position. Returns true if successfully moved.",
      "hierarchyPath": "/op:Document.MoveCollectionMember",
      "label": "Reorder members of a collection",
      "name": "Document.MoveCollectionMember",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.MoveCollectionMemberOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "member1",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "member2",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "boolean"
      ],
      "since": null,
      "url": "Document.MoveCollectionMember",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "org.nuxeo.coldstorage.operations.contrib",
      "description": "Move the main document content to the cold storage.",
      "hierarchyPath": "/op:Document.MoveToColdStorage",
      "label": "Move to Cold Storage",
      "name": "Document.MoveToColdStorage",
      "operationClass": "org.nuxeo.coldstorage.operations.MoveToColdStorage",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.MoveToColdStorage",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Given a parent document, order the source child before the destination child.",
      "hierarchyPath": "/op:Document.Order",
      "label": "Order Document",
      "name": "Document.Order",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.OrderDocument",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "before",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": "10.1",
      "url": "Document.Order",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.PublishRendition",
        "Document.Publish"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.platform.rendition.operations",
      "description": "input document's chosen rendition into the target section. If rendition is not given and default rendition option is false, it falls back on default publishing. Existing proxy is overrided if the override attribute is set. Return the created proxy.",
      "hierarchyPath": "/op:Document.PublishToSection",
      "label": "Publish Document's Rendition",
      "name": "Document.PublishToSection",
      "operationClass": "org.nuxeo.ecm.platform.rendition.operation.PublishRendition",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "target",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "defaultRendition",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "override",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "renditionName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.PublishToSection",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.MultiPublish"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Publish the input document(s) into several target sections. The target is evaluated to a document list (can be a path, UID or EL expression). Existing proxy is overridden if the override attribute is set. Returns a list with the created proxies.",
      "hierarchyPath": "/op:Document.PublishToSections",
      "label": "Multi-Publish",
      "name": "Document.PublishToSections",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.MultiPublishDocument",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "target",
          "order": 0,
          "type": "documents",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "override",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "documents",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.PublishToSections",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Reload the input document from the repository. Any previous modification made by the chain on this document will be lost if these modifications were not saved. Return the reloaded document.",
      "hierarchyPath": "/op:Document.Reload",
      "label": "Reset",
      "name": "Document.Reload",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.ReloadDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Reload",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Remove a named Acces Control List from the input document(s). Returns the document(s).",
      "hierarchyPath": "/op:Document.RemoveACL",
      "label": "Remove ACL",
      "name": "Document.RemoveACL",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.RemoveDocumentACL",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "acl",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RemoveACL",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "RemoveEntryOfMultivaluedProperty"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Remove the first entry of the giving value in the multivalued xpath, does nothing if does not exist: <ul<li>if 'is Remove All' is check, all entry instance in the list.</li><li>if not will remove just the first one found</li></ul><p>Save parameter automatically saves the document in the database. It has to be turned off when this operation is used in the context of the empty document created, about to create, before document modification, document modified events.</p>",
      "hierarchyPath": "/op:Document.RemoveEntryOfMultivaluedProperty",
      "label": "Remove Entry Of Multivalued Property",
      "name": "Document.RemoveEntryOfMultivaluedProperty",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.RemoveEntryOfMultiValuedProperty",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "value",
          "order": 0,
          "type": "serializable",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "is Remove All",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RemoveEntryOfMultivaluedProperty",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Removes the facet from the document. <p>WARNING: The save parameter is true by default, which means the document is saved in the database after removing the facet. It must be set to false when the operation is used in the context of an event that will fail if the document is saved (empty document created, about to create, before modification, ...).</p>",
      "hierarchyPath": "/op:Document.RemoveFacet",
      "label": "Remove Facet",
      "name": "Document.RemoveFacet",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.RemoveFacet",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "facet",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RemoveFacet",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Collection.RemoveFromFavorites"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Remove a list of documents from the favorites. No value is returned.",
      "hierarchyPath": "/op:Document.RemoveFromFavorites",
      "label": "Remove from favorites",
      "name": "Document.RemoveFromFavorites",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.RemoveFromFavoritesOperation",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RemoveFromFavorites",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "This operation removes an entry from a multivalued property, specified using a xpath (e.g.: contract:customers). A specific entry can be removed using its index number. If the index parameter is left empty, all entries in the property are removed. Activating the save parameter forces the changes to be written in database immediately (at the cost of performance loss), otherwise changes made to the document will be written in bulk when the chain succeeds. <p>Save parameter has to be turned off when this operation is used in the context of the empty document created, about to create, before document modification, document modified events.</p>",
      "hierarchyPath": "/op:Document.RemoveItemFromListProperty",
      "label": "Removes an Entry From a Multivalued Property",
      "name": "Document.RemoveItemFromListProperty",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.RemoveItemFromListProperty",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "index",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RemoveItemFromListProperty",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Remove a permission given its id or all permissions for a given user on the input document(s). Parameter 'id' or 'user' must be set. Returns the document(s).",
      "hierarchyPath": "/op:Document.RemovePermission",
      "label": "Remove Permission",
      "name": "Document.RemovePermission",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.RemovePermission",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "acl",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "user",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RemovePermission",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Remove the given property of the input document(s) as specified by the 'xpath' parameter. If the property points to a list then clear the list. Removing a property means setting it to null. Return the document(s).",
      "hierarchyPath": "/op:Document.RemoveProperty",
      "label": "Remove Property",
      "name": "Document.RemoveProperty",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.RemoveProperty",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RemoveProperty",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Will remove all proxies pointing on the input document. Useful for instance to unpublish a document. Notice: this operation will remove all proxies, including the ones pointing to the current document version (live proxies). Activating the save parameter forces the changes to be written in database immediately (at the cost of performance loss).",
      "hierarchyPath": "/op:Document.RemoveProxies",
      "label": "Remove Document Proxies",
      "name": "Document.RemoveProxies",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.RemoveProxies",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RemoveProxies",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Replace a given permission on the input document(s). Returns the document(s).",
      "hierarchyPath": "/op:Document.ReplacePermission",
      "label": "Replace Permission",
      "name": "Document.ReplacePermission",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.ReplacePermission",
      "params": [
        {
          "description": "ACE id.",
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "ACE permission.",
          "isRequired": true,
          "name": "permission",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "ACE target user/group.",
          "isRequired": true,
          "name": "username",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "ACL name.",
          "isRequired": false,
          "name": "acl",
          "order": 0,
          "type": "string",
          "values": [
            "local"
          ],
          "widget": null
        },
        {
          "description": "ACE begin date.",
          "isRequired": false,
          "name": "begin",
          "order": 0,
          "type": "date",
          "values": [],
          "widget": null
        },
        {
          "description": "Comment",
          "isRequired": false,
          "name": "comment",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "ACE end date.",
          "isRequired": false,
          "name": "end",
          "order": 0,
          "type": "date",
          "values": [],
          "widget": null
        },
        {
          "description": "Notify the user or not",
          "isRequired": false,
          "name": "notify",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.ReplacePermission",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "org.nuxeo.coldstorage.operations.contrib",
      "description": "Request a retrieval from cold storage of the content associated with the document.",
      "hierarchyPath": "/op:Document.RequestRetrievalFromColdStorage",
      "label": "Request retrieval from cold storage",
      "name": "Document.RequestRetrievalFromColdStorage",
      "operationClass": "org.nuxeo.coldstorage.operations.RequestRetrievalFromColdStorage",
      "params": [
        {
          "description": "The number of days that you want your cold storage content to be accessible.",
          "isRequired": false,
          "name": "numberOfDaysOfAvailability",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RequestRetrievalFromColdStorage",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Reset all properties for a given schema or xpath. If saveDocument is true, the document is saved. If save is true, the session is saved (setting save to true and saveDocument to false has no effect, the session will not be saved).<p>WARNING: Default values are true for both saveDocument and save, which means the document is saved by default. saveDocument must be set to false when the operation is used in the context of an event that will fail if the document is saved (empty document created, about to create, before modification, ...).</p>",
      "hierarchyPath": "/op:Document.ResetSchema",
      "label": "Reset Schema",
      "name": "Document.ResetSchema",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.ResetSchema",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "saveDocument",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "schema",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.ResetSchema",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "org.nuxeo.coldstorage.operations.contrib",
      "description": "Restore document under cold storage content to the main storage.",
      "hierarchyPath": "/op:Document.RestoreFromColdStorage",
      "label": "Restore from Cold Storage",
      "name": "Document.RestoreFromColdStorage",
      "operationClass": "org.nuxeo.coldstorage.operations.RestoreFromColdStorage",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.RestoreFromColdStorage",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Restores a document to the input version document. If createVersion is true, a version of the live document will be created before restoring it to the input version. If checkout is true, a checkout will be processed after restoring the document, visible in the UI by the '+' symbol beside the version number. Returns the restored document.",
      "hierarchyPath": "/op:Document.RestoreVersion",
      "label": "Restore Version",
      "name": "Document.RestoreVersion",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.RestoreVersion",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "checkout",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "createVersion",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document"
      ],
      "since": null,
      "url": "Document.RestoreVersion",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Turn the input document into a record and retain it until the until date. Returns back the retained document.",
      "hierarchyPath": "/op:Document.Retain",
      "label": "Set as Record and Retain Until",
      "name": "Document.Retain",
      "operationClass": "org.nuxeo.retention.operations.RetainDocument",
      "params": [
        {
          "description": "If true and if the document is not already a record, it will be turned into a flexible record, enforced otherwise",
          "isRequired": false,
          "name": "flexible",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "If empty, the input document will be retained indeterminately",
          "isRequired": false,
          "name": "until",
          "order": 0,
          "type": "date",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Retain",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Routing",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "get graph nodes.",
      "hierarchyPath": "/op:Document.Routing.GetGraph",
      "label": "Get graph",
      "name": "Document.Routing.GetGraph",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.impl.GetGraphOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "routeDocId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "language",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Document.Routing.GetGraph",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Routing",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Update comments number on the document",
      "hierarchyPath": "/op:Document.Routing.UpdateCommentsInfoOnDocument",
      "label": "Update comments number on the document",
      "name": "Document.Routing.UpdateCommentsInfoOnDocument",
      "operationClass": "org.nuxeo.ecm.platform.routing.api.operation.UpdateCommentsInfoOnDocumentOperation",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Document.Routing.UpdateCommentsInfoOnDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Save in the repository any modification that was done on the input document. This operation should not be used in the context of the empty document created, about to create, before document modification, document modified events. Returns the saved document.",
      "hierarchyPath": "/op:Document.Save",
      "label": "Save",
      "name": "Document.Save",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.SaveDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Save",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.permissions.operations",
      "description": "Send the notification email for a permission on the input document(s). Returns the document(s).",
      "hierarchyPath": "/op:Document.SendNotificationEmailForPermission",
      "label": "Send the notification email for a permission",
      "name": "Document.SendNotificationEmailForPermission",
      "operationClass": "org.nuxeo.ecm.permissions.operations.SendNotificationEmailForPermission",
      "params": [
        {
          "description": "ACE id.",
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.SendNotificationEmailForPermission",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.Set"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Set the input file to the given property on the input document. If the xpath points to a blob list then the blob is appended to the list, otherwise the xpath should point to a blob property. If the save parameter is set the document modification will be automatically saved. Return the document.",
      "hierarchyPath": "/op:Document.SetBlob",
      "label": "Set File",
      "name": "Document.SetBlob",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.SetDocumentBlob",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "file",
          "order": 0,
          "type": "blob",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.SetBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Blob.SetFilename"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Modify the filename of a file stored in the input document. The file is found in the input document given its xpath specified through the 'xpath' parameter. Return back the input document.",
      "hierarchyPath": "/op:Document.SetBlobName",
      "label": "Set File Name",
      "name": "Document.SetBlobName",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.blob.SetBlobFileName",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.SetBlobName",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.TriggerMetadataMapping"
      ],
      "category": "Files",
      "contributingComponent": "org.nuxeo.binary.metadata",
      "description": "Write Metadata To Document From Binary according to metadata mapping.",
      "hierarchyPath": "/op:Document.SetMetadataFromBlob",
      "label": "Trigger Metadata Mapping",
      "name": "Document.SetMetadataFromBlob",
      "operationClass": "org.nuxeo.binary.metadata.internals.operations.TriggerMetadataMappingOnDocument",
      "params": [
        {
          "description": "The metadata mapping id to apply on the input document.",
          "isRequired": true,
          "name": "metadataMappingId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "The processor to execute for reading blobs metadata.",
          "isRequired": false,
          "name": "processor",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "void"
      ],
      "since": "7.1",
      "url": "Document.SetMetadataFromBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Set a single property value on the input document. The property is specified using its xpath. Save parameter automatically saves the document in the database. It has to be turned off when this operation is used in the context of the empty document created, about to create, before document modification, document modified events. Returns the modified document.",
      "hierarchyPath": "/op:Document.SetProperty",
      "label": "Update Property",
      "name": "Document.SetProperty",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.SetDocumentProperty",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "value",
          "order": 0,
          "type": "serializable",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.SetProperty",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.platform.ec.notification.operations",
      "description": "Subscribe one or more documents. No value is returned.",
      "hierarchyPath": "/op:Document.Subscribe",
      "label": "Subscribe document",
      "name": "Document.Subscribe",
      "operationClass": "org.nuxeo.ecm.platform.ec.notification.automation.SubscribeOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "notifications",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Subscribe",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Moves documents to the trash.",
      "hierarchyPath": "/op:Document.Trash",
      "label": "Trash",
      "name": "Document.Trash",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.TrashDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Trash",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": " Unattaches the retention rule on a flexible Record document. Stops the current retention on the record document. Returns back the unretained record document.",
      "hierarchyPath": "/op:Document.UnattachRetentionRule",
      "label": "Unattach Retention Rule and stop retention",
      "name": "Document.UnattachRetentionRule",
      "operationClass": "org.nuxeo.retention.operations.UnattachRetentionRule",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.UnattachRetentionRule",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Unblock the permission inheritance on the input document(s). Returns the document(s).",
      "hierarchyPath": "/op:Document.UnblockPermissionInheritance",
      "label": "Unblock Permission Inheritance",
      "name": "Document.UnblockPermissionInheritance",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.UnblockPermissionInheritance",
      "params": [
        {
          "description": "ACL name.",
          "isRequired": false,
          "name": "acl",
          "order": 0,
          "type": "string",
          "values": [
            "local"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.UnblockPermissionInheritance",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Remove a legal hold on the input document. Returns back the unhold document.",
      "hierarchyPath": "/op:Document.Unhold",
      "label": "Remove Legal Hold",
      "name": "Document.Unhold",
      "operationClass": "org.nuxeo.retention.operations.UnholdDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Unhold",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Unlock the input document. The unlock will be executed in the name of the current user. An user can unlock a document only if has the UNLOCK permission granted on the document or if it the same user as the one that locked the document. Return the unlocked document",
      "hierarchyPath": "/op:Document.Unlock",
      "label": "Unlock",
      "name": "Document.Unlock",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.UnlockDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Unlock",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.platform.rendition.operations",
      "description": "Unpublish all publications of the input document. Only publications that current user can remove will be unpublished.",
      "hierarchyPath": "/op:Document.UnpublishAll",
      "label": "Unpublish Document's Publications",
      "name": "Document.UnpublishAll",
      "operationClass": "org.nuxeo.ecm.platform.rendition.operation.UnpublishAll",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "void"
      ],
      "since": null,
      "url": "Document.UnpublishAll",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.platform.ec.notification.operations",
      "description": "Unsubscribe one or more documents. No value is returned.",
      "hierarchyPath": "/op:Document.Unsubscribe",
      "label": "Unsubscribe document",
      "name": "Document.Unsubscribe",
      "operationClass": "org.nuxeo.ecm.platform.ec.notification.automation.UnsubscribeOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "notifications",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Unsubscribe",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Undeletes documents (and ancestors if needed to make them visible)..",
      "hierarchyPath": "/op:Document.Untrash",
      "label": "Untrash",
      "name": "Document.Untrash",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.UntrashDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Untrash",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Set multiple properties on the input document. The properties are specified as <i>key=value</i> pairs separated by a new line. The key used for a property is the property xpath. To specify multi-line values you can use a \\ character followed by a new line. <p>Example:<pre>dc:title=The Document Title<br>dc:description=foo bar</pre>For updating a date, you will need to expose the value as ISO 8601 format, for instance : <p>Example:<pre>dc:title=The Document Title<br>dc:issued=@{org.nuxeo.ecm.core.schema.utils.DateParser.formatW3CDateTime(CurrentDate.date)}</pre><p>Returns back the updated document.<p>To update a multi-valued field with multiple values:<pre>custom:multivalued=a,b,c,d</pre><p>Save parameter automatically saves the document in the database. It has to be turned off when this operation is used in the context of the empty document created, about to create, before document modification, document modified events.</p>",
      "hierarchyPath": "/op:Document.Update",
      "label": "Update Properties",
      "name": "Document.Update",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.UpdateDocument",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "changeToken",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "propertiesBehaviors",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Document.Update",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Notification.SendEvent"
      ],
      "category": "Notification",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Send a Nuxeo event.",
      "hierarchyPath": "/op:Event.Fire",
      "label": "Send Event",
      "name": "Event.Fire",
      "operationClass": "org.nuxeo.ecm.automation.core.events.operations.FireEvent",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Event.Fire",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Fetch the favorites document root collection.",
      "hierarchyPath": "/op:Favorite.Fetch",
      "label": "Fetch favorites root collection",
      "name": "Favorite.Fetch",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.FetchFavorites",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "document"
      ],
      "since": null,
      "url": "Favorite.Fetch",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Collection.GetElementsInFavorite"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Get the list of documents visible from the currentUser's favorites. This is returning a list of documents.",
      "hierarchyPath": "/op:Favorite.GetDocuments",
      "label": "Get documents from favorites",
      "name": "Favorite.GetDocuments",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.GetDocumentsFromFavoritesOperation",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "documents"
      ],
      "since": null,
      "url": "Favorite.GetDocuments",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Create a Folder using the FileManagerService and set multiple properties on it.<p>The properties are specified as <i>key=value</i> pairs separated by a new line. The key used for a property is the property xpath. To specify multi-line values you can use a \\ character followed by a new line. <p>Example:<pre>dc:title=The Folder Title<br>dc:description=foo bar</pre>For updating a date, you will need to expose the value as ISO 8601 format, for instance : <p>Example:<pre>dc:title=The Folder Title<br>dc:issued=@{org.nuxeo.ecm.core.schema.utils.DateParser.formatW3CDateTime(CurrentDate.date)}</pre><p>To update a multi-valued field with multiple values:<pre>custom:multivalued=a,b,c,d</pre><p>Returns back the created folder.",
      "hierarchyPath": "/op:FileManager.CreateFolder",
      "label": "Create Folder",
      "name": "FileManager.CreateFolder",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.FileManagerCreateFolder",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "title",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Whether to overwrite an existing folder with the same title, defaults to false",
          "isRequired": false,
          "name": "overwrite",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document"
      ],
      "since": null,
      "url": "FileManager.CreateFolder",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Create Document(s) from Blob(s) using the FileManagerService. The destination container must be passed in a Context variable named currentDocument.",
      "hierarchyPath": "/op:FileManager.Import",
      "label": "Create Document from file",
      "name": "FileManager.Import",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.FileManagerImport",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "noMimeTypeCheck",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "overwite",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "overwrite",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "documents",
        "blob",
        "document"
      ],
      "since": null,
      "url": "FileManager.Import",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": null,
      "hierarchyPath": "/op:FileManager.ImportWithMetaData",
      "label": "FileManager.ImportWithMetaData",
      "name": "FileManager.ImportWithMetaData",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "bloblist",
        "documents",
        "blob",
        "document"
      ],
      "since": null,
      "url": "FileManager.ImportWithMetaData",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Create Document(s) from Blob(s) using the FileManagerService and set multiple properties on them.The destination container must be passed in a Context variable named currentDocument. <p>The properties are specified as <i>key=value</i> pairs separated by a new line. The key used for a property is the property xpath. To specify multi-line values you can use a \\ character followed by a new line. <p>Example:<pre>dc:title=The Document Title<br>dc:description=foo bar</pre>For updating a date, you will need to expose the value as ISO 8601 format, for instance : <p>Example:<pre>dc:title=The Document Title<br>dc:issued=@{org.nuxeo.ecm.core.schema.utils.DateParser.formatW3CDateTime(CurrentDate.date)}</pre><p>Returns back the updated document.<p>To update a multi-valued field with multiple values:<pre>custom:multivalued=a,b,c,d</pre>",
      "hierarchyPath": "/op:FileManager.ImportWithProperties",
      "label": "Create Document from file",
      "name": "FileManager.ImportWithProperties",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.FileManagerImportWithProperties",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": "Whether to check the blob's mime-type against the file name, defaults to true",
          "isRequired": false,
          "name": "mimeTypeCheck",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "Whether to overwrite an existing file with the same title, defaults to false",
          "isRequired": false,
          "name": "overwrite",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "documents",
        "blob",
        "document"
      ],
      "since": null,
      "url": "FileManager.ImportWithProperties",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Create or Update Group",
      "hierarchyPath": "/op:Group.CreateOrUpdate",
      "label": "Create or Update Group",
      "name": "Group.CreateOrUpdate",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.users.CreateOrUpdateGroup",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "groupname",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "description",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "grouplabel",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "members",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "mode",
          "order": 0,
          "type": "string",
          "values": [
            "createOrUpdate",
            "create",
            "update"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "parentGroups",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "subGroups",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "tenantId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Group.CreateOrUpdate",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.picture.operation",
      "description": null,
      "hierarchyPath": "/op:Image.Blob.ConvertToPDF",
      "label": "Image.Blob.ConvertToPDF",
      "name": "Image.Blob.ConvertToPDF",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Image.Blob.ConvertToPDF",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.picture.operation",
      "description": null,
      "hierarchyPath": "/op:Image.Blob.Resize",
      "label": "Image.Blob.Resize",
      "name": "Image.Blob.Resize",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "blob",
        "blob"
      ],
      "since": null,
      "url": "Image.Blob.Resize",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Toggle stack display in json response for all rest api calls in Nuxeo",
      "hierarchyPath": "/op:JsonStack.ToggleDisplay",
      "label": "Json Error Stack Display",
      "name": "JsonStack.ToggleDisplay",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.traces.JsonStackToggleDisplayOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "enableTrace",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "boolean"
      ],
      "since": "6.0",
      "url": "JsonStack.ToggleDisplay",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Local Configuration",
      "contributingComponent": "org.nuxeo.ecm.localconf.operations",
      "description": "Put a Simple Configuration parameter on the input document. Add the 'SimpleConfiguration' facet on the input document if needed. The user adding a parameter must have WRITE access on the input document",
      "hierarchyPath": "/op:LocalConfiguration.PutSimpleConfigurationParameter",
      "label": "Put a Simple Configuration Parameter",
      "name": "LocalConfiguration.PutSimpleConfigurationParameter",
      "operationClass": "org.nuxeo.ecm.localconf.PutSimpleConfParam",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "key",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "value",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document"
      ],
      "since": null,
      "url": "LocalConfiguration.PutSimpleConfigurationParameter",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Local Configuration",
      "contributingComponent": "org.nuxeo.ecm.localconf.operations",
      "description": "Put Simple Configuration parameters on the input document. Add the 'SimpleConfiguration' facet on the input document if needed. The parameters are specified as <i>key=value</i> pairs separated by a new line. The user adding parameters must have WRITE access on the input document.",
      "hierarchyPath": "/op:LocalConfiguration.PutSimpleConfigurationParameters",
      "label": "Put Simple Configuration parameters",
      "name": "LocalConfiguration.PutSimpleConfigurationParameters",
      "operationClass": "org.nuxeo.ecm.localconf.PutSimpleConfParams",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "parameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document"
      ],
      "since": null,
      "url": "LocalConfiguration.PutSimpleConfigurationParameters",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Local Configuration",
      "contributingComponent": "org.nuxeo.ecm.localconf.operations",
      "description": "Set a context variable that points to the value of the given parameter name in the SimpleConfiguration from the input Document. You must give a name for the variable.",
      "hierarchyPath": "/op:LocalConfiguration.SetSimpleConfigurationParameterAsVar",
      "label": "Set Context Variable From a Simple Configuration Parameter",
      "name": "LocalConfiguration.SetSimpleConfigurationParameterAsVar",
      "operationClass": "org.nuxeo.ecm.localconf.SetSimpleConfParamVar",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "parameterName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "defaultValue",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document"
      ],
      "since": null,
      "url": "LocalConfiguration.SetSimpleConfigurationParameterAsVar",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "LogOperation"
      ],
      "category": "Notification",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Logging with log4j",
      "hierarchyPath": "/op:Log",
      "label": "Log",
      "name": "Log",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.LogOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "level",
          "order": 0,
          "type": "string",
          "values": [
            "info",
            "debug",
            "warn",
            "error"
          ],
          "widget": "Option"
        },
        {
          "description": null,
          "isRequired": true,
          "name": "message",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "category",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Log",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.mail.core.operations.contrib",
      "description": "Checks for unread emails in the inbox of an Email Folder passed as input.",
      "hierarchyPath": "/op:Mail.CheckInbox",
      "label": "Check Mail Inbox",
      "name": "Mail.CheckInbox",
      "operationClass": "org.nuxeo.ecm.platform.mail.operations.MailCheckInboxOperation",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "void"
      ],
      "since": null,
      "url": "Mail.CheckInbox",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Starts Metrics reporters.",
      "hierarchyPath": "/op:Metrics.Start",
      "label": "Metrics",
      "name": "Metrics.Start",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.MetricsStart",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Metrics.Start",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Stops Metrics rerporer.",
      "hierarchyPath": "/op:Metrics.Stop",
      "label": "Metrics",
      "name": "Metrics.Stop",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.MetricsStop",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Metrics.Stop",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:NRD-AC-PR-ChooseParticipants-Output",
      "label": "NRD-AC-PR-ChooseParticipants-Output",
      "name": "NRD-AC-PR-ChooseParticipants-Output",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "NRD-AC-PR-ChooseParticipants-Output",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:NRD-AC-PR-LockDocument",
      "label": "NRD-AC-PR-LockDocument",
      "name": "NRD-AC-PR-LockDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "NRD-AC-PR-LockDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:NRD-AC-PR-UnlockDocument",
      "label": "NRD-AC-PR-UnlockDocument",
      "name": "NRD-AC-PR-UnlockDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "NRD-AC-PR-UnlockDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:NRD-AC-PR-ValidateNode-Output",
      "label": "NRD-AC-PR-ValidateNode-Output",
      "name": "NRD-AC-PR-ValidateNode-Output",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "NRD-AC-PR-ValidateNode-Output",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:NRD-AC-PR-force-validate",
      "label": "NRD-AC-PR-force-validate",
      "name": "NRD-AC-PR-force-validate",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "NRD-AC-PR-force-validate",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:NRD-AC-PR-storeTaskInfo",
      "label": "NRD-AC-PR-storeTaskInfo",
      "name": "NRD-AC-PR-storeTaskInfo",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "NRD-AC-PR-storeTaskInfo",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Update the given document with the input blob. Return the input blob.",
      "hierarchyPath": "/op:NuxeoDrive.AttachBlob",
      "label": "Nuxeo Drive: Attach blob",
      "name": "NuxeoDrive.AttachBlob",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveAttachBlob",
      "params": [
        {
          "description": "The document to update.",
          "isRequired": true,
          "name": "document",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.AttachBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Create a document from the input blob in the container backing the file system item with the given id. Return the file system item backed by the created document as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.CreateFile",
      "label": "Nuxeo Drive: Create file",
      "name": "NuxeoDrive.CreateFile",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveCreateFile",
      "params": [
        {
          "description": "Id of the file system item backed by the parent container.",
          "isRequired": true,
          "name": "parentId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Optional, whether to overwrite an existing document with the same title.",
          "isRequired": false,
          "name": "overwrite",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.CreateFile",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Create a container with the given name as title in the container backing the file system item with the given id. Return the file system item backed by the created container as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.CreateFolder",
      "label": "Nuxeo Drive: Create folder",
      "name": "NuxeoDrive.CreateFolder",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveCreateFolder",
      "params": [
        {
          "description": "Title of the container to create.",
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Id of the file system item backed by the parent container.",
          "isRequired": true,
          "name": "parentId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Optional, whether to overwrite an existing container with the same title.",
          "isRequired": false,
          "name": "overwrite",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.CreateFolder",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": null,
      "hierarchyPath": "/op:NuxeoDrive.CreateTestDocuments",
      "label": "Nuxeo Drive: Create test documents",
      "name": "NuxeoDrive.CreateTestDocuments",
      "operationClass": "org.nuxeo.drive.operations.test.NuxeoDriveCreateTestDocuments",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "contentPattern",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "delay",
          "order": 0,
          "type": "long",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "namePattern",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "number",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.CreateTestDocuments",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Delete the document backing the file system item with the given id.",
      "hierarchyPath": "/op:NuxeoDrive.Delete",
      "label": "Nuxeo Drive: Delete",
      "name": "NuxeoDrive.Delete",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveDelete",
      "params": [
        {
          "description": "Id of the file system item backed by the document to delete.",
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Optional id of the file system item backed by the parent container of the document to delete. For optimization purpose.",
          "isRequired": false,
          "name": "parentId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "NuxeoDrive.Delete",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Check if the document backing the file system item with the given id exists. Return the result as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.FileSystemItemExists",
      "label": "Nuxeo Drive: File system item exists",
      "name": "NuxeoDrive.FileSystemItemExists",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveFileSystemItemExists",
      "params": [
        {
          "description": "Id of the file system item backed by the document whose existence to check.",
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.FileSystemItemExists",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Get a summary of document changes in the synchronization roots of the currently authenticated user. Return the result as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.GetChangeSummary",
      "label": "Nuxeo Drive: Get change summary",
      "name": "NuxeoDrive.GetChangeSummary",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveGetChangeSummary",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "lastSyncActiveRootDefinitions",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Optional lower bound of the interval for which to get the changes. If not provided, the list of document changes will be emtpy, yet the summary will contain the upper bound of the scanned interval. If set to 0, the interval will start from the repository's initialization.",
          "isRequired": false,
          "name": "lowerBound",
          "order": 0,
          "type": "long",
          "values": [
            "-1"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.GetChangeSummary",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Get the children of the document backing the folder item with the given id. Return the results as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.GetChildren",
      "label": "Nuxeo Drive: Get children",
      "name": "NuxeoDrive.GetChildren",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveGetChildren",
      "params": [
        {
          "description": "Id of the file system item backed by the document whose children to get.",
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.GetChildren",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Get the file system item with the given id. Return the result as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.GetFileSystemItem",
      "label": "Nuxeo Drive: Get file system item",
      "name": "NuxeoDrive.GetFileSystemItem",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveGetFileSystemItem",
      "params": [
        {
          "description": "Id of the file system item to get.",
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Optional parent id of the file system item to get. For optimization purpose.",
          "isRequired": false,
          "name": "parentId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.GetFileSystemItem",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Get the list of synchronization roots for the currently authenticated user.",
      "hierarchyPath": "/op:NuxeoDrive.GetRoots",
      "label": "Nuxeo Drive: Get Roots",
      "name": "NuxeoDrive.GetRoots",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": null,
      "url": "NuxeoDrive.GetRoots",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Get the top level folder item. Return the result as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.GetTopLevelFolder",
      "label": "Nuxeo Drive: Get the top level folder",
      "name": "NuxeoDrive.GetTopLevelFolder",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveGetTopLevelFolder",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.GetTopLevelFolder",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Move the document backing the file system item with the given source id to the document backing the file system item with the given destination id. Return the moved file system item as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.Move",
      "label": "Nuxeo Drive: Move",
      "name": "NuxeoDrive.Move",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveMove",
      "params": [
        {
          "description": "Id of the destination file system item.",
          "isRequired": true,
          "name": "destId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Id of the source file system item.",
          "isRequired": true,
          "name": "srcId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.Move",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Rename the document backing the file system item with the given id to the given name. Return the file system item backed by the renamed document as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.Rename",
      "label": "Nuxeo Drive: Rename",
      "name": "NuxeoDrive.Rename",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveRename",
      "params": [
        {
          "description": "Id of the file system item backed by the document to rename.",
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "The new name.",
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.Rename",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Retrieve at most batchSize descendants of the folder item with the given id and the given scrollId. When passing a null scrollId the initial search request is executed and the first batch of results is returned along with a scrollId which should be passed to the next call in order to retrieve the next batch of results. Ideally, the search context made available by the initial search request is kept alive during keepAlive milliseconds if keepAlive is positive. Results are not necessarily sorted. Return the results as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.ScrollDescendants",
      "label": "Nuxeo Drive: Scroll descendants",
      "name": "NuxeoDrive.ScrollDescendants",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveScrollDescendants",
      "params": [
        {
          "description": "Batch size.",
          "isRequired": true,
          "name": "batchSize",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": "Id of the file system item whose descendants to retrieve.",
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Optional keep alive duration in milliseconds.",
          "isRequired": false,
          "name": "keepAlive",
          "order": 0,
          "type": "long",
          "values": [
            "60000"
          ],
          "widget": null
        },
        {
          "description": "Optional scroll id.",
          "isRequired": false,
          "name": "scrollId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.ScrollDescendants",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": null,
      "hierarchyPath": "/op:NuxeoDrive.SetActiveFactories",
      "label": "Nuxeo Drive: Activate or deactivate file system item factories",
      "name": "NuxeoDrive.SetActiveFactories",
      "operationClass": "org.nuxeo.drive.operations.test.NuxeoDriveSetActiveFactories",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "profile",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "enable",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "boolean"
      ],
      "since": null,
      "url": "NuxeoDrive.SetActiveFactories",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "If the enable parameter is true, register the input document as a synchronization root for the currently authenticated user. Unregister it otherwise.",
      "hierarchyPath": "/op:NuxeoDrive.SetSynchronization",
      "label": "Nuxeo Drive: Register / Unregister Synchronization Root",
      "name": "NuxeoDrive.SetSynchronization",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveSetSynchronizationOperation",
      "params": [
        {
          "description": "Whether to register or unregister the input document as a synchronizaiton root.",
          "isRequired": true,
          "name": "enable",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "void"
      ],
      "since": null,
      "url": "NuxeoDrive.SetSynchronization",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": null,
      "hierarchyPath": "/op:NuxeoDrive.SetupIntegrationTests",
      "label": "Nuxeo Drive: Setup integration tests",
      "name": "NuxeoDrive.SetupIntegrationTests",
      "operationClass": "org.nuxeo.drive.operations.test.NuxeoDriveSetupIntegrationTests",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "permission",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "userNames",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "useMembersGroup",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.SetupIntegrationTests",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": null,
      "hierarchyPath": "/op:NuxeoDrive.TearDownIntegrationTests",
      "label": "Nuxeo Drive: Tear down integration tests",
      "name": "NuxeoDrive.TearDownIntegrationTests",
      "operationClass": "org.nuxeo.drive.operations.test.NuxeoDriveTearDownIntegrationTests",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "NuxeoDrive.TearDownIntegrationTests",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.drive.operations.NuxeoDriveGetRootsOperation",
      "description": "Update the document backing the file system item with the given id with the input blob. Return the file system item backed by the updated document as a JSON blob.",
      "hierarchyPath": "/op:NuxeoDrive.UpdateFile",
      "label": "Nuxeo Drive: Update file",
      "name": "NuxeoDrive.UpdateFile",
      "operationClass": "org.nuxeo.drive.operations.NuxeoDriveUpdateFile",
      "params": [
        {
          "description": "Id of the file system item backed by the document to update.",
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Optional id of the file system item backed by the parent container of the document to update. For optimization purpose.",
          "isRequired": false,
          "name": "parentId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob"
      ],
      "since": null,
      "url": "NuxeoDrive.UpdateFile",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Add the page numbers to the PDF, using the misc parameters. If the PDF is encrypted, a password is required.",
      "hierarchyPath": "/op:PDF.AddPageNumbers",
      "label": "PDF: Add Page Numbers",
      "name": "PDF.AddPageNumbers",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFAddPageNumbersOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "fontName",
          "order": 0,
          "type": "string",
          "values": [
            "Helvetica"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "fontSize",
          "order": 0,
          "type": "long",
          "values": [
            "16"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "hex255Color",
          "order": 0,
          "type": "string",
          "values": [
            "0xffffff"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "password",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "position",
          "order": 0,
          "type": "string",
          "values": [
            "Bottom right",
            "Bottom center",
            "Bottom left",
            "Top right",
            "Top center",
            "Top left"
          ],
          "widget": "Option"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "startAtNumber",
          "order": 0,
          "type": "long",
          "values": [
            "1"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "startAtPage",
          "order": 0,
          "type": "long",
          "values": [
            "1"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist"
      ],
      "since": null,
      "url": "PDF.AddPageNumbers",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Convert each page of a PDF into a picture. Returns Blob list of pictures.",
      "hierarchyPath": "/op:PDF.ConvertToPictures",
      "label": "PDF: Convert to Pictures",
      "name": "PDF.ConvertToPictures",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFConvertToPicturesOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "fileName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "password",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "bloblist"
      ],
      "since": null,
      "url": "PDF.ConvertToPictures",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Encrypts the PDF with the given permissions, returning a copy. Permissions are print, modify, copy, modifyAnnot, fillForms, extractForAccessibility, assemble and printDegraded. Any missing permission is set to false (values are true or false, assemble=true for example). originalOwnerPwd is used if the PDF was originally encrypted. If no keyLength is provided, use 128. If the operation is ran on Document(s), xpath lets you specificy where to get the blob from (default: file:content).",
      "hierarchyPath": "/op:PDF.Encrypt",
      "label": "PDF: Encrypt",
      "name": "PDF.Encrypt",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFEncryptOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "originalOwnerPwd",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "ownerPwd",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "userPwd",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "keyLength",
          "order": 0,
          "type": "string",
          "values": [
            "40",
            "128"
          ],
          "widget": "Option"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "permissions",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "bloblist",
        "blob",
        "blob",
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "PDF.Encrypt",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Encrypts the PDF, returning a copy. User can read, print and copy but cannot modify. originalOwnerPwd is used if the PDF was originally encrypted. If ownerPwd is empty, use originalOwnerPwd to encrypt. If no keyLength is provided, use 128. If the operation is ran on Document(s), xpath lets you specificy where to get the blob from (default: file:content).",
      "hierarchyPath": "/op:PDF.EncryptReadOnly",
      "label": "PDF: Encrypt Read Only",
      "name": "PDF.EncryptReadOnly",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFEncryptReadOnlyOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "keyLength",
          "order": 0,
          "type": "string",
          "values": [
            "40",
            "128"
          ],
          "widget": "Option"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "originalOwnerPwd",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "ownerPwd",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "userPwd",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "bloblist",
        "blob",
        "blob",
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "PDF.EncryptReadOnly",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Extract the info of the PDF stored in <code>xpath</code> and put it in the fields referenced by <code>properties</code>. <code>properties</code> is a <code>key=value</code> list (one key-value pair/line, where <code>key</code> is the xpath of the destination field and <code>value</code> is the exact label (case sensitive) as returned by the PageExtractor (see this operation documentation). If there is no blob or the blob is not a PDF, all the values referenced in <code>properties</code> are cleared (set to empty string, 0, ...).",
      "hierarchyPath": "/op:PDF.ExtractInfo",
      "label": "PDF: Extract Info",
      "name": "PDF.ExtractInfo",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFExtractInfoOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "PDF.ExtractInfo",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Returns a JSON string of an array of objects with page, subType, text and link fields. If getAll is true, returns all the links (Remote Go To, Launch and URI in the current version).",
      "hierarchyPath": "/op:PDF.ExtractLinks",
      "label": "PDF: Extract Links",
      "name": "PDF.ExtractLinks",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFExtractLinksOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "getAll",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "type",
          "order": 0,
          "type": "string",
          "values": [
            "Launch",
            "Remote Go To",
            "URI"
          ],
          "widget": "Option"
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "string"
      ],
      "since": null,
      "url": "PDF.ExtractLinks",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Extract pages from <code>startPage</code> to <code>endPage</code> (inclusive) from the input object. If a Blob is used as input, the <code>xpath</xpath> parameter is not used. <code>title</code>, <code>subject</code> and <code>author</code> are optional. If the PDF is encrypted, a password is required.",
      "hierarchyPath": "/op:PDF.ExtractPages",
      "label": "PDF: Extract Pages",
      "name": "PDF.ExtractPages",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFExtractPagesOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "endPage",
          "order": 0,
          "type": "long",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "startPage",
          "order": 0,
          "type": "long",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "fileName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "password",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfAuthor",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfSubject",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfTitle",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "document",
        "blob"
      ],
      "since": null,
      "url": "PDF.ExtractPages",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Extracts raw text from a PDF. If the PDF is encrypted, a password is required. pdfxpath is the xpath of the blob (default to file:content). The extracted text is set in the targetxpath property of the input document, which is saved if save is true. If patterntofind is not provided, extracts all the text it can, else it extracts only the line where the pattern is found. If patterntofind is provided and removepatternfromresult is true, the line is returned without the pattern.",
      "hierarchyPath": "/op:PDF.ExtractText",
      "label": "PDF: Extract Text",
      "name": "PDF.ExtractText",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFExtractTextOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "password",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "patterntofind",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfxpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "removepatternfromresult",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "targetxpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "PDF.ExtractText",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "The input blob(s) always is(are) the first PDFs. The operation appends the blob referenced in the <code>toAppendVarName</code> Context variable. It then appends all the blobs stored in the <code>toAppendListVarName</code> Context variable. Returns the final PDF.",
      "hierarchyPath": "/op:PDF.MergeWithBlobs",
      "label": "PDF: Merge with Blob(s) ",
      "name": "PDF.MergeWithBlobs",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFMergeBlobsOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "fileName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfAuthor",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfSubject",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfTitle",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "toAppendListVarName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "toAppendVarName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "blob",
        "blob",
        "blob"
      ],
      "since": null,
      "url": "PDF.MergeWithBlobs",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "The input document(s) always is(are) the first PDFs, and their PDF is read in the <code>xpath</code> field (but it is ok for the input doc to have no blob). The operation appends the blob referenced in the <code>toAppendVarName</code> Context variable. It then appends all the blobs stored in the <code>toAppendListVarName</code> Context variable. It then append the blobs stored in the docs whose IDs are passed in <code>toAppendDocIDsVarName</code> (the same <code>xpath</code> is used). Returns the final PDF.",
      "hierarchyPath": "/op:PDF.MergeWithDocs",
      "label": "PDF: Merge with Document(s)",
      "name": "PDF.MergeWithDocs",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFMergeDocumentsOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "fileName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfAuthor",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfSubject",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pdfTitle",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "toAppendDocIDsVarName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "toAppendListVarName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "toAppendVarName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob",
        "documents",
        "blob"
      ],
      "since": null,
      "url": "PDF.MergeWithDocs",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Removes the encryption, returns a copy of the blob. If the operation is ran on Document(s), xpath lets you specificy where to get the blob from (default: file:content).",
      "hierarchyPath": "/op:PDF.RemoveEncryption",
      "label": "PDF: Remove Encryption",
      "name": "PDF.RemoveEncryption",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFRemoveEncryptionOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "ownerPwd",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [
            "file:content"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "bloblist",
        "blob",
        "blob",
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "PDF.RemoveEncryption",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "<p>Return a <em>new</em> blob combining the input PDF and the<code> image </code>blob.</p><p>Properties must be one or more of the following (the default if the property is not set):</p><ul><li><code>scale </code>(1.0) : 1.0 is the original size of the picture</li><li><code>alphaColor</code> (0.5) : 0 is full transparency, 1 is solid</li><li><code>xPosition </code>(0) : in pixels from left or between 0 (left) and 1 (right) if relativeCoordinates is set to true</li><li><code>yPosition</code> (0) : in pixels from bottom or between 0 (bottom) and 1 (top) if relativeCoordinates is set to true</li><li><code>invertX</code> (false) : xPosition starts from the right going left</li><li><code>invertY</code> (false) : yPosition starts from the top going down</li><li><code>relativeCoordinates</code> (false)</li></ul>",
      "hierarchyPath": "/op:PDF.WatermarkWithImage",
      "label": "PDF: Watermark with Image",
      "name": "PDF.WatermarkWithImage",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFWatermarkImageOperation",
      "params": [
        {
          "description": "The image blob to use for the watermark",
          "isRequired": true,
          "name": "image",
          "order": 0,
          "type": "blob",
          "values": [],
          "widget": null
        },
        {
          "description": "The watermark properties",
          "isRequired": false,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist"
      ],
      "since": null,
      "url": "PDF.WatermarkWithImage",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "Returns a new blob combining the input PDF and an overlaid PDF on every page.",
      "hierarchyPath": "/op:PDF.WatermarkWithPDF",
      "label": "PDF: Watermark with PDF",
      "name": "PDF.WatermarkWithPDF",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFWatermarkPDFOperation",
      "params": [
        {
          "description": "The PDF Blob to overlay on top of the input",
          "isRequired": true,
          "name": "overlayPdf",
          "order": 0,
          "type": "blob",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist"
      ],
      "since": null,
      "url": "PDF.WatermarkWithPDF",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.pdf.operations",
      "description": "<p>Return a <em>new</em> blob combining the input PDF and the <code>text</code> text.</p><p>Properties must be one or more of the following (the default if the property is not set):</p><ul><li><code>fontFamily</code> (Helvetica) </li><li><code>fontSize</code> (72)</li><li><code>rotation</code> (0): in&nbsp;counterclockwise degrees</li><li><code>hex255Color</code> (#000000)</li><li><code>alphaColor</code> (0.5) : 0 is full transparency, 1 is solid</li><li><code>xPosition</code> (0) : in pixels from left or between 0 (left) and 1 (right) if relativeCoordinates is set to true</li><li><code>yPosition</code> (0) : in pixels from bottom or between 0 (bottom) and 1 (top) if relativeCoordinates is set to true</li><li><code>invertX</code> (false) : xPosition starts from the right going left</li><li><code>invertY</code> (false) : yPosition starts from the top going down</li><li><code>relativeCoordinates</code> (false)</li></ul>",
      "hierarchyPath": "/op:PDF.WatermarkWithText",
      "label": "PDF: Watermark with Text",
      "name": "PDF.WatermarkWithText",
      "operationClass": "org.nuxeo.ecm.platform.pdf.operations.PDFWatermarkTextOperation",
      "params": [
        {
          "description": "The text to use for the watermark",
          "isRequired": true,
          "name": "text",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "The watermark properties",
          "isRequired": false,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist"
      ],
      "since": null,
      "url": "PDF.WatermarkWithText",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.platform.admin.operation",
      "description": "Schedule a work to archive ACEs based on permissions_purge page provider from the input document.",
      "hierarchyPath": "/op:PermissionsPurge",
      "label": "Archiving ACEs",
      "name": "PermissionsPurge",
      "operationClass": "org.nuxeo.ecm.admin.operation.PermissionsPurge",
      "params": [
        {
          "description": "Coma separate list of username",
          "isRequired": true,
          "name": "usernames",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void",
        "document",
        "void",
        "list",
        "void"
      ],
      "since": null,
      "url": "PermissionsPurge",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.picture.operation",
      "description": "Create a Picture document in the input folder. You can initialize the document properties using the 'properties' parameter. The properties are specified as <i>key=value</i> pairs separated by a new line. The key <i>originalPicture</i> is used to reference the JSON representation of the Blob for the original picture. The <i>pictureTemplates</i> parameter can be used to define the size of the different views to be generated, each line must be a JSONObject { title=\"title\", description=\"description\", maxsize=maxsize}. Returns the created document.",
      "hierarchyPath": "/op:Picture.Create",
      "label": "Create Picture",
      "name": "Picture.Create",
      "operationClass": "org.nuxeo.ecm.platform.picture.operation.CreatePicture",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pictureTemplates",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Picture.Create",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Picture.getView"
      ],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.picture.operation",
      "description": "Get an image from a Picture document.",
      "hierarchyPath": "/op:Picture.GetView",
      "label": "Get image view",
      "name": "Picture.GetView",
      "operationClass": "org.nuxeo.ecm.platform.picture.operation.GetPictureView",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "viewName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob"
      ],
      "since": null,
      "url": "Picture.GetView",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.picture.operation",
      "description": "Recompute the picture views of the documents resulting from the provided NXQL query.",
      "hierarchyPath": "/op:Picture.RecomputeViews",
      "label": "Recompute Picture Views",
      "name": "Picture.RecomputeViews",
      "operationClass": "org.nuxeo.ecm.platform.picture.operation.RecomputePictureViews",
      "params": [
        {
          "description": "NXQL query to collect the documents whose picture views to recompute.",
          "isRequired": true,
          "name": "query",
          "order": 0,
          "type": "string",
          "values": [
            "SELECT * FROM Document WHERE ecm:mixinType = 'Picture' AND picture:views/*/title IS NULL"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": "10.3",
      "url": "Picture.RecomputeViews",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Picture.resize"
      ],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.platform.picture.operation",
      "description": "Use conversion service to resize a picture contained in a Document or a Blob",
      "hierarchyPath": "/op:Picture.Resize",
      "label": "Resize a picture",
      "name": "Picture.Resize",
      "operationClass": "org.nuxeo.ecm.platform.picture.operation.PictureResize",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "maxHeight",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "maxWidth",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "document",
        "blob"
      ],
      "since": null,
      "url": "Picture.Resize",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.mail.automation.chains",
      "description": null,
      "hierarchyPath": "/op:ProcessAttachment",
      "label": "ProcessAttachment",
      "name": "ProcessAttachment",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "ProcessAttachment",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "GetLiveDocument"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Get the live document even if this is a Proxy or Version Document.",
      "hierarchyPath": "/op:Proxy.GetSourceDocument",
      "label": "Get Live Document",
      "name": "Proxy.GetSourceDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.GetLiveDocument",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Proxy.GetSourceDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Quotas",
      "contributingComponent": "rg.nuxeo.ecm.quota.automation.contrib",
      "description": "Returns the Quota Infos (innerSize, totalSize and maxQuota) for a DocumentModel",
      "hierarchyPath": "/op:Quotas.GetInfo",
      "label": "Get Quota info",
      "name": "Quotas.GetInfo",
      "operationClass": "org.nuxeo.ecm.quota.automation.GetQuotaInfoOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "documentRef",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "jsonadapter",
        "document",
        "jsonadapter"
      ],
      "since": null,
      "url": "Quotas.GetInfo",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Quotas",
      "contributingComponent": "rg.nuxeo.ecm.quota.automation.contrib",
      "description": "Returns the Quota Infos (innerSize, totalSize and maxQuota) for a DocumentModel",
      "hierarchyPath": "/op:Quotas.GetStatistics",
      "label": "Get Quota statistics",
      "name": "Quotas.GetStatistics",
      "operationClass": "org.nuxeo.ecm.quota.automation.GetQuotaStatisticsOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "documentRef",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "language",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Quotas.GetStatistics",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Quotas",
      "contributingComponent": "rg.nuxeo.ecm.quota.automation.contrib",
      "description": null,
      "hierarchyPath": "/op:Quotas.RecomputeStatistics",
      "label": "Recompute quota statistics on documents, optionally only for a tenant, user or path",
      "name": "Quotas.RecomputeStatistics",
      "operationClass": "org.nuxeo.ecm.quota.automation.RecomputeQuotaStatistics",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "path",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "tenantId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "updaterName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "username",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "string"
      ],
      "since": null,
      "url": "Quotas.RecomputeStatistics",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Quotas",
      "contributingComponent": "rg.nuxeo.ecm.quota.automation.contrib",
      "description": "Set the maximum size of the target DocumentModel, use -1 to make Quota checks innative",
      "hierarchyPath": "/op:Quotas.SetMaxSize",
      "label": "Set max Quota size for the target DocumentModel",
      "name": "Quotas.SetMaxSize",
      "operationClass": "org.nuxeo.ecm.quota.automation.SetQuotaInfoOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "targetSize",
          "order": 0,
          "type": "long",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "documentRef",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "long",
        "document",
        "long"
      ],
      "since": null,
      "url": "Quotas.SetMaxSize",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.thumbnail.operation",
      "description": "Recompute the thumbnail of the documents resulting from the provided NXQL query.",
      "hierarchyPath": "/op:RecomputeThumbnails",
      "label": "Recompute Thumbnails",
      "name": "RecomputeThumbnails",
      "operationClass": "org.nuxeo.ecm.platform.thumbnail.operation.RecomputeThumbnails",
      "params": [
        {
          "description": "NXQL query to collect the documents whose thumnail to recompute.",
          "isRequired": true,
          "name": "query",
          "order": 0,
          "type": "string",
          "values": [
            "SELECT * FROM Document WHERE ecm:mixinType = 'Thumbnail' AND thumb:thumbnail/data IS NULL AND ecm:isVersion = 0 AND ecm:isProxy = 0 AND ecm:isTrashed = 0"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": "10.10",
      "url": "RecomputeThumbnails",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Get a document or a list of document in input and outputs one or more blobs that contain a rendered view for each input document given a rendering template. The template attribute may contain either the template content either a template URI. Template URis are strings in the form 'template:template_name' and will be located using the runtime resource service. Return the rendered file(s) as blob(s)",
      "hierarchyPath": "/op:Render.Document",
      "label": "Render Document",
      "name": "Render.Document",
      "operationClass": "org.nuxeo.ecm.automation.core.rendering.operations.RenderDocument",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "template",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "TemplateResource"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "filename",
          "order": 0,
          "type": "string",
          "values": [
            "output.ftl"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "mimetype",
          "order": 0,
          "type": "string",
          "values": [
            "text/xml"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "type",
          "order": 0,
          "type": "string",
          "values": [
            "ftl",
            "mvel"
          ],
          "widget": "Option"
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "Render.Document",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Get a list of documents as input and outputs a single blob containing the rendering of the document list. The template attribute may contain either the template content either a template URI. Template URis are strings in the form 'template:template_name' and will be located using the runtime resource service. Return the rendered blob",
      "hierarchyPath": "/op:Render.DocumentFeed",
      "label": "Render Document Feed",
      "name": "Render.DocumentFeed",
      "operationClass": "org.nuxeo.ecm.automation.core.rendering.operations.RenderDocumentFeed",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "template",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "TemplateResource"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "charset",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "filename",
          "order": 0,
          "type": "string",
          "values": [
            "output.ftl"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "mimetype",
          "order": 0,
          "type": "string",
          "values": [
            "text/xml"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "type",
          "order": 0,
          "type": "string",
          "values": [
            "ftl",
            "mvel"
          ],
          "widget": "Option"
        }
      ],
      "requires": null,
      "signature": [
        "documents",
        "blob"
      ],
      "since": null,
      "url": "Render.DocumentFeed",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.Fetch"
      ],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Fetch a document from the repository given its reference (path or UID). The document will become the input of the next operation.",
      "hierarchyPath": "/op:Repository.GetDocument",
      "label": "Document",
      "name": "Repository.GetDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.document.FetchDocument",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "value",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "document"
      ],
      "since": null,
      "url": "Repository.GetDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.PageProvider"
      ],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Perform a named provider query on the repository. Result is paginated. The query result will become the input for the next operation.",
      "hierarchyPath": "/op:Repository.PageProvider",
      "label": "PageProvider",
      "name": "Repository.PageProvider",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.DocumentPageProviderOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "providerName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "currentPageIndex",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "documentLinkBuilder",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Highlight properties (separated by comma)",
          "isRequired": false,
          "name": "highlights",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "language",
          "order": 0,
          "type": "string",
          "values": [
            "NXQL"
          ],
          "widget": "Option"
        },
        {
          "description": "Named parameters to pass to the page provider to fill in query variables.",
          "isRequired": false,
          "name": "namedParameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "offset",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pageSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "queryParams",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Quick filter properties (separated by comma)",
          "isRequired": false,
          "name": "quickFilters",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort by properties (separated by comma)",
          "isRequired": false,
          "name": "sortBy",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort order, ASC or DESC",
          "isRequired": false,
          "name": "sortOrder",
          "order": 0,
          "type": "stringlist",
          "values": [
            "ASC",
            "DESC"
          ],
          "widget": "Option"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": null,
      "url": "Repository.PageProvider",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.Query"
      ],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Perform a query on the repository. The document list returned will become the input for the next operation.If no provider name is given, a query returning all the documents that the user has access to will be executed.",
      "hierarchyPath": "/op:Repository.Query",
      "label": "Query",
      "name": "Repository.Query",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.query.DocumentPaginatedQuery",
      "params": [
        {
          "description": "Target listing page.",
          "isRequired": false,
          "name": "currentPageIndex",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "escapePatternParameters",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "The query language.",
          "isRequired": false,
          "name": "language",
          "order": 0,
          "type": "string",
          "values": [
            "NXQL"
          ],
          "widget": "Option"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "maxResults",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": "Named parameters to pass to the page provider to fill in query variables.",
          "isRequired": false,
          "name": "namedParameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": "Entries number per page.",
          "isRequired": false,
          "name": "pageSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": "The query to perform.",
          "isRequired": false,
          "name": "query",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Ordered query parameters.",
          "isRequired": false,
          "name": "queryParams",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "quotePatternParameters",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort by properties (separated by comma)",
          "isRequired": false,
          "name": "sortBy",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort order, ASC or DESC",
          "isRequired": false,
          "name": "sortOrder",
          "order": 0,
          "type": "stringlist",
          "values": [
            "ASC",
            "DESC"
          ],
          "widget": "Option"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": "6.0",
      "url": "Repository.Query",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Resultset.PageProvider"
      ],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Perform a named provider query on the repository. Result is paginated.The result is returned as a RecordSet (QueryAndFetch) rather than as a List of DocumentThe query result will become the input for the next operation.",
      "hierarchyPath": "/op:Repository.ResultSetPageProvider",
      "label": "QueryAndFetch",
      "name": "Repository.ResultSetPageProvider",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.ResultSetPageProviderOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "currentPageIndex",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "language",
          "order": 0,
          "type": "string",
          "values": [
            "NXQL",
            "CMIS"
          ],
          "widget": "Option"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "maxResults",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Named parameters to pass to the page provider to fill in query variables.",
          "isRequired": false,
          "name": "namedParameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pageSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "providerName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "queryParams",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort by properties (separated by comma)",
          "isRequired": false,
          "name": "sortBy",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort order, ASC or DESC",
          "isRequired": false,
          "name": "sortOrder",
          "order": 0,
          "type": "stringlist",
          "values": [
            "ASC",
            "DESC"
          ],
          "widget": "Option"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "recordset"
      ],
      "since": null,
      "url": "Repository.ResultSetPageProvider",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "ResultSet.PaginatedQuery"
      ],
      "category": "Fetch",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Perform a query on the repository. The result set returned will become the input for the next operation. If no query or provider name is given, a query returning all the documents that the user has access to will be executed.",
      "hierarchyPath": "/op:Repository.ResultSetQuery",
      "label": "ResultSet Query",
      "name": "Repository.ResultSetQuery",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.query.ResultSetPaginatedQuery",
      "params": [
        {
          "description": "The query to perform.",
          "isRequired": true,
          "name": "query",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Target listing page.",
          "isRequired": false,
          "name": "currentPageIndex",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": "The query language.",
          "isRequired": false,
          "name": "language",
          "order": 0,
          "type": "string",
          "values": [
            "NXQL",
            "CMIS"
          ],
          "widget": "Option"
        },
        {
          "description": null,
          "isRequired": false,
          "name": "maxResults",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": "Named parameters to pass to the page provider to fill in query variables.",
          "isRequired": false,
          "name": "namedParameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": "Entries number per page.",
          "isRequired": false,
          "name": "pageSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": "Ordered query parameters.",
          "isRequired": false,
          "name": "queryParams",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort by properties (separated by comma)",
          "isRequired": false,
          "name": "sortBy",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": "Sort order, ASC or DESC",
          "isRequired": false,
          "name": "sortOrder",
          "order": 0,
          "type": "stringlist",
          "values": [
            "ASC",
            "DESC"
          ],
          "widget": "Option"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "recordset"
      ],
      "since": "6.0",
      "url": "Repository.ResultSetQuery",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Document.SaveSession"
      ],
      "category": "Execution Flow",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Commit any changes made by the operation on the documents. This can be used to explicitly commit changes. This operation can be executed on any type of input. The input of this operation will be preserved as the input for the next operation in the chain.",
      "hierarchyPath": "/op:Repository.SaveSession",
      "label": "Save Session",
      "name": "Repository.SaveSession",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.execution.SaveSession",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Repository.SaveSession",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Attach the given retention rule to the input document. The document becomes a record and the main blob cannot be updated",
      "hierarchyPath": "/op:Retention.AttachRule",
      "label": "Attach Retention Rule",
      "name": "Retention.AttachRule",
      "operationClass": "org.nuxeo.retention.operations.AttachRetentionRule",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "rule",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Retention.AttachRule",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Retention",
      "contributingComponent": "org.nuxeo.retention.operations",
      "description": "Fire a retention business related event. The record needs to be attached to a event based retention rule",
      "hierarchyPath": "/op:Retention.FireEvent",
      "label": "Fire Retention Event",
      "name": "Retention.FireEvent",
      "operationClass": "org.nuxeo.retention.operations.FireRetentionEvent",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "audit",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Retention.FireEvent",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.RunDocumentOperation"
      ],
      "category": "Execution Flow",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run an operation chain which is returning a document in the current context. The input for the chain ro run is the current input of the operation. Return the output of the chain as a document. The 'parameters' injected are accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
      "hierarchyPath": "/op:RunDocumentOperation",
      "label": "Run Document Chain",
      "name": "RunDocumentOperation",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.execution.RunDocumentChain",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "isolate",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": "Define if the chain in parameter should be executed in new transaction.",
          "isRequired": false,
          "name": "newTx",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": "Accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
          "isRequired": false,
          "name": "parameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": "Define if transaction should rollback or not (default to true)",
          "isRequired": false,
          "name": "rollbackGlobalOnError",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": "Define transaction timeout (default to 60 sec).",
          "isRequired": false,
          "name": "timeout",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "RunDocumentOperation",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.RunFileOperation"
      ],
      "category": "Execution Flow",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run an operation chain which is returning a file in the current context. The input for the chain to run is a file or a list of files. Return the output of the chain as a file or a list of files. The 'parameters' injected are accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
      "hierarchyPath": "/op:RunFileOperation",
      "label": "Run File Chain",
      "name": "RunFileOperation",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.execution.RunFileChain",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "isolate",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": "Define if the chain in parameter should be executed in new transaction.",
          "isRequired": false,
          "name": "newTx",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": "Accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
          "isRequired": false,
          "name": "parameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": "Define if transaction should rollback or not (default to true)",
          "isRequired": false,
          "name": "rollbackGlobalOnError",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": "Define transaction timeout (default to 60 sec).",
          "isRequired": false,
          "name": "timeout",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "bloblist",
        "blob",
        "blob"
      ],
      "since": null,
      "url": "RunFileOperation",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.RunInputScript"
      ],
      "category": "Scripting",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run a script from the input blob. A blob comtaining script result is returned.",
      "hierarchyPath": "/op:RunInputScript",
      "label": "Run Input Script",
      "name": "RunInputScript",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RunInputScript",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "type",
          "order": 0,
          "type": "string",
          "values": [
            "mvel",
            "groovy"
          ],
          "widget": "Option"
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob"
      ],
      "since": null,
      "url": "RunInputScript",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.RunOperation"
      ],
      "category": "Execution Flow",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run an operation chain in the current context. The 'parameters' injected are accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
      "hierarchyPath": "/op:RunOperation",
      "label": "Run Chain",
      "name": "RunOperation",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.execution.RunOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "isolate",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": "Accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
          "isRequired": false,
          "name": "parameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "RunOperation",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.RunOperationOnList"
      ],
      "category": "Execution Flow",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run an operation for each element from the list defined by the 'list' parameter. The 'list' parameter is pointing to a context variable that represents the list which will be iterated. The 'item' parameter represents the name of the context variable which will point to the current element in the list at each iteration. You can use the 'isolate' parameter to specify whether or not the evalution context is the same as the parent context or a copy of it. If the 'isolate' parameter is 'true' then a copy of the current context is used and so that modifications in this context will not affect the parent context. Any input is accepted. The input is returned back as output when operation terminates. The 'parameters' injected are accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
      "hierarchyPath": "/op:RunOperationOnList",
      "label": "Run For Each",
      "name": "RunOperationOnList",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.execution.RunOperationOnList",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": true,
          "name": "list",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "isolate",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "item",
          "order": 0,
          "type": "string",
          "values": [
            "item"
          ],
          "widget": null
        },
        {
          "description": "Define if the chain in parameter should be executed in new transaction.",
          "isRequired": false,
          "name": "newTx",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": "Accessible in the subcontext ChainParameters. For instance, @{ChainParameters['parameterKey']}.",
          "isRequired": false,
          "name": "parameters",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": "Define if transaction should rollback or not (default to true)",
          "isRequired": false,
          "name": "rollbackGlobalOnError",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": "Define transaction timeout (default to 60 sec).",
          "isRequired": false,
          "name": "timeout",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "RunOperationOnList",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.RunOperationOnProvider"
      ],
      "category": "Execution Flow",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Run an operation for each page of the provider defined by the provider name, the operation input is the curent page ",
      "hierarchyPath": "/op:RunOperationOnProvider",
      "label": "Run For Each Page",
      "name": "RunOperationOnProvider",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.RunOperationOnProvider",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "isolate",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "documents",
        "void"
      ],
      "since": null,
      "url": "RunOperationOnProvider",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.RunScript"
      ],
      "category": "Scripting",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Run a script which content is specified as text in the 'script' parameter",
      "hierarchyPath": "/op:RunScript",
      "label": "Run Script",
      "name": "RunScript",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.RunScript",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "script",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": "TextArea"
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "RunScript",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Enable to index Nuxeo documents.",
      "hierarchyPath": "/op:Search.Index",
      "label": "Indexing",
      "name": "Search.Index",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.search.SearchIndexOperation",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob",
        "string",
        "blob",
        "document",
        "blob"
      ],
      "since": "2025.0",
      "url": "Search.Index",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "User Interface",
      "contributingComponent": "org.nuxeo.ecm.platform.suggestbox.core.defaultSuggestionHandlers",
      "description": "Get and launch the suggesters defined and return a list of Suggestion objects.",
      "hierarchyPath": "/op:Search.SuggestersLauncher",
      "label": "Suggesters launcher",
      "name": "Search.SuggestersLauncher",
      "operationClass": "org.nuxeo.ecm.platform.suggestbox.automation.SuggestOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "searchTerm",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Search.SuggestersLauncher",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Elasticsearch.WaitForIndexing"
      ],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Wait until indexing is done, only for testing purpose.",
      "hierarchyPath": "/op:Search.WaitForIndexing",
      "label": "Wait for Indexing",
      "name": "Search.WaitForIndexing",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.search.SearchWaitForIndexingOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "refresh",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "timeoutSecond",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "waitForAudit",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "waitForBulkService",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "waitForWorkManager",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "boolean"
      ],
      "since": "2025.0",
      "url": "Search.WaitForIndexing",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.platform.admin.operation",
      "description": "Updates Studio project with latest snapshot.",
      "hierarchyPath": "/op:Service.HotReloadStudioSnapshot",
      "label": "Hot Reload Studio Snapshot Package",
      "name": "Service.HotReloadStudioSnapshot",
      "operationClass": "org.nuxeo.ecm.admin.operation.HotReloadStudioSnapshot",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "validate",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Service.HotReloadStudioSnapshot",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.tag.operations.contrib",
      "description": "Remove all document tags.",
      "hierarchyPath": "/op:Services.RemoveDocumentTags",
      "label": "Remove All Document Tags",
      "name": "Services.RemoveDocumentTags",
      "operationClass": "org.nuxeo.ecm.platform.tag.operations.RemoveDocumentTags",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": "7.1",
      "url": "Services.RemoveDocumentTags",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.signature.core.operations.contrib",
      "description": "Applies a digital signature to the input PDF.",
      "hierarchyPath": "/op:Services.SignPDF",
      "label": "Sign PDF",
      "name": "Services.SignPDF",
      "operationClass": "org.nuxeo.ecm.platform.signature.core.operations.SignPDF",
      "params": [
        {
          "description": "Certificate password.",
          "isRequired": true,
          "name": "password",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Signature reason.",
          "isRequired": true,
          "name": "reason",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "The user ID for signing PDF document.",
          "isRequired": true,
          "name": "username",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Document reference.",
          "isRequired": false,
          "name": "document",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob"
      ],
      "since": null,
      "url": "Services.SignPDF",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.signature.core.operations.contrib",
      "description": "Applies a digital signature to the PDF blob of the input document.",
      "hierarchyPath": "/op:Services.SignPDFDocument",
      "label": "Sign PDF",
      "name": "Services.SignPDFDocument",
      "operationClass": "org.nuxeo.ecm.platform.signature.core.operations.SignPDFDocument",
      "params": [
        {
          "description": "Certificate password.",
          "isRequired": true,
          "name": "password",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Signature reason.",
          "isRequired": true,
          "name": "reason",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "The user ID for signing PDF document.",
          "isRequired": true,
          "name": "username",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob"
      ],
      "since": null,
      "url": "Services.SignPDFDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.tag.operations.contrib",
      "description": "Tag document with one or several 'tags'.",
      "hierarchyPath": "/op:Services.TagDocument",
      "label": "Tag Document",
      "name": "Services.TagDocument",
      "operationClass": "org.nuxeo.ecm.platform.tag.operations.TagDocument",
      "params": [
        {
          "description": "Labels or tags separated by comma.",
          "isRequired": true,
          "name": "tags",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": "7.1",
      "url": "Services.TagDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.tag.operations.contrib",
      "description": "Untag document from one or several 'tags'.",
      "hierarchyPath": "/op:Services.UntagDocument",
      "label": "Untag Document",
      "name": "Services.UntagDocument",
      "operationClass": "org.nuxeo.ecm.platform.tag.operations.UntagDocument",
      "params": [
        {
          "description": "Labels or tags separated by comma.",
          "isRequired": true,
          "name": "tags",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": "7.1",
      "url": "Services.UntagDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.importer.stream.automation.contrib",
      "description": "Import blob into the binarystore.",
      "hierarchyPath": "/op:StreamImporter.runBlobConsumers",
      "label": "Import blobs",
      "name": "StreamImporter.runBlobConsumers",
      "operationClass": "org.nuxeo.importer.stream.automation.BlobConsumers",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "batchSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "batchThresholdS",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "blobProviderName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logBlobInfo",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nbThreads",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "persistBlobPath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "retryDelayS",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "retryMax",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "waitMessageTimeoutSeconds",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "watermark",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": "9.1",
      "url": "StreamImporter.runBlobConsumers",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.importer.stream.automation.contrib",
      "description": "Import documents into repository.",
      "hierarchyPath": "/op:StreamImporter.runDocumentConsumers",
      "label": "Imports document",
      "name": "StreamImporter.runDocumentConsumers",
      "operationClass": "org.nuxeo.importer.stream.automation.DocumentConsumers",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "rootFolder",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "batchSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "batchThresholdS",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "blockAsyncListeners",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "blockDefaultSyncListeners",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "blockIndexing",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "blockPostCommitListeners",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nbThreads",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "repositoryName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "retryDelayS",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "retryMax",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "useBulkMode",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "waitMessageTimeoutSeconds",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": "9.1",
      "url": "StreamImporter.runDocumentConsumers",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.importer.stream.automation.contrib",
      "description": "Produces blobs from a list of files.",
      "hierarchyPath": "/op:StreamImporter.runFileBlobProducers",
      "label": "Produces blobs from a list of files",
      "name": "StreamImporter.runFileBlobProducers",
      "operationClass": "org.nuxeo.importer.stream.automation.FileBlobProducers",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "listFile",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "basePath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nbBlobs",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nbThreads",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": "10.2",
      "url": "StreamImporter.runFileBlobProducers",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.importer.stream.automation.contrib",
      "description": "Produces random blobs in a Log.",
      "hierarchyPath": "/op:StreamImporter.runRandomBlobProducers",
      "label": "Produces random blobs",
      "name": "StreamImporter.runRandomBlobProducers",
      "operationClass": "org.nuxeo.importer.stream.automation.RandomBlobProducers",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "nbBlobs",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "avgBlobSizeKB",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "blobMarker",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nbThreads",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": "9.1",
      "url": "StreamImporter.runRandomBlobProducers",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.importer.stream.automation.contrib",
      "description": "Produces random blobs in a Log.",
      "hierarchyPath": "/op:StreamImporter.runRandomDocumentProducers",
      "label": "Produces random blobs",
      "name": "StreamImporter.runRandomDocumentProducers",
      "operationClass": "org.nuxeo.importer.stream.automation.RandomDocumentProducers",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "nbDocuments",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "avgBlobSizeKB",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "countFolderAsDocument",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logBlobInfo",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "logSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nbThreads",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": "9.1",
      "url": "StreamImporter.runRandomDocumentProducers",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.tag.operations.contrib",
      "description": "Get tag suggestion",
      "hierarchyPath": "/op:Tag.Suggestion",
      "label": "Get tag suggestion",
      "name": "Tag.Suggestion",
      "operationClass": "org.nuxeo.ecm.platform.tag.automation.SuggestTagEntry",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "document",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "searchTerm",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "value",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Tag.Suggestion",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.ApplyMappingOnTask"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Applies the mapping passed in parameter on the task document. The sourceDoc in the mapping is the input document in the workflow. The operation throws a NuxeoException if the input document is not a Task.",
      "hierarchyPath": "/op:Task.ApplyDocumentMapping",
      "label": "Apply mapping on input task doc",
      "name": "Task.ApplyDocumentMapping",
      "operationClass": "org.nuxeo.ecm.platform.routing.api.operation.MapPropertiesOnTaskOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "mappingName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "document",
        "document"
      ],
      "since": null,
      "url": "Task.ApplyDocumentMapping",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Workflow.CreateTask"
      ],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.automation.task.contrib",
      "description": "Enable to create a task bound to the document. <p><b>Directive</b>, <b>comment</b> and <b>due date</b> will be displayed in the task list of the user. In <b>accept operation chain</b> and <b>reject operation chain</b> fields, you can put the operation chain ID of your choice among the one you contributed. Those operations will be executed when the user validates the task, depending on  whether he accepts or rejects the task. You have to specify a variable name (the <b>key for ... </b> parameter) to resolve target users and groups to which the task will be assigned. You can use Get Users and Groups to update a context variable with some users and groups. If you check <b>create one task per actor</b>, each of the actors will have a task to achieve, versus \"the first who achieve the task makes it disappear for the others\".</p>",
      "hierarchyPath": "/op:Task.Create",
      "label": "Create task",
      "name": "Task.Create",
      "operationClass": "org.nuxeo.ecm.automation.task.CreateTask",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "task name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "due date",
          "order": 1,
          "type": "date",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "directive",
          "order": 2,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "comment",
          "order": 3,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "accept operation chain",
          "order": 4,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "reject operation chain",
          "order": 5,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "variable name for actors prefixed ids",
          "order": 6,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "additional list of actors prefixed ids",
          "order": 7,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "create one task per actor",
          "order": 8,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": "5.3.2",
      "url": "Task.Create",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Workflow.GetTask"
      ],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.automation.task.contrib",
      "description": "List tasks assigned to this user or one of its group.Task properties are serialized using JSON and returned in a Blob.",
      "hierarchyPath": "/op:Task.GetAssigned",
      "label": "Get user tasks",
      "name": "Task.GetAssigned",
      "operationClass": "org.nuxeo.ecm.automation.task.GetUserTasks",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": "5.4",
      "url": "Task.GetAssigned",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.platform.TemplateSources.operations",
      "description": "Detach a template from all its bound documents.",
      "hierarchyPath": "/op:TemplateProcessor.Detach",
      "label": "Detach a template",
      "name": "TemplateProcessor.Detach",
      "operationClass": "org.nuxeo.template.automation.DetachTemplateOperation",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "void"
      ],
      "since": null,
      "url": "TemplateProcessor.Detach",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.platform.TemplateSources.operations",
      "description": "Render the target document with the associated template if any. Returns the rendered Blob or the main Blob if no template is associated to the document.",
      "hierarchyPath": "/op:TemplateProcessor.Render",
      "label": "Render with template",
      "name": "TemplateProcessor.Render",
      "operationClass": "org.nuxeo.template.automation.RenderWithTemplateOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "attach",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "save",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "serializer",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "store",
          "order": 0,
          "type": "boolean",
          "values": [
            "false"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "templateData",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "templateName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob"
      ],
      "since": null,
      "url": "TemplateProcessor.Render",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Retrieve trace associated to a Chain or an Operation",
      "hierarchyPath": "/op:Traces.Get",
      "label": "Traces.getTrace",
      "name": "Traces.Get",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.traces.AutomationTraceGetOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "index",
          "order": 0,
          "type": "int",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "traceKey",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "string"
      ],
      "since": null,
      "url": "Traces.Get",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Execution Context",
      "contributingComponent": "org.nuxeo.ecm.core.automation.coreContrib",
      "description": "Toggle Automation call tracing (you can set the 'enableTrace' parameter if you want to explicitly set the traceEnable value",
      "hierarchyPath": "/op:Traces.ToggleRecording",
      "label": "Traces.toggleRecording",
      "name": "Traces.ToggleRecording",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.traces.AutomationTraceToggleOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "enableTrace",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "readOnly",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "boolean"
      ],
      "since": null,
      "url": "Traces.ToggleRecording",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Services.CreateUser"
      ],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Create or Update User.",
      "hierarchyPath": "/op:User.CreateOrUpdate",
      "label": "Create or Update User",
      "name": "User.CreateOrUpdate",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.users.CreateOrUpdateUser",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "username",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "company",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "email",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "firstName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "groups",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lastName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "mode",
          "order": 0,
          "type": "string",
          "values": [
            "createOrUpdate",
            "create",
            "update"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "password",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "properties",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "tenantId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "User.CreateOrUpdate",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "NuxeoPrincipal.Get"
      ],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Retrieve Nuxeo principal and export it as a DocumentModel, if login parameter is not set the Operation will return informations about the current user, otherwise Directory Administration rights are required.",
      "hierarchyPath": "/op:User.Get",
      "label": "Get Nuxeo Principal",
      "name": "User.Get",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.users.GetNuxeoPrincipal",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "login",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "document"
      ],
      "since": null,
      "url": "User.Get",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Collection.GetCollections"
      ],
      "category": "Document",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Get the list of all the collections visible by the currentUser. This is returning a list of collections.",
      "hierarchyPath": "/op:User.GetCollections",
      "label": "Get collections",
      "name": "User.GetCollections",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.collections.GetCollectionsOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "searchTerm",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "documents"
      ],
      "since": null,
      "url": "User.GetCollections",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "UserWorkspace.Get"
      ],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Retrieve user's personal workspace.",
      "hierarchyPath": "/op:User.GetUserWorkspace",
      "label": "Get Home",
      "name": "User.GetUserWorkspace",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.UserWorkspace",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "document"
      ],
      "since": null,
      "url": "User.GetUserWorkspace",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Stores a registration request and returns its ID.",
      "hierarchyPath": "/op:User.Invite",
      "label": "Invite a user",
      "name": "User.Invite",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.UserInvite",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "autoAccept",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "comment",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "info",
          "order": 0,
          "type": "map",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "validationMethod",
          "order": 0,
          "type": "validationmethod",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "nuxeoprincipal",
        "string"
      ],
      "since": null,
      "url": "User.Invite",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Services.QueryUsers"
      ],
      "category": "Users & Groups",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Query users on a combination of their username, firstName and lastName fields, or on any of them (pattern).",
      "hierarchyPath": "/op:User.Query",
      "label": "Query users",
      "name": "User.Query",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.users.QueryUsers",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "firstName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lastName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pattern",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "tenantId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "username",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "User.Query",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Get the user/group list of the running instance. This is returning a blob containing a serialized JSON array..",
      "hierarchyPath": "/op:UserGroup.Suggestion",
      "label": "Get user/group suggestion",
      "name": "UserGroup.Suggestion",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.users.SuggestUserEntries",
      "params": [
        {
          "description": "Whether to take into account subgroups when evaluating groupRestriction.",
          "isRequired": false,
          "name": "allowSubGroupsRestriction",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "displayEmailInSuggestion",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "firstLabelField",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "Enter the id of a group to suggest only user from this group.",
          "isRequired": false,
          "name": "groupRestriction",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": "If set, remove all administrator groups from the suggestions",
          "isRequired": false,
          "name": "hideAdminGroups",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "hideFirstLabel",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "hideIcon",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": "If set, remove power users group from the suggestions",
          "isRequired": false,
          "name": "hidePowerUsersGroup",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "hideSecondLabel",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "hideThirdLabel",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "lang",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "searchTerm",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "searchType",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "secondLabelField",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "thirdLabelField",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "userSuggestionMaxSearchResults",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "UserGroup.Suggestion",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.platform.userworkspace.operationsContrib",
      "description": "Create Document(s) in the user's workspace from Blob(s) using the FileManagerService.",
      "hierarchyPath": "/op:UserWorkspace.CreateDocumentFromBlob",
      "label": "Create Document from file in User's workspace",
      "name": "UserWorkspace.CreateDocumentFromBlob",
      "operationClass": "org.nuxeo.ecm.platform.userworkspace.operations.UserWorkspaceCreateFromBlob",
      "params": [],
      "requires": null,
      "signature": [
        "bloblist",
        "documents",
        "blob",
        "document"
      ],
      "since": null,
      "url": "UserWorkspace.CreateDocumentFromBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": null,
      "hierarchyPath": "/op:VersionAndAttachFile",
      "label": "VersionAndAttachFile",
      "name": "VersionAndAttachFile",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "bloblist",
        "document"
      ],
      "since": null,
      "url": "VersionAndAttachFile",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": null,
      "hierarchyPath": "/op:VersionAndAttachFiles",
      "label": "VersionAndAttachFiles",
      "name": "VersionAndAttachFiles",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "bloblist",
        "document"
      ],
      "since": null,
      "url": "VersionAndAttachFiles",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.video.tools.operations",
      "description": "Watermark the video with the picture stored in file:content of watermark, at the position(x, y) from the left-top corner of the picture.",
      "hierarchyPath": "/op:Video.AddWatermark",
      "label": "Watermarks a Video with a Picture",
      "name": "Video.AddWatermark",
      "operationClass": "org.nuxeo.ecm.platform.video.tools.operations.AddWatermarkToVideo",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "watermark",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "x",
          "order": 0,
          "type": "string",
          "values": [
            "0"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "y",
          "order": 0,
          "type": "string",
          "values": [
            "0"
          ],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist",
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "Video.AddWatermark",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Files",
      "contributingComponent": "org.nuxeo.ecm.video.tools.operations",
      "description": "Merge 2-n videos in one.",
      "hierarchyPath": "/op:Video.Concat",
      "label": "Joins two or more videos sequentially.",
      "name": "Video.Concat",
      "operationClass": "org.nuxeo.ecm.platform.video.tools.operations.ConcatVideos",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "bloblist",
        "blob",
        "documents",
        "blob"
      ],
      "since": null,
      "url": "Video.Concat",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.video.tools.operations",
      "description": "Extracts the closed captions from the whole video or from a part of it when startAt and end time is provided. The output format references how the output is generated, and xpath can be used to indicate the video blob when using documents.",
      "hierarchyPath": "/op:Video.ExtractClosedCaptions",
      "label": "Extracts closed captions from the video.",
      "name": "Video.ExtractClosedCaptions",
      "operationClass": "org.nuxeo.ecm.platform.video.tools.operations.ExtractClosedCaptionsFromVideo",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "endAt",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "outFormat",
          "order": 0,
          "type": "string",
          "values": [
            "ttxt",
            "srt",
            "txt"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "startAt",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist",
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "Video.ExtractClosedCaptions",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.video.tools.operations",
      "description": "SliceVideo the input blob starting at startAt, for a certain duration. The duration and startAt arguments are optional, but not simultaneously. A specific converter can be used.",
      "hierarchyPath": "/op:Video.Slice",
      "label": "SliceVideo the video for a given duration and startAt time.",
      "name": "Video.Slice",
      "operationClass": "org.nuxeo.ecm.platform.video.tools.operations.SliceVideo",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "duration",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "encode",
          "order": 0,
          "type": "boolean",
          "values": [
            "true"
          ],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "startAt",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "blob",
        "bloblist",
        "bloblist",
        "document",
        "blob",
        "documents",
        "bloblist"
      ],
      "since": null,
      "url": "Video.Slice",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Conversion",
      "contributingComponent": "org.nuxeo.ecm.video.tools.operations",
      "description": "Slices the video in n parts of approximately the same duration each.",
      "hierarchyPath": "/op:Video.SliceInParts",
      "label": "SliceVideo a Video in Parts with equal duration.",
      "name": "Video.SliceInParts",
      "operationClass": "org.nuxeo.ecm.platform.video.tools.operations.SliceVideoInParts",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "duration",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "blob",
        "bloblist",
        "document",
        "bloblist"
      ],
      "since": null,
      "url": "Video.SliceInParts",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.core.automation.features.operations",
      "description": "Try to execute again Works that have been send to a dead letter queue by the WorkManager after failure",
      "hierarchyPath": "/op:WorkManager.RunWorkInFailure",
      "label": "Executes Works stored in the dead letter queue",
      "name": "WorkManager.RunWorkInFailure",
      "operationClass": "org.nuxeo.ecm.automation.core.operations.services.workmanager.WorkManagerRunWorkInFailure",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "categoryFilter",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "dryRun",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "timeoutSeconds",
          "order": 0,
          "type": "long",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "WorkManager.RunWorkInFailure",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.GetOpenTasks"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Returns all open tasks for the input document(s). If the operation is invoked with parameters, all tasks instances for the given 'processId' originating from the given 'nodeId' are returned. The 'processId' is the id of the document representing the workflow instance. The parameter 'username' is used to fetch only tasks assigned to the given user. Tasks are queried using an unrestricted session.",
      "hierarchyPath": "/op:Workflow.GetOpenTasks",
      "label": "Get open tasks",
      "name": "Workflow.GetOpenTasks",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.GetOpenTasksOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "nodeId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "processId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "username",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "document",
        "documents",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "Workflow.GetOpenTasks",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Workflow.ResumeNodeOperation"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Resumes a route instance on a given node. When a parameter is not specified, it will be fetched from the current context if the operation is executed in the context of a running workflow (it applies to the current workflow and to the current node).",
      "hierarchyPath": "/op:Workflow.ResumeNode",
      "label": "Resume workflow",
      "name": "Workflow.ResumeNode",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.ResumeNodeOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "nodeId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "workflowInstanceId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Workflow.ResumeNode",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.SetWorkflowNodeVar"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Set a workflow node variable given a name and the value in the context of a running workflow. To compute the value at runtime from the current context you should use an EL expression as the value. This operation works on any input type and return back the input as the output.",
      "hierarchyPath": "/op:Workflow.SetNodeVariable",
      "label": "Set Node Variable",
      "name": "Workflow.SetNodeVariable",
      "operationClass": "org.nuxeo.ecm.platform.routing.api.operation.SetWorkflowNodeVar",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "name",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "value",
          "order": 0,
          "type": "object",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "Workflow.SetNodeVariable",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Services",
      "contributingComponent": "org.nuxeo.ecm.automation.task.contrib",
      "description": "Returns the tasks waiting for the current user.",
      "hierarchyPath": "/op:Workflow.UserTaskPageProvider",
      "label": "UserTaskPageProvider",
      "name": "Workflow.UserTaskPageProvider",
      "operationClass": "org.nuxeo.ecm.automation.task.UserTaskPageProviderOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "language",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "page",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pageSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "Workflow.UserTaskPageProvider",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Context.CancelWorkflow"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Cancel the workflow with the given id, where the required id is the id of the document representing the workflow instance.",
      "hierarchyPath": "/op:WorkflowInstance.Cancel",
      "label": "Cancel workflow",
      "name": "WorkflowInstance.Cancel",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.CancelWorkflowOperation",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "id",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "WorkflowInstance.Cancel",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "BulkRestartWorkflow"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Bulk operation to restart workflows.",
      "hierarchyPath": "/op:WorkflowModel.BulkRestartInstances",
      "label": "Bulk Restart Workflow",
      "name": "WorkflowModel.BulkRestartInstances",
      "operationClass": "org.nuxeo.ecm.platform.routing.api.operation.BulkRestartWorkflow",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "workflowId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "batchSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nodeId",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "reinitLifecycle",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "WorkflowModel.BulkRestartInstances",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [
        "Workflow.CompleteTaskOperation"
      ],
      "category": "Workflow Context",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operations",
      "description": "Completes the input task. If this is the last task the workflow will continue. Returns back the task document. \"Status\" is the id of the button the user would have clicked to submit the task form (if the outgoing transitions of the workflow node that created the task have conditions depending on it).@since 5.9.3 and 5.8.0-HF11 you can set multiple  node or workflow variables when completing the task (also similar to ending the task via form submision from the UI).The variables are specified as <i>key=value</i> pairs separated by a new line.To specify multi-line values you can use a \\ character followed by a new line. <p>Example:<pre>description=foo bar</pre>For updating a date, you will need to expose the value as ISO 8601 format, for instance : <p>Example:<pre>workflowVarString=A sample value<br>workflowVarDate=@{org.nuxeo.ecm.core.schema.utils.DateParser.formatW3CDateTime(CurrentDate.date)}</pre><p>For all values, you have to submit a JSON representation. This is an example for a variable of type StringList:<p><pre>nodeVarList = [\"John Doe\", \"John Test\"]</pre></p>",
      "hierarchyPath": "/op:WorkflowTask.Complete",
      "label": "Complete task",
      "name": "WorkflowTask.Complete",
      "operationClass": "org.nuxeo.ecm.platform.routing.core.api.operation.CompleteTaskOperation",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "comment",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "nodeVariables",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "status",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "workflowVariables",
          "order": 0,
          "type": "properties",
          "values": [],
          "widget": null
        }
      ],
      "requires": "Workflow",
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "WorkflowTask.Complete",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.comment.workflow.operation.contrib",
      "description": null,
      "hierarchyPath": "/op:acceptComment",
      "label": "acceptComment",
      "name": "acceptComment",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "acceptComment",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.rendition.contrib",
      "description": null,
      "hierarchyPath": "/op:blobToPDF",
      "label": "blobToPDF",
      "name": "blobToPDF",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "blobToPDF",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:cancelWorkflow",
      "label": "cancelWorkflow",
      "name": "cancelWorkflow",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "cancelWorkflow",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.rendition.contrib",
      "description": null,
      "hierarchyPath": "/op:containerContentBlob",
      "label": "containerContentBlob",
      "name": "containerContentBlob",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "containerContentBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:initInitiatorComment",
      "label": "initInitiatorComment",
      "name": "initInitiatorComment",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "initInitiatorComment",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "javascript",
      "contributingComponent": "org.nuxeo.platform.TemplateSources.operations",
      "description": "Filter templates according to the type of a given input document.",
      "hierarchyPath": "/op:javascript.FilterTemplatesByType",
      "label": "javascript.FilterTemplatesByType",
      "name": "javascript.FilterTemplatesByType",
      "operationClass": "org.nuxeo.automation.scripting.internals.ScriptingOperationImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "documents"
      ],
      "since": null,
      "url": "javascript.FilterTemplatesByType",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "javascript",
      "contributingComponent": "org.nuxeo.platform.TemplateSources.operations",
      "description": "Render a document with a given template and converts it to PDF.",
      "hierarchyPath": "/op:javascript.RenderPdf",
      "label": "javascript.RenderPdf",
      "name": "javascript.RenderPdf",
      "operationClass": "org.nuxeo.automation.scripting.internals.ScriptingOperationImpl",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "templateName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "attach",
          "order": 0,
          "type": "boolean",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "templateData",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "requires": null,
      "signature": [
        "document",
        "blob"
      ],
      "since": null,
      "url": "javascript.RenderPdf",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:logInAudit",
      "label": "logInAudit",
      "name": "logInAudit",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "logInAudit",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.rendition.contrib",
      "description": null,
      "hierarchyPath": "/op:mainBlob",
      "label": "mainBlob",
      "name": "mainBlob",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "mainBlob",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:nextAssignee",
      "label": "nextAssignee",
      "name": "nextAssignee",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "nextAssignee",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:notifyInitiatorEndOfWorkflow",
      "label": "notifyInitiatorEndOfWorkflow",
      "name": "notifyInitiatorEndOfWorkflow",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "notifyInitiatorEndOfWorkflow",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:reinitAssigneeComment",
      "label": "reinitAssigneeComment",
      "name": "reinitAssigneeComment",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "reinitAssigneeComment",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.comment.workflow.operation.contrib",
      "description": null,
      "hierarchyPath": "/op:rejectComment",
      "label": "rejectComment",
      "name": "rejectComment",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "rejectComment",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:terminateWorkflow",
      "label": "terminateWorkflow",
      "name": "terminateWorkflow",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "terminateWorkflow",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.routing.operation.chains",
      "description": null,
      "hierarchyPath": "/op:updateCommentsOnDoc",
      "label": "updateCommentsOnDoc",
      "name": "updateCommentsOnDoc",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "void"
      ],
      "since": null,
      "url": "updateCommentsOnDoc",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:validateDocument",
      "label": "validateDocument",
      "name": "validateDocument",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "validateDocument",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "studio.extensions.nuxeo-routing-default",
      "description": null,
      "hierarchyPath": "/op:voidChain",
      "label": "voidChain",
      "name": "voidChain",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "document",
        "document",
        "documents",
        "documents"
      ],
      "since": null,
      "url": "voidChain",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.rendition.contrib",
      "description": null,
      "hierarchyPath": "/op:xmlExportRendition",
      "label": "xmlExportRendition",
      "name": "xmlExportRendition",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "xmlExportRendition",
      "version": "2025.7.12"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Chain",
      "contributingComponent": "org.nuxeo.ecm.platform.rendition.contrib",
      "description": null,
      "hierarchyPath": "/op:zipTreeExportRendition",
      "label": "zipTreeExportRendition",
      "name": "zipTreeExportRendition",
      "operationClass": "org.nuxeo.ecm.automation.core.impl.OperationChainCompiler.CompiledChainImpl",
      "params": [],
      "requires": null,
      "signature": [
        "void",
        "blob"
      ],
      "since": null,
      "url": "zipTreeExportRendition",
      "version": "2025.7.12"
    }
  ],
  "packages": [
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.core.storage.binarymanager.common",
        "org.nuxeo.ecm.core.storage.binarymanager.s3",
        "org.nuxeo.runtime.aws"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/amazon-s3-online-storage-2025.7.12",
      "id": "amazon-s3-online-storage-2025.7.12",
      "name": "amazon-s3-online-storage",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Amazon S3 Online Storage",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.platform.login.cas2"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/cas2-authentication-2025.7.12",
      "id": "cas2-authentication-2025.7.12",
      "name": "cas2-authentication",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "CAS2 Authentication",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "nuxeo-easyshare-core"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/easyshare-2025.7.12",
      "id": "easyshare-2025.7.12",
      "name": "easyshare",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "EasyShare",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "com.nuxeo.ecm.annotation.arender.core",
        "com.nuxeo.ecm.annotation.arender.restapi",
        "com.nuxeo.ecm.annotation.arender.web.ui"
      ],
      "conflicts": [],
      "dependencies": [
        "nuxeo-web-ui"
      ],
      "hierarchyPath": "/nuxeo-arender-2025.0.4",
      "id": "nuxeo-arender-2025.0.4",
      "name": "nuxeo-arender",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo Enhanced Viewer Connector",
      "version": "2025.0.4"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.coldstorage",
        "nuxeo-coldstorage-web"
      ],
      "conflicts": [],
      "dependencies": [
        "amazon-s3-online-storage",
        "nuxeo-web-ui"
      ],
      "hierarchyPath": "/nuxeo-coldstorage-2025.0.14",
      "id": "nuxeo-coldstorage-2025.0.14",
      "name": "nuxeo-coldstorage",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo Cold Storage",
      "version": "2025.0.14"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.csv.core"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-csv-2025.7.12",
      "id": "nuxeo-csv-2025.7.12",
      "name": "nuxeo-csv",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo CSV",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.drive.core",
        "org.nuxeo.drive.elasticsearch",
        "org.nuxeo.drive.operations",
        "org.nuxeo.drive.rest.api"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-drive-2025.7.12",
      "id": "nuxeo-drive-2025.7.12",
      "name": "nuxeo-drive",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo Drive",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.platform.mail"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-imap-connector-2025.7.12",
      "id": "nuxeo-imap-connector-2025.7.12",
      "name": "nuxeo-imap-connector",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo IMAP Connector",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.liveconnect"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-liveconnect-2025.7.12",
      "id": "nuxeo-liveconnect-2025.7.12",
      "name": "nuxeo-liveconnect",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo Live Connect",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.multi.tenant"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-multi-tenant-2025.7.12",
      "id": "nuxeo-multi-tenant-2025.7.12",
      "name": "nuxeo-multi-tenant",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo Multi Tenant",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.platform.importer.core",
        "org.nuxeo.ecm.platform.importer.rest",
        "org.nuxeo.importer.stream"
      ],
      "conflicts": [
        "nuxeo-scan-importer"
      ],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-platform-importer-2025.7.12",
      "id": "nuxeo-platform-importer-2025.7.12",
      "name": "nuxeo-platform-importer",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Bulk document importer",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.quota"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-quota-2025.7.12",
      "id": "nuxeo-quota-2025.7.12",
      "name": "nuxeo-quota",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo Quota",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.retention.core",
        "nuxeo-retention-web"
      ],
      "conflicts": [],
      "dependencies": [
        "nuxeo-web-ui"
      ],
      "hierarchyPath": "/nuxeo-retention-2025.0.8",
      "id": "nuxeo-retention-2025.0.8",
      "name": "nuxeo-retention",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo Retention",
      "version": "2025.0.8"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.platform.signature.api",
        "org.nuxeo.ecm.platform.signature.config",
        "org.nuxeo.ecm.platform.signature.core"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-signature-2025.7.12",
      "id": "nuxeo-signature-2025.7.12",
      "name": "nuxeo-signature",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Digital Signature",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.template.manager.api",
        "org.nuxeo.template.manager",
        "org.nuxeo.template.manager.jxls",
        "org.nuxeo.template.manager.rest",
        "org.nuxeo.template.manager.xdocreport"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-template-rendering-2025.7.12",
      "id": "nuxeo-template-rendering-2025.7.12",
      "name": "nuxeo-template-rendering",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Template Rendering",
      "version": "2025.7.12"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.web.ui"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/nuxeo-web-ui-2025.6.0",
      "id": "nuxeo-web-ui-2025.6.0",
      "name": "nuxeo-web-ui",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Nuxeo Web UI",
      "version": "2025.6.0"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.apidoc.core",
        "org.nuxeo.apidoc.repo",
        "org.nuxeo.apidoc.webengine"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/platform-explorer-2025.0.2",
      "id": "platform-explorer-2025.0.2",
      "name": "platform-explorer",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Platform Explorer",
      "version": "2025.0.2"
    },
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.platform.login.shibboleth",
        "org.nuxeo.usermapper"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/shibboleth-authentication-2025.7.12",
      "id": "shibboleth-authentication-2025.7.12",
      "name": "shibboleth-authentication",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Shibboleth Authentication",
      "version": "2025.7.12"
    }
  ],
  "pluginSnapshots": {},
  "releaseDate": 1756719801434,
  "version": "2025.7"
}