78 lines
2.9 KiB
Java
Raw Normal View History

2019-08-31 20:51:14 -07:00
package com.linkedin.metadata.restli;
import com.linkedin.common.urn.Urn;
import com.linkedin.data.template.RecordTemplate;
import com.linkedin.data.template.StringArray;
import com.linkedin.data.template.UnionTemplate;
import com.linkedin.metadata.dao.BaseBrowseDAO;
import com.linkedin.metadata.dao.utils.QueryUtils;
2019-08-31 20:51:14 -07:00
import com.linkedin.metadata.query.BrowseResult;
import com.linkedin.metadata.query.Filter;
import com.linkedin.parseq.Task;
import com.linkedin.restli.server.annotations.Action;
import com.linkedin.restli.server.annotations.ActionParam;
import com.linkedin.restli.server.annotations.Optional;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import static com.linkedin.metadata.restli.RestliConstants.*;
/**
* A base class for the entity rest.li resource that supports CRUD + search + browse methods
2019-08-31 20:51:14 -07:00
*
* See http://go/gma for more details
2019-08-31 20:51:14 -07:00
*
* @param <KEY> the resource's key type
* @param <VALUE> the resource's value type
* @param <URN> must be a valid {@link Urn} type for the snapshot
* @param <SNAPSHOT> must be a valid snapshot type defined in com.linkedin.metadata.snapshot
* @param <ASPECT_UNION> must be a valid aspect union type supported by the snapshot
* @param <DOCUMENT> must be a valid search document type defined in com.linkedin.metadata.search
*/
public abstract class BaseBrowsableEntityResource<
// @formatter:off
KEY extends RecordTemplate,
VALUE extends RecordTemplate,
URN extends Urn,
SNAPSHOT extends RecordTemplate,
ASPECT_UNION extends UnionTemplate,
DOCUMENT extends RecordTemplate>
// @formatter:on
extends BaseSearchableEntityResource<KEY, VALUE, URN, SNAPSHOT, ASPECT_UNION, DOCUMENT> {
public BaseBrowsableEntityResource(@Nonnull Class<SNAPSHOT> snapshotClass,
@Nonnull Class<ASPECT_UNION> aspectUnionClass) {
corp-identity-gms 1.0.0 -> 1.0.25: 1.0.24: Corp user search across teams and skills 1.0.21: Make /corpGroups /gridUsers /gridGroups extend BaseEntityResource 1.0.17: Use correct util function to load resource file 1.0.16: Add ingest, backfill & getSnapshot action methods to all top-level resources in corp-identity-gms 1.0.13: Onboard search query templates on corp-identity-gms 1.0.9: Fix batch get and add client for batch get 1.0.8: Change package name for corpuser search config 1.0.7: Use search config to get autocomplete field 1.0.6: Implement searchable client 1.0.5: Auto-complete backend support 1.0.3: Add search API metadata-models 24.0.0 -> 38.1.6: 38.1.3: Index active status to corp user search index 38.1.2: Change update response to create response for create API 38.0.10: Mark BaseAspectResource as deprecated 38.0.9: Allow TYPEREF items which have primitive types for arrays in models 38.0.7: Add get-and-set-if-absent function to Local DAO 38.0.6: Add find entities with one relationship in query dao 38.0.4: Fix the inconsistency use of constants and urn params in query dao 38.0.2: Parse source map to obtain the urn 38.0.1: Search document validator in Index Builder 38.0.0: Add urns to search result metadata 37.0.7: Refactor the query dao 37.0.6: Use test models in neo4j dao 37.0.5: Drop metadata model structural assumptions made in neo4j DAOs 37.0.2: Return empty list from getBrowsePaths if browsePaths field doesn't exist 36.0.3: Drop elasticsearch-dao's metadata-models dependency 35.0.10: ES Search DAO to handle null values 35.0.5: Ebean local Dao query string match 35.0.4: Drop all search & browse configs that have been moved to individual GMS 35.0.3: Add ReportTo relationship model 35.0.0: Load resource file properly 34.0.9: Make RestliAuditor injectable 34.0.8: Use encoded query in the test resource 34.0.4: Handle empty aspects param correctly for backfill & getSnapshot actions 34.0.1: Remove corp user specific files from metadata-models 34.0.0: Add backfill & getSnapshot actions to BaseEntityResource 32.0.16: Merge data template classes into metadata-dao's main artifact 32.0.14: Replace "update" method with "ingest" action in BaseEntityResource 32.0.13: Make fliter & sortCriteria parameters optional as they should have been 32.0.12: Move AspectVersion & SnapshotKey back to their original namespaces 32.0.11: Break metadata-dao's dependency on metadata-models 32.0.10: Move model validators to a separate module 32.0.9: Extract principal from the request context for user AuditStamp 32.0.8: Fixing nullability annotations for search/autocomplete/browse resources & daos 32.0.7: Move DAO-specific models to metadata-dao module 32.0.4: Fix search finder not returning total search results count 32.0.3: Implement get_all using search index 32.0.2: Add missing nullability annotation 32.0.1: Use more consistent naming for the test models 31.0.1: Use test-specific metadata models in metadata-dao 31.0.0: Add sort order to Search Dao 30.0.2: Rename Aspect test model to AspectUnion to avoid confusion 30.0.1: Committing migration for metadata-models. 30.0.0: Add default autocomplete field in search config 29.0.16: Modify testcase to account for empty filters 29.0.15: Add searchable interface that clients can use 29.0.14: Use test-specific metadata models in ebean-dao 29.0.12: Move TestUtils to metadata-test-models module 29.0.11: Refactor all tests in metadata-restli to use test models 29.0.10: Move li-metadata-test-utils, metadata-test-models, metadata-test-utils into a new metadata-testing directory to improve code organization. Note that this is a backward compatible change as this doesn't alter the produced artifacts. 29.0.9: Move test-specific models to a stand-alone module 29.0.2: Refactor the rest of validators 28.0.3: Refactor validateSchema for aspect 28.0.2: Implement searchDao for CorpUserInfo. 27.0.16: Refactor for ModelValidation tests 27.0.10: Add new relationship union to model utils 27.0.9: Add plugin to rest client factory 27.0.6: Add rest high level factory 27.0.5: Fix a test bug when reviewing the code 27.0.4: Add create via lambda API to BaseVersionedAspectResource 27.0.2: Change return type of search finder to capture search result metadata in BaseSearchableEntityResource 27.0.1: Drop the unnecessary get method from BaseEntityResource 27.0.0: Add BaseBrowsableEntityResource 26.0.15: Add autocomplete action to BaseSearchableEntityResource 26.0.14: Add BaseSearchableEntityResource 26.0.13: Add getUrnFromDocument & urnClassForDocument util methods that are needed in future RBs 26.0.11: Add BaseVersionedAspectResource 26.0.9: Index signals associated with dataset relevance 26.0.4: Support namespace for ID generation 26.0.1: Fix inconsistent instance variable naming in SearchResult 25.0.6: Add entity-snapshot conversion 25.0.5: Use test-specific metadata models in metadata-restli 25.0.3: Add aspect filtering to BaseEntityResource 24.0.9: Add update method to BaseEntityResource 24.0.7: Fix for parameter types of getBrowsePaths action method MP_VERSION=corp-identity-gms:1.0.25 MP_VERSION=metadata-models:38.1.6 MP_VERSION=wherehows-samza:1.0.29
2019-10-02 11:08:52 -07:00
super(snapshotClass, aspectUnionClass);
2019-08-31 20:51:14 -07:00
}
Update metadata-models to head! (#1811) metadata-models 80.0.0 -> 90.0.13: 90.0.13: Roll forward: Fix the open source build by avoiding URN method that isn't part of the open source URN. 90.0.2: Refactor listUrnsFromIndex method 90.0.0: Start distinguishing between [] aspects vs null aspects input param 89.0.4: Fix the open source build by avoiding URN method that isn't part of the open source URN. 89.0.2: fix some test case name 89.0.0: META-12686: Made the MXE_v5 topics become strictly ACL'ed to avoid the wildcard write ACL as "MetadataXEvent.+" 88.0.6: change DAO to take Storage Config as input 88.0.3: Add a comment on lack of avro generation for MXEv5 + add MXEv5 to the pegasus validation task. 87.0.15: META-12651: Integrate the metadata-models-ext with metadata-models 87.0.13: add StorageConfig to Local DAO 87.0.3: Treat empty aspect vs optional aspect same until all clients are migrated 87.0.2: Treat empty aspect vs optional aspect differently 87.0.1: META-12533: Skip processing unregistered aspect specific MAE. 83.0.6: action method to return list of urns from strong consistent index 83.0.4: Change input param type for batch backfill 83.0.3: Implement batch backfill 83.0.1: Implement support for OR filter in browse query 82.0.10: Throw UnsupportedOperationException for unsupported condition types in search filter 82.0.6: Implement local secondary backfilling index as part of backfill method 82.0.5: [strongly consistent index] implement getUrns method 82.0.4: Add indexing urn fields to the local secondary index 82.0.0: Render Delta fiels in the MCE_v5. 81.0.1: Add pegasus to avro conversion for FMCE 80.0.4: add get all support for BaseSingleAspectEntitySimpleKeyResource 80.0.2: Add a BaseSearchWriterDAO with an ESBulkWriterDAO implementation. 80.0.1: META-12254: Produce aspect specific MAE with always emit option 80.0.0: Convert getNodesInTraversedPath to getSubgraph to return complete view of the subgraph (nodes+edges)
2020-08-19 16:06:29 -07:00
public BaseBrowsableEntityResource(@Nonnull Class<SNAPSHOT> snapshotClass,
@Nonnull Class<ASPECT_UNION> aspectUnionClass, @Nonnull Class<URN> urnClass) {
super(snapshotClass, aspectUnionClass, urnClass);
}
2019-08-31 20:51:14 -07:00
/**
* Returns a {@link BaseBrowseDAO}.
*/
@Nonnull
protected abstract BaseBrowseDAO getBrowseDAO();
@Action(name = ACTION_BROWSE)
@Nonnull
public Task<BrowseResult> browse(@ActionParam(PARAM_PATH) @Nonnull String path,
corp-identity-gms 1.0.0 -> 1.0.25: 1.0.24: Corp user search across teams and skills 1.0.21: Make /corpGroups /gridUsers /gridGroups extend BaseEntityResource 1.0.17: Use correct util function to load resource file 1.0.16: Add ingest, backfill & getSnapshot action methods to all top-level resources in corp-identity-gms 1.0.13: Onboard search query templates on corp-identity-gms 1.0.9: Fix batch get and add client for batch get 1.0.8: Change package name for corpuser search config 1.0.7: Use search config to get autocomplete field 1.0.6: Implement searchable client 1.0.5: Auto-complete backend support 1.0.3: Add search API metadata-models 24.0.0 -> 38.1.6: 38.1.3: Index active status to corp user search index 38.1.2: Change update response to create response for create API 38.0.10: Mark BaseAspectResource as deprecated 38.0.9: Allow TYPEREF items which have primitive types for arrays in models 38.0.7: Add get-and-set-if-absent function to Local DAO 38.0.6: Add find entities with one relationship in query dao 38.0.4: Fix the inconsistency use of constants and urn params in query dao 38.0.2: Parse source map to obtain the urn 38.0.1: Search document validator in Index Builder 38.0.0: Add urns to search result metadata 37.0.7: Refactor the query dao 37.0.6: Use test models in neo4j dao 37.0.5: Drop metadata model structural assumptions made in neo4j DAOs 37.0.2: Return empty list from getBrowsePaths if browsePaths field doesn't exist 36.0.3: Drop elasticsearch-dao's metadata-models dependency 35.0.10: ES Search DAO to handle null values 35.0.5: Ebean local Dao query string match 35.0.4: Drop all search & browse configs that have been moved to individual GMS 35.0.3: Add ReportTo relationship model 35.0.0: Load resource file properly 34.0.9: Make RestliAuditor injectable 34.0.8: Use encoded query in the test resource 34.0.4: Handle empty aspects param correctly for backfill & getSnapshot actions 34.0.1: Remove corp user specific files from metadata-models 34.0.0: Add backfill & getSnapshot actions to BaseEntityResource 32.0.16: Merge data template classes into metadata-dao's main artifact 32.0.14: Replace "update" method with "ingest" action in BaseEntityResource 32.0.13: Make fliter & sortCriteria parameters optional as they should have been 32.0.12: Move AspectVersion & SnapshotKey back to their original namespaces 32.0.11: Break metadata-dao's dependency on metadata-models 32.0.10: Move model validators to a separate module 32.0.9: Extract principal from the request context for user AuditStamp 32.0.8: Fixing nullability annotations for search/autocomplete/browse resources & daos 32.0.7: Move DAO-specific models to metadata-dao module 32.0.4: Fix search finder not returning total search results count 32.0.3: Implement get_all using search index 32.0.2: Add missing nullability annotation 32.0.1: Use more consistent naming for the test models 31.0.1: Use test-specific metadata models in metadata-dao 31.0.0: Add sort order to Search Dao 30.0.2: Rename Aspect test model to AspectUnion to avoid confusion 30.0.1: Committing migration for metadata-models. 30.0.0: Add default autocomplete field in search config 29.0.16: Modify testcase to account for empty filters 29.0.15: Add searchable interface that clients can use 29.0.14: Use test-specific metadata models in ebean-dao 29.0.12: Move TestUtils to metadata-test-models module 29.0.11: Refactor all tests in metadata-restli to use test models 29.0.10: Move li-metadata-test-utils, metadata-test-models, metadata-test-utils into a new metadata-testing directory to improve code organization. Note that this is a backward compatible change as this doesn't alter the produced artifacts. 29.0.9: Move test-specific models to a stand-alone module 29.0.2: Refactor the rest of validators 28.0.3: Refactor validateSchema for aspect 28.0.2: Implement searchDao for CorpUserInfo. 27.0.16: Refactor for ModelValidation tests 27.0.10: Add new relationship union to model utils 27.0.9: Add plugin to rest client factory 27.0.6: Add rest high level factory 27.0.5: Fix a test bug when reviewing the code 27.0.4: Add create via lambda API to BaseVersionedAspectResource 27.0.2: Change return type of search finder to capture search result metadata in BaseSearchableEntityResource 27.0.1: Drop the unnecessary get method from BaseEntityResource 27.0.0: Add BaseBrowsableEntityResource 26.0.15: Add autocomplete action to BaseSearchableEntityResource 26.0.14: Add BaseSearchableEntityResource 26.0.13: Add getUrnFromDocument & urnClassForDocument util methods that are needed in future RBs 26.0.11: Add BaseVersionedAspectResource 26.0.9: Index signals associated with dataset relevance 26.0.4: Support namespace for ID generation 26.0.1: Fix inconsistent instance variable naming in SearchResult 25.0.6: Add entity-snapshot conversion 25.0.5: Use test-specific metadata models in metadata-restli 25.0.3: Add aspect filtering to BaseEntityResource 24.0.9: Add update method to BaseEntityResource 24.0.7: Fix for parameter types of getBrowsePaths action method MP_VERSION=corp-identity-gms:1.0.25 MP_VERSION=metadata-models:38.1.6 MP_VERSION=wherehows-samza:1.0.29
2019-10-02 11:08:52 -07:00
@ActionParam(PARAM_FILTER) @Optional @Nullable Filter filter, @ActionParam(PARAM_START) int start,
@ActionParam(PARAM_LIMIT) int limit) {
2019-08-31 20:51:14 -07:00
final Filter browseFilter = filter == null ? QueryUtils.EMPTY_FILTER : filter;
2019-08-31 20:51:14 -07:00
return RestliUtils.toTask(() -> getBrowseDAO().browse(path, browseFilter, start, limit));
}
@Action(name = ACTION_GET_BROWSE_PATHS)
corp-identity-gms 1.0.0 -> 1.0.25: 1.0.24: Corp user search across teams and skills 1.0.21: Make /corpGroups /gridUsers /gridGroups extend BaseEntityResource 1.0.17: Use correct util function to load resource file 1.0.16: Add ingest, backfill & getSnapshot action methods to all top-level resources in corp-identity-gms 1.0.13: Onboard search query templates on corp-identity-gms 1.0.9: Fix batch get and add client for batch get 1.0.8: Change package name for corpuser search config 1.0.7: Use search config to get autocomplete field 1.0.6: Implement searchable client 1.0.5: Auto-complete backend support 1.0.3: Add search API metadata-models 24.0.0 -> 38.1.6: 38.1.3: Index active status to corp user search index 38.1.2: Change update response to create response for create API 38.0.10: Mark BaseAspectResource as deprecated 38.0.9: Allow TYPEREF items which have primitive types for arrays in models 38.0.7: Add get-and-set-if-absent function to Local DAO 38.0.6: Add find entities with one relationship in query dao 38.0.4: Fix the inconsistency use of constants and urn params in query dao 38.0.2: Parse source map to obtain the urn 38.0.1: Search document validator in Index Builder 38.0.0: Add urns to search result metadata 37.0.7: Refactor the query dao 37.0.6: Use test models in neo4j dao 37.0.5: Drop metadata model structural assumptions made in neo4j DAOs 37.0.2: Return empty list from getBrowsePaths if browsePaths field doesn't exist 36.0.3: Drop elasticsearch-dao's metadata-models dependency 35.0.10: ES Search DAO to handle null values 35.0.5: Ebean local Dao query string match 35.0.4: Drop all search & browse configs that have been moved to individual GMS 35.0.3: Add ReportTo relationship model 35.0.0: Load resource file properly 34.0.9: Make RestliAuditor injectable 34.0.8: Use encoded query in the test resource 34.0.4: Handle empty aspects param correctly for backfill & getSnapshot actions 34.0.1: Remove corp user specific files from metadata-models 34.0.0: Add backfill & getSnapshot actions to BaseEntityResource 32.0.16: Merge data template classes into metadata-dao's main artifact 32.0.14: Replace "update" method with "ingest" action in BaseEntityResource 32.0.13: Make fliter & sortCriteria parameters optional as they should have been 32.0.12: Move AspectVersion & SnapshotKey back to their original namespaces 32.0.11: Break metadata-dao's dependency on metadata-models 32.0.10: Move model validators to a separate module 32.0.9: Extract principal from the request context for user AuditStamp 32.0.8: Fixing nullability annotations for search/autocomplete/browse resources & daos 32.0.7: Move DAO-specific models to metadata-dao module 32.0.4: Fix search finder not returning total search results count 32.0.3: Implement get_all using search index 32.0.2: Add missing nullability annotation 32.0.1: Use more consistent naming for the test models 31.0.1: Use test-specific metadata models in metadata-dao 31.0.0: Add sort order to Search Dao 30.0.2: Rename Aspect test model to AspectUnion to avoid confusion 30.0.1: Committing migration for metadata-models. 30.0.0: Add default autocomplete field in search config 29.0.16: Modify testcase to account for empty filters 29.0.15: Add searchable interface that clients can use 29.0.14: Use test-specific metadata models in ebean-dao 29.0.12: Move TestUtils to metadata-test-models module 29.0.11: Refactor all tests in metadata-restli to use test models 29.0.10: Move li-metadata-test-utils, metadata-test-models, metadata-test-utils into a new metadata-testing directory to improve code organization. Note that this is a backward compatible change as this doesn't alter the produced artifacts. 29.0.9: Move test-specific models to a stand-alone module 29.0.2: Refactor the rest of validators 28.0.3: Refactor validateSchema for aspect 28.0.2: Implement searchDao for CorpUserInfo. 27.0.16: Refactor for ModelValidation tests 27.0.10: Add new relationship union to model utils 27.0.9: Add plugin to rest client factory 27.0.6: Add rest high level factory 27.0.5: Fix a test bug when reviewing the code 27.0.4: Add create via lambda API to BaseVersionedAspectResource 27.0.2: Change return type of search finder to capture search result metadata in BaseSearchableEntityResource 27.0.1: Drop the unnecessary get method from BaseEntityResource 27.0.0: Add BaseBrowsableEntityResource 26.0.15: Add autocomplete action to BaseSearchableEntityResource 26.0.14: Add BaseSearchableEntityResource 26.0.13: Add getUrnFromDocument & urnClassForDocument util methods that are needed in future RBs 26.0.11: Add BaseVersionedAspectResource 26.0.9: Index signals associated with dataset relevance 26.0.4: Support namespace for ID generation 26.0.1: Fix inconsistent instance variable naming in SearchResult 25.0.6: Add entity-snapshot conversion 25.0.5: Use test-specific metadata models in metadata-restli 25.0.3: Add aspect filtering to BaseEntityResource 24.0.9: Add update method to BaseEntityResource 24.0.7: Fix for parameter types of getBrowsePaths action method MP_VERSION=corp-identity-gms:1.0.25 MP_VERSION=metadata-models:38.1.6 MP_VERSION=wherehows-samza:1.0.29
2019-10-02 11:08:52 -07:00
@Nonnull
2019-08-31 20:51:14 -07:00
public Task<StringArray> getBrowsePaths(
@ActionParam(value = "urn", typeref = com.linkedin.common.Urn.class) @Nonnull Urn urn) {
return RestliUtils.toTask(() -> new StringArray(getBrowseDAO().getBrowsePaths(urn)));
}
}