Interface MorpheusDataService<M extends MorpheusModel,I extends MorpheusModel>

Type Parameters:
M - The MorpheusModel class type for this service to query against
All Known Subinterfaces:
MorpheusAccountCertificateService, MorpheusAccountCredentialService, MorpheusAccountCredentialTypeService, MorpheusAccountDiscoveryService, MorpheusAccountIntegrationService, MorpheusAccountInventoryService, MorpheusAccountInvoiceItemService, MorpheusAccountInvoiceService, MorpheusAccountPriceService, MorpheusAccountPriceSetService, MorpheusAccountResourceService, MorpheusAccountResourceTypeService, MorpheusAppService, MorpheusBackupJobService, MorpheusBackupProviderService, MorpheusBackupProviderTypeService, MorpheusBackupRestoreService, MorpheusBackupResultService, MorpheusBackupService, MorpheusBackupTypeService, MorpheusCloudFolderService, MorpheusCloudPoolService, MorpheusCloudRegionService, MorpheusCloudService, MorpheusCloudTypeService, MorpheusCodeRepositoryService, MorpheusComputePortService, MorpheusComputeServerAccessService, MorpheusComputeServerInterfaceService, MorpheusComputeServerService, MorpheusComputeSiteService, MorpheusComputeTypeSetService, MorpheusContainerTypeService, MorpheusDashboardService, MorpheusDatastoreService, MorpheusEnvironmentVariableTypeService, MorpheusInstanceScaleService, MorpheusInstanceScaleTypeService, MorpheusInstanceService, MorpheusInstanceThresholdService, MorpheusInstanceTypeLayoutService, MorpheusInstanceTypeLayoutService, MorpheusInstanceTypeService, MorpheusKeyPairService, MorpheusLoadBalancerInstanceService, MorpheusLoadBalancerMonitorService, MorpheusLoadBalancerNodeService, MorpheusLoadBalancerPolicyService, MorpheusLoadBalancerPoolService, MorpheusLoadBalancerProfileService, MorpheusLoadBalancerScriptService, MorpheusLoadBalancerService, MorpheusLoadBalancerTypeService, MorpheusMetadataTagService, MorpheusMetadataTagTypeService, MorpheusNetworkDomainRecordService, MorpheusNetworkDomainService, MorpheusNetworkPoolIpService, MorpheusNetworkPoolRangeService, MorpheusNetworkPoolService, MorpheusNetworkProxyService, MorpheusNetworkRouterService, MorpheusNetworkRouteService, MorpheusNetworkRouteTableService, MorpheusNetworkService, MorpheusNetworkSubnetService, MorpheusNetworkTypeService, MorpheusOperationDataService, MorpheusOperationNotificationService, MorpheusOptionTypeService, MorpheusOsTypeService, MorpheusPermissionService, MorpheusPolicyService, MorpheusPolicyTypeService, MorpheusPricePlanPriceSetService, MorpheusPricePlanService, MorpheusProcessService, MorpheusReferenceDataService, MorpheusReplicationGroupService, MorpheusReplicationService, MorpheusReplicationSiteService, MorpheusReplicationTypeService, MorpheusResourceSpecService, MorpheusResourceSpecTemplateService, MorpheusSecurityGroupLocationService, MorpheusSecurityGroupRuleApplicationService, MorpheusSecurityGroupRuleDestinationService, MorpheusSecurityGroupRuleLocationService, MorpheusSecurityGroupRuleProfileService, MorpheusSecurityGroupRuleScopeService, MorpheusSecurityGroupRuleService, MorpheusSecurityGroupRuleSourceService, MorpheusSecurityGroupService, MorpheusServicePlanPriceSetService, MorpheusServicePlanService, MorpheusSnapshotService, MorpheusStorageBucketService, MorpheusStorageControllerService, MorpheusStorageControllerTypeService, MorpheusStorageServerService, MorpheusStorageVolumeService, MorpheusStorageVolumeTypeService, MorpheusTaskService, MorpheusTaskSetService, MorpheusUserService, MorpheusVirtualImageLocationService, MorpheusVirtualImageService, MorpheusWikiPageService, MorpheusWorkloadActionService, MorpheusWorkloadScriptService, MorpheusWorkloadScriptService, MorpheusWorkloadService, MorpheusWorkloadStateService, MorpheusWorkloadTemplateService, MorpheusWorkloadTemplateService, MorpheusWorkloadTypeConfigService, MorpheusWorkloadTypeLogService, MorpheusWorkloadTypeMountService, MorpheusWorkloadTypePortService, MorpheusWorkloadTypeService, MorpheusWorkloadTypeSetService

