From c0e6770ba1b2571fec3c4968849afc9cee4e9241 Mon Sep 17 00:00:00 2001 From: Rachel Guan Date: Tue, 7 Dec 2021 11:49:50 -0500 Subject: [PATCH] Use simple class name of a class in stringify() (#1435) * Keep CLASS_REGISTRY and CLASS_NAME_REGISTRY up to date * Use simple class name in vkey string --- .../model/common/ClassPathManager.java | 3 +- .../google/registry/persistence/VKey.java | 15 +++++----- .../google/registry/persistence/VKeyTest.java | 30 ++++++++----------- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/core/src/main/java/google/registry/model/common/ClassPathManager.java b/core/src/main/java/google/registry/model/common/ClassPathManager.java index b712c23b8..ae1280fcb 100644 --- a/core/src/main/java/google/registry/model/common/ClassPathManager.java +++ b/core/src/main/java/google/registry/model/common/ClassPathManager.java @@ -48,7 +48,8 @@ public class ClassPathManager { @VisibleForTesting public static void addTestEntityClass(Class clazz) { - CLASS_REGISTRY.put(com.googlecode.objectify.Key.getKind(clazz), clazz); + CLASS_REGISTRY.put(clazz.getSimpleName(), clazz); + CLASS_NAME_REGISTRY.put(clazz, clazz.getSimpleName()); } public static Class getClass(String className) { diff --git a/core/src/main/java/google/registry/persistence/VKey.java b/core/src/main/java/google/registry/persistence/VKey.java index 669743ed0..505914879 100644 --- a/core/src/main/java/google/registry/persistence/VKey.java +++ b/core/src/main/java/google/registry/persistence/VKey.java @@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableMap; import com.googlecode.objectify.Key; import google.registry.model.BackupGroupRoot; import google.registry.model.ImmutableObject; +import google.registry.model.common.ClassPathManager; import google.registry.model.translators.VKeyTranslatorFactory; import google.registry.util.SerializeUtils; import java.io.Serializable; @@ -137,9 +138,9 @@ public class VKey extends ImmutableObject implements Serializable { * *

Example of a Vkey string by fromWebsafeKey(): "agR0ZXN0chYLEgpEb21haW5CYXNlIgZST0lELTEM" * - *

Example of a vkey string by stringify(): "google.registry.testing.TestObject@sql:rO0ABX" + - * "QAA2Zvbw@ofy:agR0ZXN0cjELEg9FbnRpdHlHcm91cFJvb3QiCWNyb3NzLXRsZAwLEgpUZXN0T2JqZWN0IgNmb28M", - * where sql key and ofy key are values are encoded in Base64. + *

Example of a vkey string by stringify(): "kind:TestObject@sql:rO0ABXQAA2Zvbw" + + * "@ofy:agR0ZXN0cjELEg9FbnRpdHlHcm91cFJvb3QiCWNyb3NzLXRsZAwLEgpUZXN0T2JqZWN0IgNmb28M", where sql + * key and ofy key values are encoded in Base64. */ public static VKey create(String keyString) throws Exception { if (!keyString.startsWith(CLASS_TYPE + KV_SEPARATOR)) { @@ -149,7 +150,7 @@ public class VKey extends ImmutableObject implements Serializable { ImmutableMap kvs = ImmutableMap.copyOf( Splitter.on(DELIMITER).withKeyValueSeparator(KV_SEPARATOR).split(keyString)); - Class classType = Class.forName(kvs.get(CLASS_TYPE)); + Class classType = ClassPathManager.getClass(kvs.get(CLASS_TYPE)); if (kvs.containsKey(SQL_LOOKUP_KEY) && kvs.containsKey(OFY_LOOKUP_KEY)) { return VKey.create( @@ -290,7 +291,7 @@ public class VKey extends ImmutableObject implements Serializable { /** * Constructs the string representation of a {@link VKey}. * - *

The string representation of a vkey contains its type, and sql key or ofy key, or both. Each + *

The string representation of a vkey contains its kind, and sql key or ofy key, or both. Each * of the keys is first serialized into a byte array then encoded via Base64 into a web safe * string. * @@ -302,7 +303,7 @@ public class VKey extends ImmutableObject implements Serializable { */ public String stringify() { // class type is required to create a vkey - String key = CLASS_TYPE + KV_SEPARATOR + getKind().getName(); + String key = CLASS_TYPE + KV_SEPARATOR + ClassPathManager.getClassName(getKind()); if (maybeGetSqlKey().isPresent()) { key += DELIMITER + SQL_LOOKUP_KEY + KV_SEPARATOR + SerializeUtils.stringify(getSqlKey()); } @@ -315,7 +316,7 @@ public class VKey extends ImmutableObject implements Serializable { /** * Constructs the readable string representation of a {@link VKey}. * - *

This readable string representation of a vkey contains its type and its sql key or ofy key, + *

This readable string representation of a vkey contains its kind and its sql key or ofy key, * or both. */ @Override diff --git a/core/src/test/java/google/registry/persistence/VKeyTest.java b/core/src/test/java/google/registry/persistence/VKeyTest.java index c36343cc0..8bda290f0 100644 --- a/core/src/test/java/google/registry/persistence/VKeyTest.java +++ b/core/src/test/java/google/registry/persistence/VKeyTest.java @@ -161,14 +161,13 @@ class VKeyTest { @Test void testStringify_sqlOnlyVKey() throws Exception { assertThat(VKey.createSql(TestObject.class, "foo").stringify()) - .isEqualTo("kind:google.registry.testing.TestObject@sql:rO0ABXQAA2Zvbw"); + .isEqualTo("kind:TestObject@sql:rO0ABXQAA2Zvbw"); } @Test void testStringify_ofyOnlyVKey() throws Exception { assertThat(VKey.createOfy(TestObject.class, Key.create(TestObject.class, "foo")).stringify()) - .isEqualTo( - "kind:google.registry.testing.TestObject@ofy:agR0ZXN0chMLEgpUZXN0T2JqZWN0IgNmb28M"); + .isEqualTo("kind:TestObject@ofy:agR0ZXN0chMLEgpUZXN0T2JqZWN0IgNmb28M"); } @Test @@ -178,8 +177,8 @@ class VKeyTest { VKey vkey = VKey.fromWebsafeKey(key.getString()); assertThat(vkey.stringify()) .isEqualTo( - "kind:google.registry.model.domain.DomainBas" - + "e@sql:rO0ABXQABlJPSUQtMQ" + "kind:DomainBase" + + "@sql:rO0ABXQABlJPSUQtMQ" + "@ofy:agR0ZXN0chYLEgpEb21haW5CYXNlIgZST0lELTEM"); } @@ -188,7 +187,7 @@ class VKeyTest { assertThat( VKey.create(TestObject.class, "foo", Key.create(TestObject.create("foo"))).stringify()) .isEqualTo( - "kind:google.registry.testing.TestObject@sql:rO0ABXQAA2Zvbw@ofy:agR0ZXN0cjELEg9FbnRpdH" + "kind:TestObject@sql:rO0ABXQAA2Zvbw@ofy:agR0ZXN0cjELEg9FbnRpdH" + "lHcm91cFJvb3QiCWNyb3NzLXRsZAwLEgpUZXN0T2JqZWN0IgNmb28M"); } @@ -197,22 +196,20 @@ class VKeyTest { assertThat( VKey.create(TestObject.class, "test", Key.create(TestObject.create("foo"))).stringify()) .isEqualTo( - "kind:google.registry.testing.TestObject@sql:rO0ABXQABHRlc3Q@ofy:agR0ZXN0cjELEg9FbnRpd" + "kind:TestObject@sql:rO0ABXQABHRlc3Q@ofy:agR0ZXN0cjELEg9FbnRpd" + "HlHcm91cFJvb3QiCWNyb3NzLXRsZAwLEgpUZXN0T2JqZWN0IgNmb28M"); } /** Test create() via different vkey string representations. */ @Test void testCreate_stringifedVKey_sqlOnlyVKeyString() throws Exception { - assertThat(VKey.create("kind:google.registry.testing.TestObject@sql:rO0ABXQAA2Zvbw")) + assertThat(VKey.create("kind:TestObject@sql:rO0ABXQAA2Zvbw")) .isEqualTo(VKey.createSql(TestObject.class, "foo")); } @Test void testCreate_stringifedVKey_ofyOnlyVKeyString() throws Exception { - assertThat( - VKey.create( - "kind:google.registry.testing.TestObject@ofy:agR0ZXN0chMLEgpUZXN0T2JqZWN0IgNmb28M")) + assertThat(VKey.create("kind:TestObject@ofy:agR0ZXN0chMLEgpUZXN0T2JqZWN0IgNmb28M")) .isEqualTo(VKey.createOfy(TestObject.class, Key.create(TestObject.class, "foo"))); } @@ -220,7 +217,7 @@ class VKeyTest { void testCreate_stringifedVKey_asymmetricVKeyString() throws Exception { assertThat( VKey.create( - "kind:google.registry.testing.TestObject@sql:rO0ABXQABHRlc3Q@ofy:agR0ZXN0cjELEg9Fb" + "kind:TestObject@sql:rO0ABXQABHRlc3Q@ofy:agR0ZXN0cjELEg9Fb" + "nRpdHlHcm91cFJvb3QiCWNyb3NzLXRsZAwLEgpUZXN0T2JqZWN0IgNmb28M")) .isEqualTo(VKey.create(TestObject.class, "test", Key.create(TestObject.create("foo")))); } @@ -229,7 +226,7 @@ class VKeyTest { void testCreate_stringifedVKey_sqlAndOfyVKeyString() throws Exception { assertThat( VKey.create( - "kind:google.registry.testing.TestObject@sql:rO0ABXQAA2Zvbw@ofy:agR0ZXN0cjELEg9Fbn" + "kind:TestObject@sql:rO0ABXQAA2Zvbw@ofy:agR0ZXN0cjELEg9Fbn" + "RpdHlHcm91cFJvb3QiCWNyb3NzLXRsZAwLEgpUZXN0T2JqZWN0IgNmb28M")) .isEqualTo(VKey.create(TestObject.class, "foo", Key.create(TestObject.create("foo")))); } @@ -238,7 +235,7 @@ class VKeyTest { void testCreate_stringifyVkey_fromWebsafeKey() throws Exception { assertThat( VKey.create( - "kind:google.registry.model.domain.DomainBase@sql:rO0ABXQABlJPSUQtMQ" + "kind:DomainBase@sql:rO0ABXQABlJPSUQtMQ" + "@ofy:agR0ZXN0chYLEgpEb21haW5CYXNlIgZST0lELTEM")) .isEqualTo( VKey.fromWebsafeKey( @@ -257,11 +254,10 @@ class VKeyTest { void testCreate_invalidStringifiedVKey_failure() throws Exception { IllegalArgumentException thrown = assertThrows( - IllegalArgumentException.class, - () -> VKey.create("kind:google.registry.testing.TestObject@sq:l@ofya:bc")); + IllegalArgumentException.class, () -> VKey.create("kind:TestObject@sq:l@ofya:bc")); assertThat(thrown) .hasMessageThat() - .contains("Cannot parse key string: kind:google.registry.testing.TestObject@sq:l@ofya:bc"); + .contains("Cannot parse key string: kind:TestObject@sq:l@ofya:bc"); } @Test