Skip to content

Commit 1325431

Browse files
authored
Updated the REST API to allow updating group metadata (with labels) (#4327)
* Updated the REST API to allow updating group metadata (with labels) * Add test of group metadata, fix issues.
1 parent 295f165 commit 1325431

35 files changed

+780
-256
lines changed

app/src/main/java/io/apicurio/registry/cncf/schemaregistry/impl/SchemagroupsResourceImpl.java

+5-7
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,12 @@ public void createGroup(String groupId, SchemaGroup data) {
9696

9797
storage.createGroup(group.build());
9898
} catch (GroupAlreadyExistsException e) {
99-
GroupMetaDataDto existing = storage.getGroupMetaData(groupId);
99+
EditableGroupMetaDataDto dto = EditableGroupMetaDataDto.builder()
100+
.description(data.getDescription())
101+
.labels(data.getGroupProperties())
102+
.build();
100103

101-
group.createdBy(existing.getCreatedBy())
102-
.createdOn(existing.getCreatedOn())
103-
.modifiedBy(user)
104-
.modifiedOn(new Date().getTime());
105-
106-
storage.updateGroupMetaData(group.build());
104+
storage.updateGroupMetaData(groupId, dto);
107105
}
108106
}
109107

app/src/main/java/io/apicurio/registry/events/EventSourcedRegistryStorage.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -251,14 +251,14 @@ public void createGroup(GroupMetaDataDto group) throws GroupAlreadyExistsExcepti
251251
}
252252

