Skip to content

Commit fc0c9a6

Browse files
authored
Updated user interface to support 3.x REST API changes (#4709)
* Begin work on updating the UI for v3 concepts * Major changes to the UI for registry v3 * Fixed ui tests * Fix for incorrect import in ui * Changes made after PR review
1 parent fd86660 commit fc0c9a6

File tree

192 files changed

+5241
-2521
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

192 files changed

+5241
-2521
lines changed

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -1012,7 +1012,8 @@ public VersionSearchResults listArtifactVersions(String groupId, String artifact
10121012
limit = BigInteger.valueOf(20);
10131013
}
10141014

1015-
VersionSearchResultsDto resultsDto = storage.searchVersions(defaultGroupIdToNull(groupId), artifactId, offset.intValue(), limit.intValue());
1015+
VersionSearchResultsDto resultsDto = storage.searchVersions(defaultGroupIdToNull(groupId),
1016+
artifactId, OrderBy.createdOn, OrderDirection.asc, offset.intValue(), limit.intValue());
10161017
return V2ApiUtil.dtoToSearchResults(resultsDto);
10171018
}
10181019

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

+21-14
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.apicurio.registry.rest.v3.beans.ArtifactMetaData;
2323
import io.apicurio.registry.rest.v3.beans.ArtifactReference;
2424
import io.apicurio.registry.rest.v3.beans.ArtifactSearchResults;
25+
import io.apicurio.registry.rest.v3.beans.ArtifactSortBy;
2526
import io.apicurio.registry.rest.v3.beans.Comment;
2627
import io.apicurio.registry.rest.v3.beans.CreateArtifact;
2728
import io.apicurio.registry.rest.v3.beans.CreateArtifactResponse;
@@ -32,16 +33,16 @@
3233
import io.apicurio.registry.rest.v3.beans.EditableVersionMetaData;
3334
import io.apicurio.registry.rest.v3.beans.GroupMetaData;
3435
import io.apicurio.registry.rest.v3.beans.GroupSearchResults;
36+
import io.apicurio.registry.rest.v3.beans.GroupSortBy;
3537
import io.apicurio.registry.rest.v3.beans.HandleReferencesType;
3638
import io.apicurio.registry.rest.v3.beans.IfArtifactExists;
37-
import io.apicurio.registry.rest.v3.beans.IfVersionExists;
3839
import io.apicurio.registry.rest.v3.beans.NewComment;
3940
import io.apicurio.registry.rest.v3.beans.Rule;
40-
import io.apicurio.registry.rest.v3.beans.SortBy;
4141
import io.apicurio.registry.rest.v3.beans.SortOrder;
4242
import io.apicurio.registry.rest.v3.beans.VersionContent;
4343
import io.apicurio.registry.rest.v3.beans.VersionMetaData;
4444
import io.apicurio.registry.rest.v3.beans.VersionSearchResults;
45+
import io.apicurio.registry.rest.v3.beans.VersionSortBy;
4546
import io.apicurio.registry.rest.v3.shared.CommonResourceOperations;
4647
import io.apicurio.registry.rules.RuleApplicationType;
4748
import io.apicurio.registry.rules.RulesService;
@@ -248,9 +249,9 @@ public void updateGroupById(String groupId, EditableGroupMetaData data) {
248249

249250
@Override
250251
@Authorized(style = AuthorizedStyle.None, level = AuthorizedLevel.Read)
251-
public GroupSearchResults listGroups(BigInteger limit, BigInteger offset, SortOrder order, SortBy orderby) {
252+
public GroupSearchResults listGroups(BigInteger limit, BigInteger offset, SortOrder order, GroupSortBy orderby) {
252253
if (orderby == null) {
253-
orderby = SortBy.name;
254+
orderby = GroupSortBy.groupId;
254255
}
255256
if (offset == null) {
256257
offset = BigInteger.valueOf(0);
@@ -272,7 +273,7 @@ public GroupSearchResults listGroups(BigInteger limit, BigInteger offset, SortOr
272273
@Authorized(style = AuthorizedStyle.None, level = AuthorizedLevel.Write)
273274
public GroupMetaData createGroup(CreateGroup data) {
274275
GroupMetaDataDto.GroupMetaDataDtoBuilder group = GroupMetaDataDto.builder()
275-
.groupId(data.getId())
276+
.groupId(data.getGroupId())
276277
.description(data.getDescription())
277278
.labels(data.getLabels());
278279

@@ -281,7 +282,7 @@ public GroupMetaData createGroup(CreateGroup data) {
281282

282283
storage.createGroup(group.build());
283284

284-
return V3ApiUtil.groupDtoToGroup(storage.getGroupMetaData(data.getId()));
285+
return V3ApiUtil.groupDtoToGroup(storage.getGroupMetaData(data.getGroupId()));
285286
}
286287

287288
@Override
@@ -614,11 +615,11 @@ public void updateArtifactVersionComment(String groupId, String artifactId, Stri
614615
@Override
615616
@Authorized(style = AuthorizedStyle.GroupOnly, level = AuthorizedLevel.Read)
616617
public ArtifactSearchResults listArtifactsInGroup(String groupId, BigInteger limit, BigInteger offset,
617-
SortOrder order, SortBy orderby) {
618+
SortOrder order, ArtifactSortBy orderby) {
618619
requireParameter("groupId", groupId);
619620

620621
if (orderby == null) {
621-
orderby = SortBy.name;
622+
orderby = ArtifactSortBy.name;
622623
}
623624
if (offset == null) {
624625
offset = BigInteger.valueOf(0);
@@ -770,28 +771,34 @@ public CreateArtifactResponse createArtifact(String groupId, IfArtifactExists if
770771
}
771772
}
772773

773-
774774
@Override
775775
@Authorized(style = AuthorizedStyle.GroupAndArtifact, level = AuthorizedLevel.Read)
776-
public VersionSearchResults listArtifactVersions(String groupId, String artifactId, BigInteger offset, BigInteger limit) {
776+
public VersionSearchResults listArtifactVersions(String groupId, String artifactId, BigInteger offset,
777+
BigInteger limit, SortOrder order, VersionSortBy orderby) {
777778
requireParameter("groupId", groupId);
778779
requireParameter("artifactId", artifactId);
779-
780+
if (orderby == null) {
781+
orderby = VersionSortBy.createdOn;
782+
}
780783
if (offset == null) {
781784
offset = BigInteger.valueOf(0);
782785
}
783786
if (limit == null) {
784787
limit = BigInteger.valueOf(20);
785788
}
786789

787-
VersionSearchResultsDto resultsDto = storage.searchVersions(new GroupId(groupId).getRawGroupIdWithNull(), artifactId, offset.intValue(), limit.intValue());
790+
final OrderBy oBy = OrderBy.valueOf(orderby.name());
791+
final OrderDirection oDir = order == null || order == SortOrder.desc ? OrderDirection.asc : OrderDirection.desc;
792+
793+
VersionSearchResultsDto resultsDto = storage.searchVersions(new GroupId(groupId).getRawGroupIdWithNull(),
794+
artifactId, oBy, oDir, offset.intValue(), limit.intValue());
788795
return V3ApiUtil.dtoToSearchResults(resultsDto);
789796
}
790797

791798
@Override
792-
@Audited(extractParameters = {"0", KEY_GROUP_ID, "1", KEY_ARTIFACT_ID, "2", KEY_IF_EXISTS})
799+
@Audited(extractParameters = {"0", KEY_GROUP_ID, "1", KEY_ARTIFACT_ID})
793800
@Authorized(style = AuthorizedStyle.GroupAndArtifact, level = AuthorizedLevel.Write)
794-
public VersionMetaData createArtifactVersion(String groupId, String artifactId, IfVersionExists ifExists, CreateVersion data) {
801+
public VersionMetaData createArtifactVersion(String groupId, String artifactId, CreateVersion data) {
795802
requireParameter("content", data.getContent());
796803
requireParameter("groupId", groupId);
797804
requireParameter("artifactId", artifactId);

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

+65-11
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,13 @@
99
import io.apicurio.registry.metrics.health.readiness.ResponseTimeoutReadinessCheck;
1010
import io.apicurio.registry.model.GroupId;
1111
import io.apicurio.registry.rest.v3.beans.ArtifactSearchResults;
12-
import io.apicurio.registry.rest.v3.beans.SortBy;
12+
import io.apicurio.registry.rest.v3.beans.ArtifactSortBy;
13+
import io.apicurio.registry.rest.v3.beans.GroupSearchResults;
14+
import io.apicurio.registry.rest.v3.beans.GroupSortBy;
1315
import io.apicurio.registry.rest.v3.beans.SortOrder;
1416
import io.apicurio.registry.storage.RegistryStorage;
1517
import io.apicurio.registry.storage.dto.ArtifactSearchResultsDto;
18+
import io.apicurio.registry.storage.dto.GroupSearchResultsDto;
1619
import io.apicurio.registry.storage.dto.OrderBy;
1720
import io.apicurio.registry.storage.dto.OrderDirection;
1821
import io.apicurio.registry.storage.dto.SearchFilter;
@@ -51,15 +54,14 @@ public class SearchResourceImpl implements SearchResource {
5154
@Inject
5255
RegistryStorageContentUtils contentUtils;
5356

54-
5557
@Override
5658
@Authorized(style=AuthorizedStyle.None, level=AuthorizedLevel.Read)
5759
public ArtifactSearchResults searchArtifacts(String name, BigInteger offset, BigInteger limit, SortOrder order,
58-
SortBy orderby, List<String> labels, String description, String group,
59-
Long globalId, Long contentId)
60+
ArtifactSortBy orderby, List<String> labels, String description, String groupId, Long globalId, Long contentId,
61+
String artifactId)
6062
{
6163
if (orderby == null) {
62-
orderby = SortBy.name;
64+
orderby = ArtifactSortBy.name;
6365
}
6466
if (offset == null) {
6567
offset = BigInteger.valueOf(0);
@@ -69,7 +71,7 @@ public ArtifactSearchResults searchArtifacts(String name, BigInteger offset, Big
6971
}
7072

7173
final OrderBy oBy = OrderBy.valueOf(orderby.name());
72-
final OrderDirection oDir = order == null || order == SortOrder.asc ? OrderDirection.asc : OrderDirection.desc;
74+
final OrderDirection oDir = (order == null || order == SortOrder.asc) ? OrderDirection.asc : OrderDirection.desc;
7375

7476
Set<SearchFilter> filters = new HashSet<SearchFilter>();
7577
if (!StringUtil.isEmpty(name)) {
@@ -78,8 +80,8 @@ public ArtifactSearchResults searchArtifacts(String name, BigInteger offset, Big
7880
if (!StringUtil.isEmpty(description)) {
7981
filters.add(SearchFilter.ofDescription(description));
8082
}
81-
if (!StringUtil.isEmpty(group)) {
82-
filters.add(SearchFilter.ofGroup(new GroupId(group).getRawGroupIdWithNull()));
83+
if (!StringUtil.isEmpty(groupId)) {
84+
filters.add(SearchFilter.ofGroup(new GroupId(groupId).getRawGroupIdWithNull()));
8385
}
8486

8587
if (labels != null && !labels.isEmpty()) {
@@ -116,13 +118,13 @@ public ArtifactSearchResults searchArtifacts(String name, BigInteger offset, Big
116118
return V3ApiUtil.dtoToSearchResults(results);
117119
}
118120

119-
120121
@Override
121122
@Authorized(style=AuthorizedStyle.None, level=AuthorizedLevel.Read)
122-
public ArtifactSearchResults searchArtifactsByContent(Boolean canonical, String artifactType, BigInteger offset, BigInteger limit, SortOrder order, SortBy orderby, InputStream data) {
123+
public ArtifactSearchResults searchArtifactsByContent(Boolean canonical, String artifactType, BigInteger offset,
124+
BigInteger limit, SortOrder order, ArtifactSortBy orderby, InputStream data) {
123125

124126
if (orderby == null) {
125-
orderby = SortBy.name;
127+
orderby = ArtifactSortBy.name;
126128
}
127129
if (offset == null) {
128130
offset = BigInteger.valueOf(0);
@@ -158,6 +160,58 @@ public ArtifactSearchResults searchArtifactsByContent(Boolean canonical, String
158160
return V3ApiUtil.dtoToSearchResults(results);
159161
}
160162

163+
@Override
164+
public GroupSearchResults searchGroups(BigInteger offset, BigInteger limit, SortOrder order, GroupSortBy orderby,
165+
List<String> labels, String description, String groupId) {
166+
if (orderby == null) {
167+
orderby = GroupSortBy.groupId;
168+
}
169+
if (offset == null) {
170+
offset = BigInteger.valueOf(0);
171+
}
172+
if (limit == null) {
173+
limit = BigInteger.valueOf(20);
174+
}
175+
176+
final OrderBy oBy = OrderBy.valueOf(orderby.name());
177+
final OrderDirection oDir = order == null || order == SortOrder.asc ? OrderDirection.asc : OrderDirection.desc;
178+
179+
Set<SearchFilter> filters = new HashSet<SearchFilter>();
180+
if (!StringUtil.isEmpty(groupId)) {
181+
filters.add(SearchFilter.ofGroup(groupId));
182+
}
183+
if (!StringUtil.isEmpty(description)) {
184+
filters.add(SearchFilter.ofDescription(description));
185+
}
186+
187+
if (labels != null && !labels.isEmpty()) {
188+
labels.stream()
189+
.map(prop -> {
190+
int delimiterIndex = prop.indexOf(":");
191+
String labelKey;
192+
String labelValue;
193+
if (delimiterIndex == 0) {
194+
throw new BadRequestException("label search filter wrong formatted, missing left side of ':' delimiter");
195+
}
196+
if (delimiterIndex == (prop.length() - 1)) {
197+
throw new BadRequestException("label search filter wrong formatted, missing right side of ':' delimiter");
198+
}
199+
if (delimiterIndex < 0) {
200+
labelKey = prop;
201+
labelValue = null;
202+
} else{
203+
labelKey = prop.substring(0, delimiterIndex);
204+
labelValue = prop.substring(delimiterIndex + 1);
205+
}
206+
return SearchFilter.ofLabel(labelKey, labelValue);
207+
})
208+
.forEach(filters::add);
209+
}
210+
211+
GroupSearchResultsDto results = storage.searchGroups(filters, oBy, oDir, offset.intValue(), limit.intValue());
212+
return V3ApiUtil.dtoToSearchResults(results);
213+
}
214+
161215
/**
162216
* Make sure this is ONLY used when request instance is active.
163217
* e.g. in actual http request

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,8 @@ void updateArtifactRule(String groupId, String artifactId, RuleType rule, RuleCo
347347
* @throws ArtifactNotFoundException
348348
* @throws RegistryStorageException
349349
*/
350-
VersionSearchResultsDto searchVersions(String groupId, String artifactId, int offset, int limit) throws ArtifactNotFoundException, RegistryStorageException;
350+
VersionSearchResultsDto searchVersions(String groupId, String artifactId, OrderBy orderBy,
351+
OrderDirection orderDirection, int offset, int limit) throws ArtifactNotFoundException, RegistryStorageException;
351352

352353
/**
353354
* Gets the stored artifact content for the artifact version with the given unique global ID.

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

+9-11
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
package io.apicurio.registry.storage.decorator;
22

3-
import java.time.Instant;
4-
import java.util.List;
5-
import java.util.Map;
6-
import java.util.Optional;
7-
import java.util.Set;
8-
import java.util.function.Function;
9-
103
import io.apicurio.common.apps.config.DynamicConfigPropertyDto;
114
import io.apicurio.registry.content.ContentHandle;
125
import io.apicurio.registry.model.BranchId;
@@ -39,6 +32,13 @@
3932
import io.apicurio.registry.types.RuleType;
4033
import io.apicurio.registry.utils.impexp.Entity;
4134

35+
import java.time.Instant;
36+
import java.util.List;
37+
import java.util.Map;
38+
import java.util.Optional;
39+
import java.util.Set;
40+
import java.util.function.Function;
41+
4242
/**
4343
* Forwards all read-only method calls to the delegate.
4444
*
@@ -160,11 +160,9 @@ public List<String> getArtifactVersions(String groupId, String artifactId)
160160
return delegate.getArtifactVersions(groupId, artifactId);
161161
}
162162

163-
164163
@Override
165-
public VersionSearchResultsDto searchVersions(String groupId, String artifactId, int offset, int limit)
166-
throws ArtifactNotFoundException, RegistryStorageException {
167-
return delegate.searchVersions(groupId, artifactId, offset, limit);
164+
public VersionSearchResultsDto searchVersions(String groupId, String artifactId, OrderBy orderBy, OrderDirection orderDirection, int offset, int limit) throws RegistryStorageException {
165+
return delegate.searchVersions(groupId, artifactId, orderBy, orderDirection, offset, limit);
168166
}
169167

170168

Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package io.apicurio.registry.storage.dto;
22

33
public enum OrderBy {
4-
name, createdOn, globalId
4+
name, createdOn, modifiedOn, // Shared
5+
groupId, // Group specific
6+
artifactId, artifactType, // Artifact specific
7+
globalId, version // Version specific
58
}

app/src/main/java/io/apicurio/registry/storage/dto/SearchFilter.java

-4
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,6 @@ public static SearchFilter ofState(VersionState state) {
6666
return new SearchFilter(SearchFilterType.state, state.name());
6767
}
6868

69-
public static SearchFilter ofEverything(String value) {
70-
return new SearchFilter(SearchFilterType.everything, value);
71-
}
72-
7369
@SuppressWarnings("unchecked")
7470
public Pair<String, String> getLabelFilterValue() {
7571
if (value == null) {

app/src/main/java/io/apicurio/registry/storage/dto/SearchFilterType.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
public enum SearchFilterType {
44

5-
group, name, description, labels, contentHash, canonicalHash,
6-
everything, globalId, contentId, state
5+
group, name, description, labels, contentHash, canonicalHash, globalId, contentId, state
76

87
}

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

+21-7
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,30 @@
66
import io.apicurio.common.apps.logging.Logged;
77
import io.apicurio.registry.content.ContentHandle;
88
import io.apicurio.registry.metrics.StorageMetricsApply;
9+
import io.apicurio.registry.model.BranchId;
10+
import io.apicurio.registry.model.GA;
11+
import io.apicurio.registry.model.GAV;
912
import io.apicurio.registry.storage.RegistryStorage;
10-
import io.apicurio.registry.storage.dto.*;
13+
import io.apicurio.registry.storage.dto.ArtifactMetaDataDto;
14+
import io.apicurio.registry.storage.dto.ArtifactReferenceDto;
15+
import io.apicurio.registry.storage.dto.ArtifactSearchResultsDto;
16+
import io.apicurio.registry.storage.dto.ArtifactVersionMetaDataDto;
17+
import io.apicurio.registry.storage.dto.CommentDto;
18+
import io.apicurio.registry.storage.dto.ContentWrapperDto;
19+
import io.apicurio.registry.storage.dto.GroupMetaDataDto;
20+
import io.apicurio.registry.storage.dto.GroupSearchResultsDto;
21+
import io.apicurio.registry.storage.dto.OrderBy;
22+
import io.apicurio.registry.storage.dto.OrderDirection;
23+
import io.apicurio.registry.storage.dto.RoleMappingDto;
24+
import io.apicurio.registry.storage.dto.RoleMappingSearchResultsDto;
25+
import io.apicurio.registry.storage.dto.RuleConfigurationDto;
26+
import io.apicurio.registry.storage.dto.SearchFilter;
27+
import io.apicurio.registry.storage.dto.StoredArtifactVersionDto;
28+
import io.apicurio.registry.storage.dto.VersionSearchResultsDto;
1129
import io.apicurio.registry.storage.error.RegistryStorageException;
1230
import io.apicurio.registry.storage.error.VersionNotFoundException;
1331
import io.apicurio.registry.storage.impl.gitops.sql.BlueSqlStorage;
1432
import io.apicurio.registry.storage.impl.gitops.sql.GreenSqlStorage;
15-
import io.apicurio.registry.model.BranchId;
16-
import io.apicurio.registry.model.GA;
17-
import io.apicurio.registry.model.GAV;
1833
import io.apicurio.registry.types.RuleType;
1934
import io.apicurio.registry.utils.impexp.Entity;
2035
import io.quarkus.scheduler.Scheduled;
@@ -267,10 +282,9 @@ public List<String> getArtifactVersions(String groupId, String artifactId, Artif
267282
return proxy(storage -> storage.getArtifactVersions(groupId, artifactId, behavior));
268283
}
269284

270-
271285
@Override
272-
public VersionSearchResultsDto searchVersions(String groupId, String artifactId, int offset, int limit) {
273-
return proxy(storage -> storage.searchVersions(groupId, artifactId, offset, limit));
286+
public VersionSearchResultsDto searchVersions(String groupId, String artifactId, OrderBy orderBy, OrderDirection orderDirection, int offset, int limit) throws RegistryStorageException {
287+
return proxy(storage -> storage.searchVersions(groupId, artifactId, orderBy, orderDirection, offset, limit));
274288
}
275289

276290

0 commit comments

Comments
 (0)