cryptomator / integrations-api

API for optional services, such as system keychain integrations
GNU Affero General Public License v3.0
12 stars 4 forks source link

Integrated Service Loading #7

Closed overheadhunter closed 2 years ago

overheadhunter commented 2 years ago

This improves service loading by adding an IntegrationsLoader that uses annotations to sort and filter implementation candidates.

Furthermore static "factory" methods have been added to all current services.

Sorting

Using the @Priority(42) annotation, we can make a certain service implementation take precedence over others, allowing us to implement fallback mechanisms easily.

Filtering

This allows us (to a certain degree) to check whether a certain service implementation is suited for e.g. the current operating system (using the @OperatingSystem(Value.Windows) annotation) without actually creating an instance of said service. Further discriminators may be added on demand eventually.