Fixes #11617 Entity get operations check for ViewAll operation instead of specific view operations based on the field requested (#11904)

This commit is contained in:
Suresh Srinivas 2023-06-06 15:18:57 -07:00 committed by GitHub
parent b0bfbad9da
commit f23f67dfe9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
37 changed files with 248 additions and 62 deletions

View File

@ -28,6 +28,7 @@ public class ResourceRegistry {
MetadataOperation.CREATE, MetadataOperation.CREATE,
MetadataOperation.DELETE, MetadataOperation.DELETE,
MetadataOperation.VIEW_ALL, MetadataOperation.VIEW_ALL,
MetadataOperation.VIEW_BASIC,
MetadataOperation.EDIT_ALL, MetadataOperation.EDIT_ALL,
MetadataOperation.EDIT_DESCRIPTION, MetadataOperation.EDIT_DESCRIPTION,
MetadataOperation.EDIT_DISPLAY_NAME)); MetadataOperation.EDIT_DISPLAY_NAME));

View File

@ -2,10 +2,15 @@ package org.openmetadata.service.resources;
import static org.openmetadata.common.utils.CommonUtil.listOrEmpty; import static org.openmetadata.common.utils.CommonUtil.listOrEmpty;
import static org.openmetadata.schema.type.MetadataOperation.CREATE; import static org.openmetadata.schema.type.MetadataOperation.CREATE;
import static org.openmetadata.schema.type.MetadataOperation.VIEW_BASIC;
import static org.openmetadata.service.util.EntityUtil.createOrUpdateOperation; import static org.openmetadata.service.util.EntityUtil.createOrUpdateOperation;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
@ -22,6 +27,7 @@ import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.schema.type.csv.CsvImportResult; import org.openmetadata.schema.type.csv.CsvImportResult;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.OpenMetadataApplicationConfig; import org.openmetadata.service.OpenMetadataApplicationConfig;
import org.openmetadata.service.exception.CatalogExceptionMessage;
import org.openmetadata.service.jdbi3.EntityRepository; import org.openmetadata.service.jdbi3.EntityRepository;
import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.ListFilter;
import org.openmetadata.service.security.Authorizer; import org.openmetadata.service.security.Authorizer;
@ -44,6 +50,7 @@ public abstract class EntityResource<T extends EntityInterface, K extends Entity
protected final List<String> allowedFields; protected final List<String> allowedFields;
@Getter protected final K repository; @Getter protected final K repository;
protected final Authorizer authorizer; protected final Authorizer authorizer;
protected final Map<String, MetadataOperation> fieldsToViewOperations = new HashMap<>();
protected EntityResource(Class<T> entityClass, K repository, Authorizer authorizer) { protected EntityResource(Class<T> entityClass, K repository, Authorizer authorizer) {
this.entityClass = entityClass; this.entityClass = entityClass;
@ -51,6 +58,7 @@ public abstract class EntityResource<T extends EntityInterface, K extends Entity
allowedFields = repository.getAllowedFields(); allowedFields = repository.getAllowedFields();
this.repository = repository; this.repository = repository;
this.authorizer = authorizer; this.authorizer = authorizer;
addViewOperation("owner,followers,tags,extension", VIEW_BASIC);
Entity.registerEntity(entityClass, entityType, repository, getEntitySpecificOperations()); Entity.registerEntity(entityClass, entityType, repository, getEntitySpecificOperations());
} }
@ -305,9 +313,21 @@ public abstract class EntityResource<T extends EntityInterface, K extends Entity
} }
public static final MetadataOperation[] VIEW_ALL_OPERATIONS = {MetadataOperation.VIEW_ALL}; public static final MetadataOperation[] VIEW_ALL_OPERATIONS = {MetadataOperation.VIEW_ALL};
public static final MetadataOperation[] VIEW_BASIC_OPERATIONS = {MetadataOperation.VIEW_BASIC};
protected MetadataOperation[] getViewOperations(Fields fields) { private MetadataOperation[] getViewOperations(Fields fields) {
return VIEW_ALL_OPERATIONS; if (fields.getFieldList().isEmpty()) {
return VIEW_BASIC_OPERATIONS;
}
Set<MetadataOperation> viewOperations = new TreeSet<>();
for (String field : fields.getFieldList()) {
MetadataOperation operation = fieldsToViewOperations.get(field);
if (operation == null) {
return VIEW_ALL_OPERATIONS;
}
viewOperations.add(operation);
}
return viewOperations.toArray(new MetadataOperation[0]);
} }
protected EntityReference getEntityReference(String entityType, String fqn) { protected EntityReference getEntityReference(String entityType, String fqn) {
@ -317,4 +337,16 @@ public abstract class EntityResource<T extends EntityInterface, K extends Entity
protected List<EntityReference> getEntityReferences(String entityType, List<String> fqns) { protected List<EntityReference> getEntityReferences(String entityType, List<String> fqns) {
return EntityUtil.getEntityReferences(entityType, fqns); return EntityUtil.getEntityReferences(entityType, fqns);
} }
protected void addViewOperation(String fieldsParam, MetadataOperation operation) {
String[] fields = fieldsParam.replace(" ", "").split(",");
for (String field : fields) {
if (allowedFields.contains(field)) {
fieldsToViewOperations.put(field, operation);
} else if (!"owner,followers,tags,extension".contains(field)) {
// Some common fields for all the entities might be missing. Ignore it.
throw new IllegalArgumentException(CatalogExceptionMessage.invalidField(field));
}
}
}
} }

View File

