/* * Copyright 2015 herd contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.finra.herd.dao; import java.util.List; import java.util.Map; import org.finra.herd.model.api.xml.BusinessObjectData; import org.finra.herd.model.api.xml.BusinessObjectDataKey; import org.finra.herd.model.api.xml.BusinessObjectDataSearchFilter; import org.finra.herd.model.api.xml.BusinessObjectFormatKey; import org.finra.herd.model.dto.StoragePolicyPriorityLevel; import org.finra.herd.model.jpa.BusinessObjectDataEntity; import org.finra.herd.model.jpa.BusinessObjectDefinitionEntity; import org.finra.herd.model.jpa.BusinessObjectFormatEntity; import org.finra.herd.model.jpa.StoragePolicyEntity; public interface BusinessObjectDataDao extends BaseJpaDao { /** * Retrieves business object data by it's key. If a format version isn't specified, the latest available format version (for this partition value) will be * used. If a business object data version isn't specified, the latest data version is returned regardless of the business object data status. * * @param businessObjectDataKey the business object data key * * @return the business object data */ public BusinessObjectDataEntity getBusinessObjectDataByAltKey(BusinessObjectDataKey businessObjectDataKey); /** * Retrieves business object data by it's key. If a format version isn't specified, the latest available format version (for this partition value) will be * used. If a business object data version isn't specified, the latest data version based on the specified business object data status is returned. When * both business object data version and business object data status both are not specified, the latest data version for each set of partition values will * be used regardless of the status. * * @param businessObjectDataKey the business object data key * @param businessObjectDataStatus the business object data status. This parameter is ignored when the business object data version is specified. * * @return the business object data */ public BusinessObjectDataEntity getBusinessObjectDataByAltKeyAndStatus(BusinessObjectDataKey businessObjectDataKey, String businessObjectDataStatus); /** * Gets a maximum available version of the specified business object data. * * @param businessObjectDataKey the business object data key * * @return the maximum available version of the specified business object data */ public Integer getBusinessObjectDataMaxVersion(BusinessObjectDataKey businessObjectDataKey); /** * Retrieves a maximum available partition value per specified parameters. * * @param partitionColumnPosition the partition column position (1-based numbering) * @param businessObjectFormatKey the business object format key (case-insensitive). If a business object format version isn't specified, the latest * available format version for each partition value will be used. * @param businessObjectDataVersion the business object data version. If a business object data version isn't specified, the latest data version based on * the specified business object data status will be used for each partition value. * @param businessObjectDataStatus the business object data status. This parameter is ignored when the business object data version is specified. * @param storageNames the optional list of storage names (case-insensitive) * @param storagePlatformType the optional storage platform type, e.g. S3 for Hive DDL. It is ignored when the list of storages is not empty * @param excludedStoragePlatformType the optional storage platform type to be excluded from search. It is ignored when the list of storages is not empty or * the storage platform type is specified * @param upperBoundPartitionValue the optional inclusive upper bound for the maximum available partition value * @param lowerBoundPartitionValue the optional inclusive lower bound for the maximum available partition value * * @return the maximum available partition value */ public String getBusinessObjectDataMaxPartitionValue(int partitionColumnPosition, BusinessObjectFormatKey businessObjectFormatKey, Integer businessObjectDataVersion, String businessObjectDataStatus, List<String> storageNames, String storagePlatformType, String excludedStoragePlatformType, String upperBoundPartitionValue, String lowerBoundPartitionValue); /** * Retrieves a minimum available partition value per specified parameters. * * @param partitionColumnPosition the partition column position (1-based numbering) * @param businessObjectFormatKey the business object format key (case-insensitive). If a business object format version isn't specified, the latest * available format version for each partition value will be used. * @param businessObjectDataVersion the business object data version. If a business object data version isn't specified, the latest data version based on * the specified business object data status will be used for each partition value. * @param businessObjectDataStatus the business object data status. This parameter is ignored when the business object data version is specified. * @param storageNames the optional list of storage names (case-insensitive) * @param storagePlatformType the optional storage platform type, e.g. S3 for Hive DDL. It is ignored when the list of storages is not empty * @param excludedStoragePlatformType the optional storage platform type to be excluded from search. It is ignored when the list of storages is not empty or * the storage platform type is specified * * @return the maximum available partition value */ public String getBusinessObjectDataMinPartitionValue(int partitionColumnPosition, BusinessObjectFormatKey businessObjectFormatKey, Integer businessObjectDataVersion, String businessObjectDataStatus, List<String> storageNames, String storagePlatformType, String excludedStoragePlatformType); /** * Returns a number of business object data instances registered with this business object format. * * @param businessObjectFormatKey the business object format key * * @return the number of business object data instances registered with this business object format */ public Long getBusinessObjectDataCount(BusinessObjectFormatKey businessObjectFormatKey); /** * Retrieves business object data versions that match the specified business object data key with potentially missing business object format and/or data * version values. * * @param businessObjectDataKey the business object data key with potentially missing business object format and/or data version values * * @return the business object data */ public List<BusinessObjectDataEntity> getBusinessObjectDataEntities(BusinessObjectDataKey businessObjectDataKey); /** * Retrieves a list of business object data entities per specified parameters. * * @param businessObjectFormatKey the business object format key (case-insensitive). If a business object format version isn't specified, the latest * available format version for each partition value will be used. * @param partitionFilters the list of partition filter to be used to select business object data instances. Each partition filter contains a list of * primary and sub-partition values in the right order up to the maximum partition levels allowed by business object data registration - with partition * values for the relative partitions not to be used for selection passed as nulls. * @param businessObjectDataVersion the business object data version. If a business object data version isn't specified, the latest data version based on * the specified business object data status is returned. * @param businessObjectDataStatus the business object data status. This parameter is ignored when the business object data version is specified. When * business object data version and business object data status both are not specified, the latest data version for each set of partition values will be * used regardless of the status. * @param storageName the name of the storage where the business object data storage unit is located (case-insensitive) * * @return the list of business object data entities sorted by partition values */ public List<BusinessObjectDataEntity> getBusinessObjectDataEntities(BusinessObjectFormatKey businessObjectFormatKey, List<List<String>> partitionFilters, Integer businessObjectDataVersion, String businessObjectDataStatus, String storageName); /** * Selects business object data having storage files associated with the specified storage and with status not listed as ignored. Only tbe business object * data records that are older than threshold minutes will be selected. * * @param storageName the storage name * @param thresholdMinutes the expiration time in minutes * @param businessObjectDataStatusesToIgnore the list of business object data statuses to ignore * * @return the list of business object data entities sorted by created on */ public List<BusinessObjectDataEntity> getBusinessObjectDataFromStorageOlderThan(String storageName, int thresholdMinutes, List<String> businessObjectDataStatusesToIgnore); /** * Retrieves a map of business object data entities to their corresponding storage policy entities, where the business object data status is supported by * the storage policy feature and the business object data alternate key values match storage policy's filter and transition (not taking into account * storage policy rules). The storage policy priority level identifies a particular storage policy priority that will be selected by the query. The returned * map is ordered by the business object data "created on" timestamp, starting with the oldest business object data entity. * * @param storagePolicyPriorityLevel the storage policy priority level * @param supportedBusinessObjectDataStatuses the list of business object data statuses that storage policies apply to * @param startPosition the position of the first result, numbered from 0 * @param maxResult the maximum number of results to retrieve * * @return the map of business object data entities to their corresponding storage policy entities */ public Map<BusinessObjectDataEntity, StoragePolicyEntity> getBusinessObjectDataEntitiesMatchingStoragePolicies( StoragePolicyPriorityLevel storagePolicyPriorityLevel, List<String> supportedBusinessObjectDataStatuses, int startPosition, int maxResult); /** * Retrieves a list of business object data by their partition value. * * @param partitionValue The partition value * * @return A list of business object data entity */ public List<BusinessObjectDataEntity> getBusinessObjectDataEntitiesByPartitionValue(String partitionValue); /** * Retrieves a list of business object data by list of filters * * @param filters search filters * * @return A list of business object data */ public List<BusinessObjectData> searchBusinessObjectData(List<BusinessObjectDataSearchFilter> filters); /** * Gets a list of keys for business object data registered under specified business object definition entity. * * @param businessObjectDefinitionEntity the business object definition entity * @param maxResults optional maximum number of results to return * * @return the list of business object data keys */ public List<BusinessObjectDataKey> getBusinessObjectDataByBusinessObjectDefinition(BusinessObjectDefinitionEntity businessObjectDefinitionEntity, Integer maxResults); /** * Gets a list of keys for business object data registered under specified business object format entity. * * @param businessObjectFormatEntity the business object format entity * @param maxResults optional maximum number of results to return * * @return the list of business object data keys */ public List<BusinessObjectDataKey> getBusinessObjectDataByBusinessObjectFormat(BusinessObjectFormatEntity businessObjectFormatEntity, Integer maxResults); }