Skip to content

Commit

Permalink
Merge pull request #26230 from zeldigas
Browse files Browse the repository at this point in the history
* pr/26230:
  Polish "Fix ordering of metadata entries"
  Fix ordering of metadata entries

Closes gh-26230
  • Loading branch information
snicoll committed Apr 28, 2021
2 parents 20da982 + d610f3c commit 70079f9
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 21 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -160,29 +160,22 @@ private Object extractItemValue(Object value) {

private static class ItemMetadataComparator implements Comparator<ItemMetadata> {

private static final Comparator<ItemMetadata> GROUP = Comparator.comparing(ItemMetadata::getName)
.thenComparing(ItemMetadata::getSourceType, Comparator.nullsFirst(Comparator.naturalOrder()));

private static final Comparator<ItemMetadata> ITEM = Comparator.comparing(ItemMetadataComparator::isDeprecated)
.thenComparing(ItemMetadata::getName)
.thenComparing(ItemMetadata::getSourceType, Comparator.nullsFirst(Comparator.naturalOrder()));

@Override
public int compare(ItemMetadata o1, ItemMetadata o2) {
if (o1.isOfItemType(ItemType.GROUP)) {
return compareGroup(o1, o2);
}
return compareProperty(o1, o2);
}

private int compareGroup(ItemMetadata o1, ItemMetadata o2) {
return o1.getName().compareTo(o2.getName());
}

private int compareProperty(ItemMetadata o1, ItemMetadata o2) {
if (isDeprecated(o1) && !isDeprecated(o2)) {
return 1;
}
if (isDeprecated(o2) && !isDeprecated(o1)) {
return -1;
return GROUP.compare(o1, o2);
}
return o1.getName().compareTo(o2.getName());
return ITEM.compare(o1, o2);
}

private boolean isDeprecated(ItemMetadata item) {
private static boolean isDeprecated(ItemMetadata item) {
return item.getDeprecation() != null;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -82,7 +82,7 @@ void marshallOrderItems() throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonMarshaller marshaller = new JsonMarshaller();
marshaller.write(metadata, outputStream);
String json = new String(outputStream.toByteArray());
String json = outputStream.toString();
assertThat(json).containsSubsequence("\"groups\"", "\"com.acme.alpha\"", "\"com.acme.bravo\"", "\"properties\"",
"\"com.example.alpha.ccc\"", "\"com.example.alpha.ddd\"", "\"com.example.bravo.aaa\"",
"\"com.example.bravo.bbb\"", "\"hints\"", "\"eee\"", "\"fff\"");
Expand All @@ -100,9 +100,71 @@ void marshallPutDeprecatedItemsAtTheEnd() throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonMarshaller marshaller = new JsonMarshaller();
marshaller.write(metadata, outputStream);
String json = new String(outputStream.toByteArray());
String json = outputStream.toString();
assertThat(json).containsSubsequence("\"properties\"", "\"com.example.alpha.ddd\"", "\"com.example.bravo.bbb\"",
"\"com.example.alpha.ccc\"", "\"com.example.bravo.aaa\"");
}

@Test
void orderingForSameGroupNames() throws IOException {
ConfigurationMetadata metadata = new ConfigurationMetadata();
metadata.add(ItemMetadata.newGroup("com.acme.alpha", null, "com.example.Foo", null));
metadata.add(ItemMetadata.newGroup("com.acme.alpha", null, "com.example.Bar", null));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonMarshaller marshaller = new JsonMarshaller();
marshaller.write(metadata, outputStream);
String json = outputStream.toString();
assertThat(json).containsSubsequence("\"groups\"", "\"name\": \"com.acme.alpha\"",
"\"sourceType\": \"com.example.Bar\"", "\"name\": \"com.acme.alpha\"",
"\"sourceType\": \"com.example.Foo\"");
}

@Test
void orderingForSamePropertyNames() throws IOException {
ConfigurationMetadata metadata = new ConfigurationMetadata();
metadata.add(ItemMetadata.newProperty("com.example.bravo", "aaa", "java.lang.Boolean", "com.example.Foo", null,
null, null, null));
metadata.add(ItemMetadata.newProperty("com.example.bravo", "aaa", "java.lang.Integer", "com.example.Bar", null,
null, null, null));
metadata.add(
ItemMetadata.newProperty("com.example.alpha", "ddd", null, "com.example.Bar", null, null, null, null));
metadata.add(
ItemMetadata.newProperty("com.example.alpha", "ccc", null, "com.example.Foo", null, null, null, null));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonMarshaller marshaller = new JsonMarshaller();
marshaller.write(metadata, outputStream);
String json = outputStream.toString();
assertThat(json).containsSubsequence("\"groups\"", "\"properties\"", "\"com.example.alpha.ccc\"",
"com.example.Foo", "\"com.example.alpha.ddd\"", "com.example.Bar", "\"com.example.bravo.aaa\"",
"com.example.Bar", "\"com.example.bravo.aaa\"", "com.example.Foo");
}

@Test
void orderingForSameGroupWithNullSourceType() throws IOException {
ConfigurationMetadata metadata = new ConfigurationMetadata();
metadata.add(ItemMetadata.newGroup("com.acme.alpha", null, "com.example.Foo", null));
metadata.add(ItemMetadata.newGroup("com.acme.alpha", null, null, null));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonMarshaller marshaller = new JsonMarshaller();
marshaller.write(metadata, outputStream);
String json = outputStream.toString();
assertThat(json).containsSubsequence("\"groups\"", "\"name\": \"com.acme.alpha\"",
"\"name\": \"com.acme.alpha\"", "\"sourceType\": \"com.example.Foo\"");
}

@Test
void orderingForSamePropertyNamesWithNullSourceType() throws IOException {
ConfigurationMetadata metadata = new ConfigurationMetadata();
metadata.add(ItemMetadata.newProperty("com.example.bravo", "aaa", "java.lang.Boolean", null, null, null, null,
null));
metadata.add(ItemMetadata.newProperty("com.example.bravo", "aaa", "java.lang.Integer", "com.example.Bar", null,
null, null, null));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonMarshaller marshaller = new JsonMarshaller();
marshaller.write(metadata, outputStream);
String json = outputStream.toString();
assertThat(json).containsSubsequence("\"groups\"", "\"properties\"", "\"com.example.bravo.aaa\"",
"\"java.lang.Boolean\"", "\"com.example.bravo.aaa\"", "\"java.lang.Integer\"", "\"com.example.Bar");
}

}

0 comments on commit 70079f9

Please sign in to comment.