public interface MorpheusDataService<M extends MorpheusModel,I extends MorpheusModel>
This interface is a standard base service so all services provide consistent crud methods and finders. It features the ability to create dynamic queries using the DataQuery object. There are methods that can be implemented to provide both MorpheusModel related objects as well as Map objects for use in DatasetProvider use cases (dropdowns and type-ahead components in UI option types). An example interface that leverages this one is the MorpheusUserService

Example:


 public interface MorpheusUserService extends MorpheusDataService<User>, MorpheusIdentityService<UserIdentity> {

 }
 
Often times this interface is used in conjunction with the MorpheusIdentityService for providing an efficient way to sync objects via the MorpheusIdentityService.listIdentityProjections(DataQuery) method. Another implementation also exists for synchronous non rxjava querying of the objects called the MorpheusSynchronousDataService. Typically, both should be implemented for use within the plugin api.
Since:
0.15.1
See Also:
  • Method Summary

    Modifier and Type
    Method
    Description
    io.reactivex.rxjava3.core.Single<BulkCreateResult<M>>
    bulkCreate(List<M> items)
    Persists a collection of new model objects in a batch to the Morpheus database.
    io.reactivex.rxjava3.core.Single<BulkRemoveResult<I>>
    bulkRemove(List<I> items)
    Removes a collection of previously created model objects in a batch to the Morpheus database.
    io.reactivex.rxjava3.core.Single<BulkSaveResult<M>>
    bulkSave(List<M> items)
    Persists a collection of previously created model objects in a batch to the Morpheus database.
    io.reactivex.rxjava3.core.Single<Long>
    Performs a query operation based on the filters set in the DataQuery object passed and returns a simple total count of the results.
    default io.reactivex.rxjava3.core.Single<Boolean>
    create(List<M> items)
    Deprecated. 
    io.reactivex.rxjava3.core.Single<M>
    create(M item)
    Persists a new model object into the Morpheus database.
    default io.reactivex.rxjava3.core.Maybe<M>
    find(DataQuery query)
    Performs a query operation on the database returning the first result as a MorpheusModel object.
    io.reactivex.rxjava3.core.Maybe<M>
    get(Long id)
    Fetches a single MorpheusModel by its Identifier (id) field.
    io.reactivex.rxjava3.core.Observable<M>
    list(DataQuery query)
    Performs a query operation on the database returning the results as MorpheusModel objects.
    io.reactivex.rxjava3.core.Observable<M>
    Fetches a stream of MorpheusModel objects based on a collection of Identifiers (id).
    io.reactivex.rxjava3.core.Observable<Map>
    Performs a query operation on the database returning the results as Map objects typically containing keys of (name,value) for use in dropdown or type-ahead components within the UI.
    io.reactivex.rxjava3.core.Single<Boolean>
    remove(I item)
    Removes a persisted MorpheusModel object from the database.
    default io.reactivex.rxjava3.core.Single<Boolean>
    remove(List<I> items)
    Deprecated. 
    default io.reactivex.rxjava3.core.Single<Boolean>
    save(List<M> items)
    Deprecated. 
    io.reactivex.rxjava3.core.Single<M>
    save(M item)
    Persists any changes to an existing MorpheusModel object.
    io.reactivex.rxjava3.core.Single<DataQueryResult>
    Performs a query operation on the database just like list(DataQuery) with a query, but the result is no longer a stream of individual MorpheusModel.
  • Method Details

    • create

      io.reactivex.rxjava3.core.Single<M> create(M item)
      Persists a new model object into the Morpheus database. It is important to note that when persisting more than a single object of the same type, a batch create method also exists. This is useful in batch syncing for efficient operation.

      Note: this is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Parameters:
      item - the MorpheusModel object we want to persist into the database.
      Returns:
      a Single subscribable representation of the saved object including its new persisted id.
    • bulkCreate

      io.reactivex.rxjava3.core.Single<BulkCreateResult<M>> bulkCreate(List<M> items)
      Persists a collection of new model objects in a batch to the Morpheus database. This is very useful for bulk sync operations. For optimal efficiency 50-100 objects at a time is best. More than this will throw a warning.

      Note: this is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Parameters:
      items - a collection of MorpheusModel objects we want to persist into the database. These are supposed to be non previously saved objects.
      Returns:
      a BulkCreateResult containing information on the items that were successfully persisted as well as the ones that failed.
    • create

      @Deprecated default io.reactivex.rxjava3.core.Single<Boolean> create(List<M> items)
      Deprecated.
      Persists a collection of new model objects in a batch to the Morpheus database. This is very useful for bulk sync operations. For optimal efficiency 50-100 objects at a time is best. More than this will throw a warning.

      Note: this is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Parameters:
      items - a collection of MorpheusModel objects we want to persist into the database. These are supposed to be non previously saved objects.
      Returns:
      a Boolean flag that is only true if all objects successfully saved
      See Also:
    • save

      io.reactivex.rxjava3.core.Single<M> save(M item)
      Persists any changes to an existing MorpheusModel object. These objects should already have an Identifier property populated so that it can update it in the database (typically the id property).

      Note: this is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Parameters:
      item - the previously existing MorpheusModel object we want to persist into the database.
      Returns:
      a Single subscribable representation of the saved object.
    • bulkSave

      io.reactivex.rxjava3.core.Single<BulkSaveResult<M>> bulkSave(List<M> items)
      Persists a collection of previously created model objects in a batch to the Morpheus database. This is very useful for bulk sync operations. For optimal efficiency 50-100 objects at a time is best. More than this will throw a warning.

      Note: this is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Parameters:
      items - a collection of previously created MorpheusModel objects we want to persist into the database.
      Returns:
      a BulkUpdateResult containing information on the items that were successfully persisted as well as the ones that failed.
    • save

      @Deprecated default io.reactivex.rxjava3.core.Single<Boolean> save(List<M> items)
      Deprecated.
      Persists a collection of previously created model objects in a batch to the Morpheus database. This is very useful for bulk sync operations. For optimal efficiency 50-100 objects at a time is best. More than this will throw a warning.

      Note: this is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Parameters:
      items - a collection of previously created MorpheusModel objects we want to persist into the database.
      Returns:
      a Boolean flag stating the full success or not of the save operation
      See Also:
    • remove

      io.reactivex.rxjava3.core.Single<Boolean> remove(I item)
      Removes a persisted MorpheusModel object from the database.

      Note: this is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Parameters:
      item - the previously existing MorpheusModel object to be removed from the database.
      Returns:
      a single Boolean object that will confirm the success or failure of the removal
    • bulkRemove

      io.reactivex.rxjava3.core.Single<BulkRemoveResult<I>> bulkRemove(List<I> items)
      Removes a collection of previously created model objects in a batch to the Morpheus database. This is very useful for bulk sync operations. For optimal efficiency 50-100 objects at a time is best. More than this will throw a warning.

      Note: this is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Parameters:
      items - a collection of previously created MorpheusModel objects we want to remove from the database.
      Returns:
      a BulkRemoveResult containing information on the items that were failed to be removed.
    • remove

      @Deprecated default io.reactivex.rxjava3.core.Single<Boolean> remove(List<I> items)
      Deprecated.
      Removes a collection of previously created model objects in a batch to the Morpheus database. This is very useful for bulk sync operations. For optimal efficiency 50-100 objects at a time is best. More than this will throw a warning.

      Note: this is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Parameters:
      items - a collection of previously created MorpheusModel objects we want to remove from the database.
      Returns:
      a Boolean flag containing if it was fully successful or not.
      See Also:
    • count

      io.reactivex.rxjava3.core.Single<Long> count(DataQuery query)
      Performs a query operation based on the filters set in the DataQuery object passed and returns a simple total count of the results. This could be useful for paging.

      Note: This is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Note: For more information on how to query please refer to the documentation for the DataQuery class.

      Parameters:
      query - An instance of the DataQuery object used for filtering results. This should often include an account / user scope for security but does not always need to if being used for sync or multi-tenant reporting.
      Returns:
      a Single observable containing a Long value with the total count.
      See Also:
    • get

      io.reactivex.rxjava3.core.Maybe<M> get(Long id)
      Fetches a single MorpheusModel by its Identifier (id) field. For more advanced single object fetches please refer to find(DataQuery).

      Note: This is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Note: This method does not factor in any sort of access/security control and should not be used in areas where this is required.

      Parameters:
      id - the database identifier to fetch an object by.
      Returns:
      a Maybe representation of a MorpheusModel depending on if the object was found or not.
    • listById

      io.reactivex.rxjava3.core.Observable<M> listById(List<Long> ids)
      Fetches a stream of MorpheusModel objects based on a collection of Identifiers (id). This is often used in conjunction with the MorpheusIdentityService.listIdentityProjections(DataQuery) and the SyncTask for efficiently only fetching batches of objects we want to perform update operations on.

      Note: This is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Note: This method does not factor in any sort of access/security control and should not be used in areas where this is required.

      Parameters:
      ids - a collection of Identifiers (ids) to fetch the objects by.
      Returns:
      an Observable stream of MorpheusModel objects based on the ids passed in
    • list

      io.reactivex.rxjava3.core.Observable<M> list(DataQuery query)
      Performs a query operation on the database returning the results as MorpheusModel objects. These queries can be scoped to an AccountIdentity or UserIdentity as well as various filters on arbitrary fields in the database.

      Note: This is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Note: For more information on how to query please refer to the documentation for the DataQuery class.

      Parameters:
      query - An instance of the DataQuery object used for filtering results. This should often include an account / user scope for security but does not always need to if being used for sync or multi-tenant reporting.
      Returns:
      an Observable stream of MorpheusModel objects based on the passed in query.
    • listOptions

      io.reactivex.rxjava3.core.Observable<Map> listOptions(DataQuery query)
      Performs a query operation on the database returning the results as Map objects typically containing keys of (name,value) for use in dropdown or type-ahead components within the UI. This would typically be paired with a DatasetProvider. Queries can be scoped to an AccountIdentity or UserIdentity as well as various filters on arbitrary fields in the database.

      Note: This is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Note: For more information on how to query please refer to the documentation for the DataQuery class.

      Parameters:
      query - An instance of the DataQuery object used for filtering results. This should often include an account / user scope for security but does not always need to if being used for sync or multi-tenant reporting.
      Returns:
      an Observable stream of Map objects based on the passed in query containing name,value pairs.
    • find

      default io.reactivex.rxjava3.core.Maybe<M> find(DataQuery query)
      Performs a query operation on the database returning the first result as a MorpheusModel object. These queries can be scoped to an AccountIdentity or UserIdentity as well as various filters on arbitrary fields in the database.

      Note: This is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Note: For more information on how to query please refer to the documentation for the DataQuery class.

      Parameters:
      query - An instance of the DataQuery object used for filtering results. This should often include an account / user scope for security but does not always need to if being used for sync or multi-tenant reporting.
      Returns:
      a Maybe MorpheusModel object based on the passed in query.
    • search

      io.reactivex.rxjava3.core.Single<DataQueryResult> search(DataQuery query)
      Performs a query operation on the database just like list(DataQuery) with a query, but the result is no longer a stream of individual MorpheusModel.

      Note: This is a reactive method and will not perform any operation until subscribed or blockingGet() is called on it.

      Note: For more information on how to query please refer to the documentation for the DataQuery class.

      Parameters:
      query - An instance of the DataQuery object used for filtering results. This should often include an account / user scope for security but does not always need to if being used for sync or multi-tenant reporting.
      Returns:
      a Single DataQueryResult representing a collection of result objects along with the metadata about the result. This could be paging data for example.