@ -80,7 +80,6 @@ import org.openmetadata.service.util.ResultList;
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Collection(name = "Workflow") @Collection(name = "Workflow")
public class WorkflowResource extends EntityResource<Workflow, WorkflowRepository> { public class WorkflowResource extends EntityResource<Workflow, WorkflowRepository> {
public static final String COLLECTION_PATH = "/v1/automations/workflows"; public static final String COLLECTION_PATH = "/v1/automations/workflows";
static final String FIELDS = "owner"; static final String FIELDS = "owner";

View File

@ -73,6 +73,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "charts") @Collection(name = "charts")
public class ChartResource extends EntityResource<Chart, ChartRepository> { public class ChartResource extends EntityResource<Chart, ChartRepository> {
public static final String COLLECTION_PATH = "v1/charts/"; public static final String COLLECTION_PATH = "v1/charts/";
static final String FIELDS = "owner,followers,tags";
@Override @Override
public Chart addHref(UriInfo uriInfo, Chart chart) { public Chart addHref(UriInfo uriInfo, Chart chart) {
@ -89,6 +90,7 @@ public class ChartResource extends EntityResource<Chart, ChartRepository> {
@Override @Override
protected List<MetadataOperation> getEntitySpecificOperations() { protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("usageSummary", MetadataOperation.VIEW_USAGE);
return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_LINEAGE); return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_LINEAGE);
} }
@ -96,8 +98,6 @@ public class ChartResource extends EntityResource<Chart, ChartRepository> {
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,followers,tags";
@GET @GET
@Operation( @Operation(
operationId = "listCharts", operationId = "listCharts",

View File

@ -73,7 +73,6 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "dashboards") @Collection(name = "dashboards")
public class DashboardResource extends EntityResource<Dashboard, DashboardRepository> { public class DashboardResource extends EntityResource<Dashboard, DashboardRepository> {
public static final String COLLECTION_PATH = "v1/dashboards/"; public static final String COLLECTION_PATH = "v1/dashboards/";
protected static final String FIELDS = "owner,charts,followers,tags,usageSummary,extension,dataModels"; protected static final String FIELDS = "owner,charts,followers,tags,usageSummary,extension,dataModels";
@Override @Override
@ -92,6 +91,8 @@ public class DashboardResource extends EntityResource<Dashboard, DashboardReposi
@Override @Override
protected List<MetadataOperation> getEntitySpecificOperations() { protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("charts,dataModels", MetadataOperation.VIEW_BASIC);
addViewOperation("usageSummary", MetadataOperation.VIEW_USAGE);
return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_LINEAGE); return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_LINEAGE);
} }

View File

@ -13,6 +13,8 @@
package org.openmetadata.service.resources.databases; package org.openmetadata.service.resources.databases;
import static org.openmetadata.common.utils.CommonUtil.listOf;
import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -23,6 +25,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -49,6 +52,7 @@ import org.openmetadata.schema.api.data.RestoreEntity;
import org.openmetadata.schema.entity.data.Database; import org.openmetadata.schema.entity.data.Database;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
import org.openmetadata.service.jdbi3.DatabaseRepository; import org.openmetadata.service.jdbi3.DatabaseRepository;
@ -67,6 +71,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "databases") @Collection(name = "databases")
public class DatabaseResource extends EntityResource<Database, DatabaseRepository> { public class DatabaseResource extends EntityResource<Database, DatabaseRepository> {
public static final String COLLECTION_PATH = "v1/databases/"; public static final String COLLECTION_PATH = "v1/databases/";
static final String FIELDS = "owner,databaseSchemas,usageSummary,location,tags,extension";
@Override @Override
public Database addHref(UriInfo uriInfo, Database db) { public Database addHref(UriInfo uriInfo, Database db) {
@ -77,6 +82,13 @@ public class DatabaseResource extends EntityResource<Database, DatabaseRepositor
return db; return db;
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("databaseSchemas,location", MetadataOperation.VIEW_BASIC);
addViewOperation("usageSummary", MetadataOperation.VIEW_USAGE);
return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_USAGE);
}
public DatabaseResource(CollectionDAO dao, Authorizer authorizer) { public DatabaseResource(CollectionDAO dao, Authorizer authorizer) {
super(Database.class, new DatabaseRepository(dao), authorizer); super(Database.class, new DatabaseRepository(dao), authorizer);
} }
@ -85,8 +97,6 @@ public class DatabaseResource extends EntityResource<Database, DatabaseRepositor
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,databaseSchemas,usageSummary,location,tags,extension";
@GET @GET
@Operation( @Operation(
operationId = "listDatabases", operationId = "listDatabases",

View File

@ -13,6 +13,8 @@
package org.openmetadata.service.resources.databases; package org.openmetadata.service.resources.databases;
import static org.openmetadata.common.utils.CommonUtil.listOf;
import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -23,6 +25,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -49,6 +52,7 @@ import org.openmetadata.schema.api.data.RestoreEntity;
import org.openmetadata.schema.entity.data.DatabaseSchema; import org.openmetadata.schema.entity.data.DatabaseSchema;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
import org.openmetadata.service.jdbi3.DatabaseSchemaRepository; import org.openmetadata.service.jdbi3.DatabaseSchemaRepository;
@ -67,6 +71,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "databaseSchemas") @Collection(name = "databaseSchemas")
public class DatabaseSchemaResource extends EntityResource<DatabaseSchema, DatabaseSchemaRepository> { public class DatabaseSchemaResource extends EntityResource<DatabaseSchema, DatabaseSchemaRepository> {
public static final String COLLECTION_PATH = "v1/databaseSchemas/"; public static final String COLLECTION_PATH = "v1/databaseSchemas/";
static final String FIELDS = "owner,tables,usageSummary,tags,extension";
@Override @Override
public DatabaseSchema addHref(UriInfo uriInfo, DatabaseSchema schema) { public DatabaseSchema addHref(UriInfo uriInfo, DatabaseSchema schema) {
@ -81,12 +86,17 @@ public class DatabaseSchemaResource extends EntityResource<DatabaseSchema, Datab
super(DatabaseSchema.class, new DatabaseSchemaRepository(dao), authorizer); super(DatabaseSchema.class, new DatabaseSchemaRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("tables", MetadataOperation.VIEW_BASIC);
addViewOperation("usageSummary", MetadataOperation.VIEW_USAGE);
return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_USAGE);
}
public static class DatabaseSchemaList extends ResultList<DatabaseSchema> { public static class DatabaseSchemaList extends ResultList<DatabaseSchema> {
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,tables,usageSummary,tags,extension";
@GET @GET
@Operation( @Operation(
operationId = "listDBSchemas", operationId = "listDBSchemas",

View File

@ -96,13 +96,17 @@ public class TableResource extends EntityResource<Table, TableRepository> {
public TableResource(CollectionDAO dao, Authorizer authorizer) { public TableResource(CollectionDAO dao, Authorizer authorizer) {
super(Table.class, new TableRepository(dao), authorizer); super(Table.class, new TableRepository(dao), authorizer);
allowedFields.add("customMetrics");
} }
@Override @Override
protected List<MetadataOperation> getEntitySpecificOperations() { protected List<MetadataOperation> getEntitySpecificOperations() {
allowedFields.add("customMetrics");
addViewOperation(
"columns,tableConstraints,tablePartition,joins,viewDefinition,dataModel", MetadataOperation.VIEW_BASIC);
addViewOperation("usageSummary", MetadataOperation.VIEW_USAGE);
addViewOperation("customMetrics", MetadataOperation.VIEW_TESTS);
addViewOperation("testSuite", MetadataOperation.VIEW_TESTS);
return listOf( return listOf(
MetadataOperation.VIEW_BASIC,
MetadataOperation.VIEW_TESTS, MetadataOperation.VIEW_TESTS,
MetadataOperation.VIEW_QUERIES, MetadataOperation.VIEW_QUERIES,
MetadataOperation.VIEW_DATA_PROFILE, MetadataOperation.VIEW_DATA_PROFILE,

View File

@ -13,8 +13,6 @@
package org.openmetadata.service.resources.datamodels; package org.openmetadata.service.resources.datamodels;
import static org.openmetadata.common.utils.CommonUtil.listOf;
import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -25,7 +23,6 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -52,7 +49,6 @@ import org.openmetadata.schema.api.data.RestoreEntity;
import org.openmetadata.schema.entity.data.DashboardDataModel; import org.openmetadata.schema.entity.data.DashboardDataModel;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
import org.openmetadata.service.jdbi3.DashboardDataModelRepository; import org.openmetadata.service.jdbi3.DashboardDataModelRepository;
@ -89,11 +85,6 @@ public class DashboardDataModelResource extends EntityResource<DashboardDataMode
super(DashboardDataModel.class, new DashboardDataModelRepository(dao), authorizer); super(DashboardDataModel.class, new DashboardDataModelRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_LINEAGE);
}
public static class DashboardDataModelList extends ResultList<DashboardDataModel> { public static class DashboardDataModelList extends ResultList<DashboardDataModel> {
/* Required for serde */ /* Required for serde */
} }

View File

@ -89,6 +89,12 @@ public class TestCaseResource extends EntityResource<TestCase, TestCaseRepositor
super(TestCase.class, new TestCaseRepository(dao), authorizer); super(TestCase.class, new TestCaseRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("testSuite,testDefinition", MetadataOperation.VIEW_BASIC);
return null;
}
public static class TestCaseList extends ResultList<TestCase> { public static class TestCaseList extends ResultList<TestCase> {
/* Required for serde */ /* Required for serde */
} }

View File

@ -10,6 +10,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -39,6 +40,7 @@ import org.openmetadata.schema.tests.TestSuite;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.EntityReference; import org.openmetadata.schema.type.EntityReference;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.ListFilter;
@ -57,7 +59,6 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "TestSuites") @Collection(name = "TestSuites")
public class TestSuiteResource extends EntityResource<TestSuite, TestSuiteRepository> { public class TestSuiteResource extends EntityResource<TestSuite, TestSuiteRepository> {
public static final String COLLECTION_PATH = "/v1/dataQuality/testSuites"; public static final String COLLECTION_PATH = "/v1/dataQuality/testSuites";
static final String FIELDS = "owner,tests"; static final String FIELDS = "owner,tests";
@Override @Override
@ -71,6 +72,12 @@ public class TestSuiteResource extends EntityResource<TestSuite, TestSuiteReposi
super(TestSuite.class, new TestSuiteRepository(dao), authorizer); super(TestSuite.class, new TestSuiteRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("tests", MetadataOperation.VIEW_BASIC);
return null;
}
public static class TestSuiteList extends ResultList<TestSuite> { public static class TestSuiteList extends ResultList<TestSuite> {
/* Required for serde */ /* Required for serde */
} }

View File

@ -59,6 +59,7 @@ import org.openmetadata.schema.entity.events.SubscriptionStatus;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Function; import org.openmetadata.schema.type.Function;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.schema.type.SubscriptionResourceDescriptor; import org.openmetadata.schema.type.SubscriptionResourceDescriptor;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.OpenMetadataApplicationConfig; import org.openmetadata.service.OpenMetadataApplicationConfig;
@ -104,6 +105,12 @@ public class EventSubscriptionResource extends EntityResource<EventSubscription,
this.daoCollection = dao; this.daoCollection = dao;
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("filteringRules", MetadataOperation.VIEW_BASIC);
return null;
}
public static class EventSubscriptionList extends ResultList<EventSubscription> { public static class EventSubscriptionList extends ResultList<EventSubscription> {
/* Required for serde */ /* Required for serde */
} }

View File

@ -23,6 +23,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -49,6 +50,7 @@ import org.openmetadata.schema.api.data.RestoreEntity;
import org.openmetadata.schema.entity.data.Glossary; import org.openmetadata.schema.entity.data.Glossary;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.schema.type.csv.CsvImportResult; import org.openmetadata.schema.type.csv.CsvImportResult;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
@ -70,6 +72,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "glossaries", order = 6) // Initialize before GlossaryTerm and after Classification and Tags @Collection(name = "glossaries", order = 6) // Initialize before GlossaryTerm and after Classification and Tags
public class GlossaryResource extends EntityResource<Glossary, GlossaryRepository> { public class GlossaryResource extends EntityResource<Glossary, GlossaryRepository> {
public static final String COLLECTION_PATH = "v1/glossaries/"; public static final String COLLECTION_PATH = "v1/glossaries/";
static final String FIELDS = "owner,tags,reviewers,usageCount,termCount";
@Override @Override
public Glossary addHref(UriInfo uriInfo, Glossary glossary) { public Glossary addHref(UriInfo uriInfo, Glossary glossary) {
@ -83,12 +86,16 @@ public class GlossaryResource extends EntityResource<Glossary, GlossaryRepositor
super(Glossary.class, new GlossaryRepository(dao), authorizer); super(Glossary.class, new GlossaryRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("reviewers,usageCount,termCount", MetadataOperation.VIEW_BASIC);
return null;
}
public static class GlossaryList extends ResultList<Glossary> { public static class GlossaryList extends ResultList<Glossary> {
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,tags,reviewers,usageCount,termCount";
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -23,6 +23,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -51,6 +52,7 @@ import org.openmetadata.schema.entity.data.GlossaryTerm;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.EntityReference; import org.openmetadata.schema.type.EntityReference;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.OpenMetadataApplicationConfig; import org.openmetadata.service.OpenMetadataApplicationConfig;
import org.openmetadata.service.exception.CatalogExceptionMessage; import org.openmetadata.service.exception.CatalogExceptionMessage;
@ -72,6 +74,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "glossaryTerms", order = 7) // Initialized after Glossary, Classification, and Tags @Collection(name = "glossaryTerms", order = 7) // Initialized after Glossary, Classification, and Tags
public class GlossaryTermResource extends EntityResource<GlossaryTerm, GlossaryTermRepository> { public class GlossaryTermResource extends EntityResource<GlossaryTerm, GlossaryTermRepository> {
public static final String COLLECTION_PATH = "v1/glossaryTerms/"; public static final String COLLECTION_PATH = "v1/glossaryTerms/";
static final String FIELDS = "children,relatedTerms,reviewers,owner,tags,usageCount";
@Override @Override
public GlossaryTerm addHref(UriInfo uriInfo, GlossaryTerm term) { public GlossaryTerm addHref(UriInfo uriInfo, GlossaryTerm term) {
@ -94,12 +97,16 @@ public class GlossaryTermResource extends EntityResource<GlossaryTerm, GlossaryT
super(GlossaryTerm.class, new GlossaryTermRepository(dao), authorizer); super(GlossaryTerm.class, new GlossaryTermRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("children,relatedTerms,reviewers,usageCount", MetadataOperation.VIEW_BASIC);
return null;
}
public static class GlossaryTermList extends ResultList<GlossaryTerm> { public static class GlossaryTermList extends ResultList<GlossaryTerm> {
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "children,relatedTerms,reviewers,owner,tags,usageCount";
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -11,6 +11,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -40,6 +41,7 @@ import org.openmetadata.schema.dataInsight.kpi.Kpi;
import org.openmetadata.schema.dataInsight.type.KpiResult; import org.openmetadata.schema.dataInsight.type.KpiResult;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.exception.EntityNotFoundException; import org.openmetadata.service.exception.EntityNotFoundException;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
@ -60,7 +62,6 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "kpi") @Collection(name = "kpi")
public class KpiResource extends EntityResource<Kpi, KpiRepository> { public class KpiResource extends EntityResource<Kpi, KpiRepository> {
public static final String COLLECTION_PATH = "/v1/kpi"; public static final String COLLECTION_PATH = "/v1/kpi";
static final String FIELDS = "owner,dataInsightChart,kpiResult"; static final String FIELDS = "owner,dataInsightChart,kpiResult";
@Override @Override
@ -75,6 +76,12 @@ public class KpiResource extends EntityResource<Kpi, KpiRepository> {
super(Kpi.class, new KpiRepository(dao), authorizer); super(Kpi.class, new KpiRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("dataInsightChart,kpiResult", MetadataOperation.VIEW_BASIC);
return null;
}
public static class KpiList extends ResultList<Kpi> { public static class KpiList extends ResultList<Kpi> {
/* Required for serde */ /* Required for serde */
} }

View File

@ -13,6 +13,8 @@
package org.openmetadata.service.resources.metrics; package org.openmetadata.service.resources.metrics;
import static org.openmetadata.common.utils.CommonUtil.listOf;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
@ -20,6 +22,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.Max; import javax.validation.constraints.Max;
@ -40,6 +43,7 @@ import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.UriInfo;
import org.openmetadata.schema.entity.data.Metrics; import org.openmetadata.schema.entity.data.Metrics;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.ListFilter;
import org.openmetadata.service.jdbi3.MetricsRepository; import org.openmetadata.service.jdbi3.MetricsRepository;
@ -59,11 +63,18 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "metrics") @Collection(name = "metrics")
public class MetricsResource extends EntityResource<Metrics, MetricsRepository> { public class MetricsResource extends EntityResource<Metrics, MetricsRepository> {
public static final String COLLECTION_PATH = "/v1/metrics/"; public static final String COLLECTION_PATH = "/v1/metrics/";
static final String FIELDS = "owner,usageSummary";
public MetricsResource(CollectionDAO dao, Authorizer authorizer) { public MetricsResource(CollectionDAO dao, Authorizer authorizer) {
super(Metrics.class, new MetricsRepository(dao), authorizer); super(Metrics.class, new MetricsRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("usageSummary", MetadataOperation.VIEW_USAGE);
return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_USAGE);
}
@Override @Override
public Metrics addHref(UriInfo uriInfo, Metrics entity) { public Metrics addHref(UriInfo uriInfo, Metrics entity) {
return entity; return entity;
@ -73,8 +84,6 @@ public class MetricsResource extends EntityResource<Metrics, MetricsRepository>
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,usageSummary";
@GET @GET
@Operation( @Operation(
operationId = "listMetrics", operationId = "listMetrics",

View File

@ -13,6 +13,8 @@
package org.openmetadata.service.resources.mlmodels; package org.openmetadata.service.resources.mlmodels;
import static org.openmetadata.common.utils.CommonUtil.listOf;
import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -23,6 +25,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -50,6 +53,7 @@ import org.openmetadata.schema.entity.data.MlModel;
import org.openmetadata.schema.type.ChangeEvent; import org.openmetadata.schema.type.ChangeEvent;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.ListFilter;
@ -69,6 +73,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "mlmodels") @Collection(name = "mlmodels")
public class MlModelResource extends EntityResource<MlModel, MlModelRepository> { public class MlModelResource extends EntityResource<MlModel, MlModelRepository> {
public static final String COLLECTION_PATH = "v1/mlmodels/"; public static final String COLLECTION_PATH = "v1/mlmodels/";
static final String FIELDS = "owner,dashboard,followers,tags,usageSummary,extension";
@Override @Override
public MlModel addHref(UriInfo uriInfo, MlModel mlmodel) { public MlModel addHref(UriInfo uriInfo, MlModel mlmodel) {
@ -84,12 +89,17 @@ public class MlModelResource extends EntityResource<MlModel, MlModelRepository>
super(MlModel.class, new MlModelRepository(dao), authorizer); super(MlModel.class, new MlModelRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("dashboard", MetadataOperation.VIEW_BASIC);
addViewOperation("usageSummary", MetadataOperation.VIEW_USAGE);
return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_USAGE);
}
public static class MlModelList extends ResultList<MlModel> { public static class MlModelList extends ResultList<MlModel> {
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,dashboard,followers,tags,usageSummary,extension";
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -78,6 +78,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "pipelines") @Collection(name = "pipelines")
public class PipelineResource extends EntityResource<Pipeline, PipelineRepository> { public class PipelineResource extends EntityResource<Pipeline, PipelineRepository> {
public static final String COLLECTION_PATH = "v1/pipelines/"; public static final String COLLECTION_PATH = "v1/pipelines/";
static final String FIELDS = "owner,tasks,pipelineStatus,followers,tags,extension";
@Override @Override
public Pipeline addHref(UriInfo uriInfo, Pipeline pipeline) { public Pipeline addHref(UriInfo uriInfo, Pipeline pipeline) {
@ -94,6 +95,7 @@ public class PipelineResource extends EntityResource<Pipeline, PipelineRepositor
@Override @Override
protected List<MetadataOperation> getEntitySpecificOperations() { protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("tasks,pipelineStatus", MetadataOperation.VIEW_BASIC);
return listOf(MetadataOperation.EDIT_LINEAGE, MetadataOperation.EDIT_STATUS); return listOf(MetadataOperation.EDIT_LINEAGE, MetadataOperation.EDIT_STATUS);
} }
@ -105,8 +107,6 @@ public class PipelineResource extends EntityResource<Pipeline, PipelineRepositor
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,tasks,pipelineStatus,followers,tags,extension";
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -82,6 +82,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "policies", order = 0) @Collection(name = "policies", order = 0)
public class PolicyResource extends EntityResource<Policy, PolicyRepository> { public class PolicyResource extends EntityResource<Policy, PolicyRepository> {
public static final String COLLECTION_PATH = "v1/policies/"; public static final String COLLECTION_PATH = "v1/policies/";
public static final String FIELDS = "owner,location,teams,roles";
@Override @Override
public Policy addHref(UriInfo uriInfo, Policy policy) { public Policy addHref(UriInfo uriInfo, Policy policy) {
@ -95,6 +96,12 @@ public class PolicyResource extends EntityResource<Policy, PolicyRepository> {
super(Policy.class, new PolicyRepository(dao), authorizer); super(Policy.class, new PolicyRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("location,teams,roles", MetadataOperation.VIEW_BASIC);
return null;
}
@Override @Override
public void initialize(OpenMetadataApplicationConfig config) throws IOException { public void initialize(OpenMetadataApplicationConfig config) throws IOException {
// Load any existing rules from database, before loading seed data. // Load any existing rules from database, before loading seed data.
@ -126,8 +133,6 @@ public class PolicyResource extends EntityResource<Policy, PolicyRepository> {
/* Required for serde */ /* Required for serde */
} }
public static final String FIELDS = "owner,location,teams,roles";
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -64,13 +64,19 @@ import org.openmetadata.service.util.ResultList;
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Collection(name = "queries") @Collection(name = "queries")
public class QueryResource extends EntityResource<Query, QueryRepository> { public class QueryResource extends EntityResource<Query, QueryRepository> {
public static final String COLLECTION_PATH = "v1/queries/"; public static final String COLLECTION_PATH = "v1/queries/";
static final String FIELDS = "owner,followers,users,votes,tags,queryUsedIn";
public QueryResource(CollectionDAO dao, Authorizer authorizer) { public QueryResource(CollectionDAO dao, Authorizer authorizer) {
super(Query.class, new QueryRepository(dao), authorizer); super(Query.class, new QueryRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("users,votes,queryUsedIn", MetadataOperation.VIEW_BASIC);
return null;
}
@Override @Override
public Query addHref(UriInfo uriInfo, Query entity) { public Query addHref(UriInfo uriInfo, Query entity) {
Entity.withHref(uriInfo, entity.getOwner()); Entity.withHref(uriInfo, entity.getOwner());
@ -84,8 +90,6 @@ public class QueryResource extends EntityResource<Query, QueryRepository> {
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,followers,users,votes,tags,queryUsedIn";
@GET @GET
@Operation( @Operation(
operationId = "listQueries", operationId = "listQueries",

View File

@ -13,6 +13,8 @@
package org.openmetadata.service.resources.reports; package org.openmetadata.service.resources.reports;
import static org.openmetadata.common.utils.CommonUtil.listOf;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Content;
@ -20,6 +22,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.validation.Valid; import javax.validation.Valid;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
@ -38,6 +41,7 @@ import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.UriInfo;
import org.openmetadata.schema.entity.data.Report; import org.openmetadata.schema.entity.data.Report;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.ListFilter;
import org.openmetadata.service.jdbi3.ReportRepository; import org.openmetadata.service.jdbi3.ReportRepository;
@ -58,11 +62,18 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "reports") @Collection(name = "reports")
public class ReportResource extends EntityResource<Report, ReportRepository> { public class ReportResource extends EntityResource<Report, ReportRepository> {
public static final String COLLECTION_PATH = "/v1/reports/"; public static final String COLLECTION_PATH = "/v1/reports/";
static final String FIELDS = "owner,usageSummary";
public ReportResource(CollectionDAO dao, Authorizer authorizer) { public ReportResource(CollectionDAO dao, Authorizer authorizer) {
super(Report.class, new ReportRepository(dao), authorizer); super(Report.class, new ReportRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("usageSummary", MetadataOperation.VIEW_USAGE);
return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_USAGE);
}
@Override @Override
public Report addHref(UriInfo uriInfo, Report entity) { public Report addHref(UriInfo uriInfo, Report entity) {
return entity; return entity;
@ -72,8 +83,6 @@ public class ReportResource extends EntityResource<Report, ReportRepository> {
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,usageSummary";
@GET @GET
@Operation( @Operation(
operationId = "listReports", operationId = "listReports",

View File

@ -92,6 +92,12 @@ public class DatabaseServiceResource
return service; return service;
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("pipelines", MetadataOperation.VIEW_BASIC);
return null;
}
public DatabaseServiceResource(CollectionDAO dao, Authorizer authorizer) { public DatabaseServiceResource(CollectionDAO dao, Authorizer authorizer) {
super(DatabaseService.class, new DatabaseServiceRepository(dao), authorizer, ServiceType.DATABASE); super(DatabaseService.class, new DatabaseServiceRepository(dao), authorizer, ServiceType.DATABASE);
} }

View File

@ -106,6 +106,7 @@ public class IngestionPipelineResource extends EntityResource<IngestionPipeline,
private PipelineServiceClient pipelineServiceClient; private PipelineServiceClient pipelineServiceClient;
private OpenMetadataApplicationConfig openMetadataApplicationConfig; private OpenMetadataApplicationConfig openMetadataApplicationConfig;
private final MetadataServiceRepository metadataServiceRepository; private final MetadataServiceRepository metadataServiceRepository;
static final String FIELDS = FIELD_OWNER;
@Override @Override
public IngestionPipeline addHref(UriInfo uriInfo, IngestionPipeline ingestionPipeline) { public IngestionPipeline addHref(UriInfo uriInfo, IngestionPipeline ingestionPipeline) {
@ -179,8 +180,6 @@ public class IngestionPipelineResource extends EntityResource<IngestionPipeline,
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = FIELD_OWNER;
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -78,7 +78,6 @@ import org.openmetadata.service.util.ResultList;
public class MessagingServiceResource public class MessagingServiceResource
extends ServiceEntityResource<MessagingService, MessagingServiceRepository, MessagingConnection> { extends ServiceEntityResource<MessagingService, MessagingServiceRepository, MessagingConnection> {
public static final String COLLECTION_PATH = "v1/services/messagingServices/"; public static final String COLLECTION_PATH = "v1/services/messagingServices/";
public static final String FIELDS = FIELD_OWNER; public static final String FIELDS = FIELD_OWNER;
@Override @Override

View File

@ -129,6 +129,12 @@ public class MetadataServiceResource
super(MetadataService.class, new MetadataServiceRepository(dao), authorizer, ServiceType.METADATA); super(MetadataService.class, new MetadataServiceRepository(dao), authorizer, ServiceType.METADATA);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("pipelines", MetadataOperation.VIEW_BASIC);
return null;
}
public static class MetadataServiceList extends ResultList<MetadataService> { public static class MetadataServiceList extends ResultList<MetadataService> {
/* Required for serde */ /* Required for serde */
} }

View File

@ -13,6 +13,8 @@
package org.openmetadata.service.resources.services.mlmodel; package org.openmetadata.service.resources.services.mlmodel;
import static org.openmetadata.common.utils.CommonUtil.listOf;
import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -76,7 +78,6 @@ import org.openmetadata.service.util.ResultList;
public class MlModelServiceResource public class MlModelServiceResource
extends ServiceEntityResource<MlModelService, MlModelServiceRepository, MlModelConnection> { extends ServiceEntityResource<MlModelService, MlModelServiceRepository, MlModelConnection> {
public static final String COLLECTION_PATH = "v1/services/mlmodelServices/"; public static final String COLLECTION_PATH = "v1/services/mlmodelServices/";
public static final String FIELDS = "pipelines,owner,tags"; public static final String FIELDS = "pipelines,owner,tags";
@Override @Override
@ -91,6 +92,12 @@ public class MlModelServiceResource
super(MlModelService.class, new MlModelServiceRepository(dao), authorizer, ServiceType.ML_MODEL); super(MlModelService.class, new MlModelServiceRepository(dao), authorizer, ServiceType.ML_MODEL);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("pipelines", MetadataOperation.VIEW_BASIC);
return listOf(MetadataOperation.VIEW_USAGE, MetadataOperation.EDIT_USAGE);
}
public static class MlModelServiceList extends ResultList<MlModelService> { public static class MlModelServiceList extends ResultList<MlModelService> {
/* Required for serde */ /* Required for serde */
} }

View File

@ -90,6 +90,12 @@ public class PipelineServiceResource
super(PipelineService.class, new PipelineServiceRepository(dao), authorizer, ServiceType.PIPELINE); super(PipelineService.class, new PipelineServiceRepository(dao), authorizer, ServiceType.PIPELINE);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("pipelines", MetadataOperation.VIEW_BASIC);
return null;
}
public static class PipelineServiceList extends ResultList<PipelineService> { public static class PipelineServiceList extends ResultList<PipelineService> {
/* Required for serde */ /* Required for serde */
} }

View File

@ -67,7 +67,6 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "storageServices") @Collection(name = "storageServices")
public class StorageServiceResource public class StorageServiceResource
extends ServiceEntityResource<StorageService, StorageServiceRepository, StorageConnection> { extends ServiceEntityResource<StorageService, StorageServiceRepository, StorageConnection> {
public static final String COLLECTION_PATH = "v1/services/storageServices/"; public static final String COLLECTION_PATH = "v1/services/storageServices/";
static final String FIELDS = "pipelines,owner,tags"; static final String FIELDS = "pipelines,owner,tags";
@ -83,6 +82,12 @@ public class StorageServiceResource
super(StorageService.class, new StorageServiceRepository(dao), authorizer, ServiceType.STORAGE); super(StorageService.class, new StorageServiceRepository(dao), authorizer, ServiceType.STORAGE);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("pipelines", MetadataOperation.VIEW_BASIC);
return null;
}
public static class StorageServiceList extends ResultList<StorageService> { public static class StorageServiceList extends ResultList<StorageService> {
/* Required for serde */ /* Required for serde */
} }

View File

@ -10,6 +10,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -37,6 +38,7 @@ import org.openmetadata.schema.entity.data.Container;
import org.openmetadata.schema.type.ChangeEvent; import org.openmetadata.schema.type.ChangeEvent;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
import org.openmetadata.service.jdbi3.ContainerRepository; import org.openmetadata.service.jdbi3.ContainerRepository;
@ -59,6 +61,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "containers") @Collection(name = "containers")
public class ContainerResource extends EntityResource<Container, ContainerRepository> { public class ContainerResource extends EntityResource<Container, ContainerRepository> {
public static final String COLLECTION_PATH = "v1/containers/"; public static final String COLLECTION_PATH = "v1/containers/";
static final String FIELDS = "parent,children,dataModel,owner,tags,followers,extension";
@Override @Override
public Container addHref(UriInfo uriInfo, Container container) { public Container addHref(UriInfo uriInfo, Container container) {
@ -75,15 +78,16 @@ public class ContainerResource extends EntityResource<Container, ContainerReposi
super(Container.class, new ContainerRepository(dao), authorizer); super(Container.class, new ContainerRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("parent,children,dataModel", MetadataOperation.VIEW_BASIC);
return null;
}
public static class ContainerList extends ResultList<Container> { public static class ContainerList extends ResultList<Container> {
/* Required for serde */ /* Required for serde */
} }
/* List of fields that are not stored as a property in the json document.
These are typically relationships or properties that could have a lot of data.
*/
static final String FIELDS = "parent,children,dataModel,owner,tags,followers,extension";
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -23,6 +23,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
@ -52,6 +53,7 @@ import org.openmetadata.schema.entity.classification.Classification;
import org.openmetadata.schema.entity.data.Table; import org.openmetadata.schema.entity.data.Table;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.jdbi3.ClassificationRepository; import org.openmetadata.service.jdbi3.ClassificationRepository;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
import org.openmetadata.service.jdbi3.ListFilter; import org.openmetadata.service.jdbi3.ListFilter;
@ -75,6 +77,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "classifications", order = 4) // Initialize before TagResource, Glossary, and GlossaryTerms @Collection(name = "classifications", order = 4) // Initialize before TagResource, Glossary, and GlossaryTerms
public class ClassificationResource extends EntityResource<Classification, ClassificationRepository> { public class ClassificationResource extends EntityResource<Classification, ClassificationRepository> {
public static final String TAG_COLLECTION_PATH = "/v1/classifications/"; public static final String TAG_COLLECTION_PATH = "/v1/classifications/";
static final String FIELDS = "usageCount,termCount";
static class ClassificationList extends ResultList<Classification> { static class ClassificationList extends ResultList<Classification> {
/* Required for serde */ /* Required for serde */
@ -85,8 +88,11 @@ public class ClassificationResource extends EntityResource<Classification, Class
Objects.requireNonNull(collectionDAO, "TagRepository must not be null"); Objects.requireNonNull(collectionDAO, "TagRepository must not be null");
} }
@SuppressWarnings("unused") // Method used by reflection @Override
static final String FIELDS = "usageCount,termCount"; protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("usageCount,termCount", MetadataOperation.VIEW_BASIC);
return null;
}
@GET @GET
@Operation( @Operation(

View File

@ -59,6 +59,7 @@ import org.openmetadata.schema.entity.classification.Tag;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.EntityReference; import org.openmetadata.schema.type.EntityReference;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.schema.type.Relationship; import org.openmetadata.schema.type.Relationship;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.OpenMetadataApplicationConfig; import org.openmetadata.service.OpenMetadataApplicationConfig;
@ -92,6 +93,7 @@ import org.openmetadata.service.util.ResultList;
public class TagResource extends EntityResource<Tag, TagRepository> { public class TagResource extends EntityResource<Tag, TagRepository> {
private final CollectionDAO daoCollection; private final CollectionDAO daoCollection;
public static final String TAG_COLLECTION_PATH = "/v1/tags/"; public static final String TAG_COLLECTION_PATH = "/v1/tags/";
static final String FIELDS = "children, usageCount";
static class TagList extends ResultList<Tag> { static class TagList extends ResultList<Tag> {
/* Required for serde */ /* Required for serde */
@ -103,6 +105,12 @@ public class TagResource extends EntityResource<Tag, TagRepository> {
daoCollection = collectionDAO; daoCollection = collectionDAO;
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("children,usageCount", MetadataOperation.VIEW_BASIC);
return null;
}
private void migrateTags() { private void migrateTags() {
// Just want to run it when upgrading to version above 0.13.1 where tag relationship are not there , once we have // Just want to run it when upgrading to version above 0.13.1 where tag relationship are not there , once we have
// any entries we don't need to run it // any entries we don't need to run it
@ -188,8 +196,6 @@ public class TagResource extends EntityResource<Tag, TagRepository> {
} }
} }
static final String FIELDS = "children, usageCount";
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -54,6 +54,7 @@ import org.openmetadata.schema.entity.teams.Role;
import org.openmetadata.schema.type.EntityHistory; import org.openmetadata.schema.type.EntityHistory;
import org.openmetadata.schema.type.EntityReference; import org.openmetadata.schema.type.EntityReference;
import org.openmetadata.schema.type.Include; import org.openmetadata.schema.type.Include;
import org.openmetadata.schema.type.MetadataOperation;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.OpenMetadataApplicationConfig; import org.openmetadata.service.OpenMetadataApplicationConfig;
import org.openmetadata.service.jdbi3.CollectionDAO; import org.openmetadata.service.jdbi3.CollectionDAO;
@ -79,6 +80,7 @@ import org.openmetadata.service.util.ResultList;
@Slf4j @Slf4j
public class RoleResource extends EntityResource<Role, RoleRepository> { public class RoleResource extends EntityResource<Role, RoleRepository> {
public static final String COLLECTION_PATH = "/v1/roles/"; public static final String COLLECTION_PATH = "/v1/roles/";
public static final String FIELDS = "policies,teams,users";
@Override @Override
public Role addHref(UriInfo uriInfo, Role role) { public Role addHref(UriInfo uriInfo, Role role) {
@ -92,6 +94,12 @@ public class RoleResource extends EntityResource<Role, RoleRepository> {
super(Role.class, new RoleRepository(collectionDAO), authorizer); super(Role.class, new RoleRepository(collectionDAO), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("policies,teams,users", MetadataOperation.VIEW_BASIC);
return null;
}
@Override @Override
public void initialize(OpenMetadataApplicationConfig config) throws IOException { public void initialize(OpenMetadataApplicationConfig config) throws IOException {
List<Role> roles = repository.getEntitiesFromSeedData(); List<Role> roles = repository.getEntitiesFromSeedData();
@ -111,8 +119,6 @@ public class RoleResource extends EntityResource<Role, RoleRepository> {
/* Required for serde */ /* Required for serde */
} }
public static final String FIELDS = "policies,teams,users";
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -103,6 +103,8 @@ public class TeamResource extends EntityResource<Team, TeamRepository> {
@Override @Override
protected List<MetadataOperation> getEntitySpecificOperations() { protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation(
"profile,owns,defaultRoles,parents,children,policies,userCount,childrenCount", MetadataOperation.VIEW_BASIC);
return listOf(MetadataOperation.EDIT_POLICY, MetadataOperation.EDIT_USERS); return listOf(MetadataOperation.EDIT_POLICY, MetadataOperation.EDIT_USERS);
} }

View File

@ -158,6 +158,7 @@ public class UserResource extends EntityResource<User, UserRepository> {
private boolean isEmailServiceEnabled; private boolean isEmailServiceEnabled;
private AuthenticationConfiguration authenticationConfiguration; private AuthenticationConfiguration authenticationConfiguration;
private final AuthenticatorHandler authHandler; private final AuthenticatorHandler authHandler;
static final String FIELDS = "profile,roles,teams,follows,owns";
@Override @Override
public User addHref(UriInfo uriInfo, User user) { public User addHref(UriInfo uriInfo, User user) {
@ -180,6 +181,7 @@ public class UserResource extends EntityResource<User, UserRepository> {
@Override @Override
protected List<MetadataOperation> getEntitySpecificOperations() { protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("profile,roles,teams,follows,owns", MetadataOperation.VIEW_BASIC);
return listOf(MetadataOperation.EDIT_TEAMS); return listOf(MetadataOperation.EDIT_TEAMS);
} }
@ -201,8 +203,6 @@ public class UserResource extends EntityResource<User, UserRepository> {
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "profile,roles,teams,follows,owns";
@GET @GET
@Valid @Valid
@Operation( @Operation(

View File

@ -13,6 +13,8 @@
package org.openmetadata.service.resources.topics; package org.openmetadata.service.resources.topics;
import static org.openmetadata.common.utils.CommonUtil.listOf;
import io.swagger.v3.oas.annotations.ExternalDocumentation; import io.swagger.v3.oas.annotations.ExternalDocumentation;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@ -23,6 +25,7 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import javax.json.JsonPatch; import javax.json.JsonPatch;
import javax.validation.Valid; import javax.validation.Valid;
@ -73,6 +76,7 @@ import org.openmetadata.service.util.ResultList;
@Collection(name = "topics") @Collection(name = "topics")
public class TopicResource extends EntityResource<Topic, TopicRepository> { public class TopicResource extends EntityResource<Topic, TopicRepository> {
public static final String COLLECTION_PATH = "v1/topics/"; public static final String COLLECTION_PATH = "v1/topics/";
static final String FIELDS = "owner,followers,tags,sampleData,extension";
@Override @Override
public Topic addHref(UriInfo uriInfo, Topic topic) { public Topic addHref(UriInfo uriInfo, Topic topic) {
@ -86,12 +90,16 @@ public class TopicResource extends EntityResource<Topic, TopicRepository> {
super(Topic.class, new TopicRepository(dao), authorizer); super(Topic.class, new TopicRepository(dao), authorizer);
} }
@Override
protected List<MetadataOperation> getEntitySpecificOperations() {
addViewOperation("sampleData", MetadataOperation.VIEW_SAMPLE_DATA);
return listOf(MetadataOperation.VIEW_SAMPLE_DATA, MetadataOperation.EDIT_SAMPLE_DATA);
}
public static class TopicList extends ResultList<Topic> { public static class TopicList extends ResultList<Topic> {
/* Required for serde */ /* Required for serde */
} }
static final String FIELDS = "owner,followers,tags,sampleData,extension";
@GET @GET
@Operation( @Operation(
operationId = "listTopics", operationId = "listTopics",

View File

@ -126,7 +126,7 @@
"$ref": "../services/dashboardService.json#/definitions/dashboardServiceType" "$ref": "../services/dashboardService.json#/definitions/dashboardServiceType"
}, },
"usageSummary": { "usageSummary": {
"description": "Latest usage information for this database.", "description": "Latest usage information for this chart.",
"$ref": "../../type/usageDetails.json", "$ref": "../../type/usageDetails.json",
"default": null "default": null
}, },

View File

@ -83,7 +83,7 @@
"$ref": "../services/dashboardService.json#/definitions/dashboardServiceType" "$ref": "../services/dashboardService.json#/definitions/dashboardServiceType"
}, },
"usageSummary": { "usageSummary": {
"description": "Latest usage information for this database.", "description": "Latest usage information for this dashboard.",
"$ref": "../../type/usageDetails.json", "$ref": "../../type/usageDetails.json",
"default": null "default": null
}, },