253253
/**
254-
* @see io.apicurio.registry.storage.RegistryStorage#updateGroupMetaData(io.apicurio.registry.storage.dto.GroupMetaDataDto)
254+
* @see io.apicurio.registry.storage.decorator.RegistryStorageDecoratorBase#updateGroupMetaData(java.lang.String, io.apicurio.registry.storage.dto.EditableGroupMetaDataDto)
255255
*/
256256
@Override
257-
public void updateGroupMetaData(GroupMetaDataDto group) throws GroupNotFoundException, RegistryStorageException {
258-
delegate.updateGroupMetaData(group);
257+
public void updateGroupMetaData(String groupId, EditableGroupMetaDataDto dto) throws GroupNotFoundException, RegistryStorageException {
258+
delegate.updateGroupMetaData(groupId, dto);
259259
ArtifactId data = new ArtifactId();
260-
data.setGroupId(group.getGroupId());
261-
fireEvent(RegistryEventType.GROUP_UPDATED, group.getGroupId(), data, null);
260+
data.setGroupId(groupId);
261+
fireEvent(RegistryEventType.GROUP_UPDATED, groupId, data, null);
262262
}
263263

264264
/**

app/src/main/java/io/apicurio/registry/rest/v2/GroupsResourceImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ public ArtifactMetaData getArtifactMetaData(String groupId, String artifactId) {
211211
@Audited(extractParameters = {"0", KEY_GROUP_ID, "1", KEY_ARTIFACT_ID, "2", KEY_EDITABLE_METADATA})
212212
@Authorized(style = AuthorizedStyle.GroupAndArtifact, level = AuthorizedLevel.Write)
213213
public void updateArtifactMetaData(String groupId, String artifactId, EditableMetaData data) {
214-
v3.updateArtifactMetaData(groupId, artifactId, io.apicurio.registry.rest.v3.beans.EditableMetaData.builder()
214+
v3.updateArtifactMetaData(groupId, artifactId, io.apicurio.registry.rest.v3.beans.EditableArtifactMetaData.builder()
215215
.description(data.getDescription())
216216
.labels(V2ApiUtil.toV3Labels(data.getLabels(), data.getProperties()))
217217
.name(data.getName())
@@ -538,7 +538,7 @@ public VersionMetaData getArtifactVersionMetaData(String groupId, String artifac
538538
@Audited(extractParameters = {"0", KEY_GROUP_ID, "1", KEY_ARTIFACT_ID, "2", KEY_VERSION, "3", KEY_EDITABLE_METADATA})
539539
@Authorized(style = AuthorizedStyle.GroupAndArtifact, level = AuthorizedLevel.Write)
540540
public void updateArtifactVersionMetaData(String groupId, String artifactId, String version, EditableMetaData data) {
541-
v3.updateArtifactVersionMetaData(groupId, artifactId, version, io.apicurio.registry.rest.v3.beans.EditableMetaData.builder()
541+
v3.updateArtifactVersionMetaData(groupId, artifactId, version, io.apicurio.registry.rest.v3.beans.EditableArtifactMetaData.builder()
542542
.description(data.getDescription())
543543
.labels(V2ApiUtil.toV3Labels(data.getLabels(), data.getProperties()))
544544
.name(data.getName())

app/src/main/java/io/apicurio/registry/rest/v3/GroupsResourceImpl.java

+21-6
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import jakarta.enterprise.context.ApplicationScoped;
3535
import jakarta.inject.Inject;
3636
import jakarta.interceptor.Interceptors;
37-
import jakarta.validation.constraints.NotNull;
3837
import jakarta.ws.rs.BadRequestException;
3938
import jakarta.ws.rs.HttpMethod;
4039
import jakarta.ws.rs.NotAllowedException;
@@ -216,7 +215,7 @@ public ArtifactMetaData getArtifactMetaData(String groupId, String artifactId) {
216215
@Override
217216
@Audited(extractParameters = {"0", KEY_GROUP_ID, "1", KEY_ARTIFACT_ID, "2", KEY_EDITABLE_METADATA})
218217
@Authorized(style = AuthorizedStyle.GroupAndArtifact, level = AuthorizedLevel.Write)
219-
public void updateArtifactMetaData(String groupId, String artifactId, EditableMetaData data) {
218+
public void updateArtifactMetaData(String groupId, String artifactId, EditableArtifactMetaData data) {
220219
requireParameter("groupId", groupId);
221220
requireParameter("artifactId", artifactId);
222221

@@ -267,6 +266,19 @@ public GroupMetaData getGroupById(String groupId) {
267266
public void deleteGroupById(String groupId) {
268267
storage.deleteGroup(groupId);
269268
}
269+
270+
/**
271+
* @see io.apicurio.registry.rest.v3.GroupsResource#updateGroupById(java.lang.String, io.apicurio.registry.rest.v3.beans.EditableGroupMetaData)
272+
*/
273+
@Override
274+
public void updateGroupById(String groupId, EditableGroupMetaData data) {
275+
requireParameter("groupId", groupId);
276+
277+
EditableGroupMetaDataDto dto = new EditableGroupMetaDataDto();
278+
dto.setDescription(data.getDescription());
279+
dto.setLabels(data.getLabels());
280+
storage.updateGroupMetaData(new GroupId(groupId).getRawGroupIdWithNull(), dto);
281+
}
270282

271283
@Override
272284
@Authorized(style = AuthorizedStyle.None, level = AuthorizedLevel.Read)
@@ -551,12 +563,12 @@ public VersionMetaData getArtifactVersionMetaData(String groupId, String artifac
551563
}
552564

553565
/**
554-
* @see io.apicurio.registry.rest.v3.GroupsResource#updateArtifactVersionMetaData(java.lang.String, java.lang.String, java.lang.String, io.apicurio.registry.rest.v3.beans.EditableMetaData)
566+
* @see io.apicurio.registry.rest.v3.GroupsResource#updateArtifactVersionMetaData(java.lang.String, java.lang.String, java.lang.String, io.apicurio.registry.rest.v3.beans.EditableArtifactMetaData)
555567
*/
556568
@Override
557569
@Audited(extractParameters = {"0", KEY_GROUP_ID, "1", KEY_ARTIFACT_ID, "2", KEY_VERSION, "3", KEY_EDITABLE_METADATA})
558570
@Authorized(style = AuthorizedStyle.GroupAndArtifact, level = AuthorizedLevel.Write)
559-
public void updateArtifactVersionMetaData(String groupId, String artifactId, String versionExpression, EditableMetaData data) {
571+
public void updateArtifactVersionMetaData(String groupId, String artifactId, String versionExpression, EditableArtifactMetaData data) {
560572
requireParameter("groupId", groupId);
561573
requireParameter("artifactId", artifactId);
562574
requireParameter("versionExpression", versionExpression);
@@ -1022,10 +1034,13 @@ public ArtifactBranch getArtifactBranch(String groupId, String artifactId, Strin
10221034
}
10231035

10241036

1037+
/**
1038+
* @see io.apicurio.registry.rest.v3.GroupsResource#createOrUpdateArtifactBranch(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
1039+
*/
10251040
@Override
10261041
@Audited(extractParameters = {"0", KEY_GROUP_ID, "1", KEY_ARTIFACT_ID, "2", "branch_id", "3", KEY_VERSION}) // TODO
10271042
@Authorized(style = AuthorizedStyle.GroupAndArtifact, level = AuthorizedLevel.Write)
1028-
public ArtifactBranch createOrUpdateArtifactBranch(String groupId, String artifactId, String rawBranchId, @NotNull String version) {
1043+
public ArtifactBranch createOrUpdateArtifactBranch(String groupId, String artifactId, String rawBranchId, String version) {
10291044
requireParameter("groupId", groupId);
10301045
requireParameter("artifactId", artifactId);
10311046
requireParameter("branchId", rawBranchId);
@@ -1053,7 +1068,7 @@ public ArtifactBranch createOrUpdateArtifactBranch(String groupId, String artifa
10531068
@Override
10541069
@Audited(extractParameters = {"0", KEY_GROUP_ID, "1", KEY_ARTIFACT_ID, "2", "branch_id", "3", "branch"}) // TODO
10551070
@Authorized(style = AuthorizedStyle.GroupAndArtifact, level = AuthorizedLevel.Write)
1056-
public ArtifactBranch createOrReplaceArtifactBranch(String groupId, String artifactId, String rawBranchId, @NotNull ArtifactBranch branch) {
1071+
public ArtifactBranch createOrReplaceArtifactBranch(String groupId, String artifactId, String rawBranchId, ArtifactBranch branch) {
10571072
requireParameter("groupId", groupId);
10581073
requireParameter("artifactId", artifactId);
10591074
requireParameter("branchId", rawBranchId);

app/src/main/java/io/apicurio/registry/rest/v3/V3ApiUtil.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ public static GroupMetaData groupDtoToGroup(GroupMetaDataDto dto) {
284284
group.setModifiedBy(dto.getModifiedBy());
285285
group.setCreatedOn(new Date(dto.getCreatedOn()));
286286
group.setModifiedOn(new Date(dto.getModifiedOn()));
287-
group.setProperties(dto.getLabels());
287+
group.setLabels(dto.getLabels());
288288
return group;
289289
}
290290

app/src/main/java/io/apicurio/registry/storage/RegistryStorage.java

+9-8
Original file line numberDiff line numberDiff line change
@@ -559,14 +559,6 @@ void updateArtifactRule(String groupId, String artifactId, RuleType rule, RuleCo
559559
*/
560560
void createGroup(GroupMetaDataDto group) throws GroupAlreadyExistsException, RegistryStorageException;
561561

562-
/**
563-
* Updates the metadata of an existent group.
564-
*
565-
* @param group
566-
* @throws RegistryStorageException
567-
*/
568-
void updateGroupMetaData(GroupMetaDataDto group) throws GroupNotFoundException, RegistryStorageException;
569-
570562
/**
571563
* Deletes a group identified by the given groupId and DELETES ALL resources related to this group
572564
*
@@ -576,6 +568,14 @@ void updateArtifactRule(String groupId, String artifactId, RuleType rule, RuleCo
576568
*/
577569
void deleteGroup(String groupId) throws GroupNotFoundException, RegistryStorageException;
578570

571+
/**
572+
* Updates the metadata for a group.
573+
* @param groupId
574+
* @param dto
575+
*/
576+
void updateGroupMetaData(String groupId, EditableGroupMetaDataDto dto);
577+
void updateGroupMetaData(String groupId, String description, Map<String, String> labels, String modifiedBy, Date modifiedOn);
578+
579579
/**
580580
* Get all groupIds
581581
*
@@ -950,4 +950,5 @@ enum ArtifactRetrievalBehavior {
950950
*/
951951
SKIP_DISABLED_LATEST
952952
}
953+
953954
}

app/src/main/java/io/apicurio/registry/storage/decorator/ReadOnlyRegistryStorageDecorator.java

+13-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import java.util.Date;
2323
import java.util.List;
24+
import java.util.Map;
2425
import java.util.function.Supplier;
2526

2627
@ApplicationScoped
@@ -241,11 +242,20 @@ public void createGroup(GroupMetaDataDto group) throws GroupAlreadyExistsExcepti
241242
delegate.createGroup(group);
242243
}
243244

244-
245+
246+
@Override
247+
public void updateGroupMetaData(String groupId, EditableGroupMetaDataDto dto) {
248+
checkReadOnly();
249+
delegate.updateGroupMetaData(groupId, dto);
250+
}
251+
252+
/**
253+
* @see io.apicurio.registry.storage.RegistryStorage#updateGroupMetaData(java.lang.String, java.lang.String, java.util.Map, java.lang.String, java.util.Date)
254+
*/
245255
@Override
246-
public void updateGroupMetaData(GroupMetaDataDto group) throws GroupNotFoundException, RegistryStorageException {
256+
public void updateGroupMetaData(String groupId, String description, Map<String, String> labels, String modifiedBy, Date modifiedOn) {
247257
checkReadOnly();
248-
delegate.updateGroupMetaData(group);
258+
delegate.updateGroupMetaData(groupId, description, labels, modifiedBy, modifiedOn);
249259
}
250260

251261

app/src/main/java/io/apicurio/registry/storage/decorator/RegistryStorageDecoratorBase.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import java.util.Date;
1818
import java.util.List;
19+
import java.util.Map;
1920

2021
/**
2122
* Forwards all method calls to the delegate, extends the read-only base.
@@ -188,9 +189,15 @@ public void createGroup(GroupMetaDataDto group)
188189

189190

190191
@Override
191-
public void updateGroupMetaData(GroupMetaDataDto group)
192-
throws GroupNotFoundException, RegistryStorageException {
193-
delegate.updateGroupMetaData(group);
192+
public void updateGroupMetaData(String groupId, EditableGroupMetaDataDto dto) throws GroupNotFoundException, RegistryStorageException {
193+
delegate.updateGroupMetaData(groupId, dto);
194+
}
195+
196+
197+
@Override
198+
public void updateGroupMetaData(String groupId, String description, Map<String, String> labels,
199+
String modifiedBy, Date modifiedOn) {
200+
delegate.updateGroupMetaData(groupId, description, labels, modifiedBy, modifiedOn);
194201
}
195202

196203

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.apicurio.registry.storage.dto;
2+
3+
import java.util.Map;
4+
5+
import io.quarkus.runtime.annotations.RegisterForReflection;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Builder;
8+
import lombok.EqualsAndHashCode;
9+
import lombok.Getter;
10+
import lombok.NoArgsConstructor;
11+
import lombok.Setter;
12+
import lombok.ToString;
13+
14+
@NoArgsConstructor
15+
@AllArgsConstructor
16+
@Builder
17+
@Getter
18+
@Setter
19+
@EqualsAndHashCode
20+
@ToString
21+
@RegisterForReflection
22+
public class EditableGroupMetaDataDto {
23+
24+
private String description;
25+
private Map<String, String> labels;
26+
}

app/src/main/java/io/apicurio/registry/storage/impl/gitops/AbstractReadOnlyRegistryStorage.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.util.Date;
2020
import java.util.List;
21+
import java.util.Map;
2122

2223
public abstract class AbstractReadOnlyRegistryStorage implements RegistryStorage {
2324

@@ -187,7 +188,13 @@ public void createGroup(GroupMetaDataDto group) throws RegistryStorageException
187188

188189

189190
@Override
190-
public void updateGroupMetaData(GroupMetaDataDto group) throws RegistryStorageException {
191+
public void updateGroupMetaData(String groupId, EditableGroupMetaDataDto dto) {
192+
readOnlyViolation();
193+
}
194+
195+
@Override
196+
public void updateGroupMetaData(String groupId, String description, Map<String, String> labels,
197+
String modifiedBy, Date modifiedOn) {
191198
readOnlyViolation();
192199
}
193200

app/src/main/java/io/apicurio/registry/storage/impl/kafkasql/KafkaSqlRegistryStorage.java

+18-2
Original file line numberDiff line numberDiff line change
@@ -597,8 +597,24 @@ public void createGroup(GroupMetaDataDto group) {
597597

598598

599599
@Override
600-
public void updateGroupMetaData(GroupMetaDataDto group) {
601-
UUID reqId = ConcurrentUtil.get(submitter.submitGroup(ActionType.UPDATE, group));
600+
public void updateGroupMetaData(String groupId, EditableGroupMetaDataDto edto) {
601+
String modifiedBy = securityIdentity.getPrincipal().getName();
602+
Date modifiedOn = new Date();
603+
604+
updateGroupMetaData(groupId, edto.getDescription(), edto.getLabels(), modifiedBy, modifiedOn);
605+
}
606+
607+
@Override
608+
public void updateGroupMetaData(String groupId, String description, Map<String, String> labels,
609+
String modifiedBy, Date modifiedOn) {
610+
// Note: the next line will throw GroupNotFoundException if the group does not exist, so there is no need for an extra check.
611+
GroupMetaDataDto dto = delegate.getGroupMetaData(groupId);
612+
dto.setModifiedBy(modifiedBy);
613+
dto.setModifiedOn(modifiedOn.getTime());
614+
dto.setDescription(description);
615+
dto.setLabels(labels);
616+
617+
UUID reqId = ConcurrentUtil.get(submitter.submitGroup(ActionType.UPDATE, dto));
602618
coordinator.waitForResponse(reqId);
603619
}
604620

0 commit comments

Comments
 (0)