diff --git a/events/api/src/main/java/org/projectnessie/events/api/Content.java b/events/api/src/main/java/org/projectnessie/events/api/Content.java
index 147705f420f..893bc342e56 100644
--- a/events/api/src/main/java/org/projectnessie/events/api/Content.java
+++ b/events/api/src/main/java/org/projectnessie/events/api/Content.java
@@ -15,28 +15,37 @@
*/
package org.projectnessie.events.api;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import com.fasterxml.jackson.databind.annotation.JsonTypeIdResolver;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.util.Collections;
import java.util.Map;
import org.immutables.value.Value;
-import org.projectnessie.events.api.json.ContentTypeIdResolver;
-/**
- * An object stored in Nessie, such as a table or a view.
- *
- * @see Namespace
- * @see IcebergTable
- * @see IcebergView
- * @see DeltaLakeTable
- * @see UDF
- * @see GenericContent
- */
-@JsonTypeIdResolver(ContentTypeIdResolver.class)
-@JsonTypeInfo(use = JsonTypeInfo.Id.CUSTOM, visible = true, property = "type")
+/** An object stored in Nessie, such as a table or a view. */
+@Value.Immutable
+@JsonSerialize(as = ImmutableContent.class)
+@JsonDeserialize(as = ImmutableContent.class)
public interface Content {
- ContentType getType();
+ /**
+ * Returns the type for this object.
+ *
+ *
Values returned here match the JSON type name used for serializing the original content
+ * object.
+ *
+ *
The currently-known built-in content types are:
+ *
+ *
+ * - {@code ICEBERG_TABLE};
+ *
- {@code ICEBERG_VIEW};
+ *
- {@code NAMESPACE};
+ *
- {@code UDF};
+ *
- {@code DELTA_LAKE_TABLE}.
+ *
+ *
+ * Other content types may be added in the future, or registered by end users.
+ */
+ String getType();
/**
* Unique id for this object.
diff --git a/events/api/src/main/java/org/projectnessie/events/api/ContentType.java b/events/api/src/main/java/org/projectnessie/events/api/ContentType.java
deleted file mode 100644
index 9e7f0a38a16..00000000000
--- a/events/api/src/main/java/org/projectnessie/events/api/ContentType.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2023 Dremio
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.projectnessie.events.api;
-
-/**
- * An enum of all possible content types.
- *
- * Please note that this enum may evolve in the future, and more enum values may be added. It is
- * important that SPI implementers be prepared to handle unknown enum values.
- */
-public enum ContentType {
- /**
- * The content is a namespace.
- *
- * @see Namespace
- */
- NAMESPACE(Namespace.class),
-
- /**
- * The content is an Iceberg table.
- *
- * @see IcebergTable
- */
- ICEBERG_TABLE(IcebergTable.class),
-
- /**
- * The content is an Iceberg view.
- *
- * @see IcebergView
- */
- ICEBERG_VIEW(IcebergView.class),
-
- /**
- * The content is a Delta Lake table.
- *
- * @see DeltaLakeTable
- */
- DELTA_LAKE_TABLE(DeltaLakeTable.class),
-
- /**
- * The content is a UDF.
- *
- * @see UDF
- */
- UDF(UDF.class),
-
- /**
- * The content is of an unknown type. This type is a catch-all type for all other runtime types
- * that are not one of the built-in types above.
- *
- * @see GenericContent
- */
- GENERIC(GenericContent.class),
- ;
-
- private final Class extends Content> subtype;
-
- ContentType(Class extends Content> subtype) {
- this.subtype = subtype;
- }
-
- /** Returns the subtype of {@link Content} that this enum value represents. */
- public Class extends Content> getSubtype() {
- return subtype;
- }
-}
diff --git a/events/api/src/main/java/org/projectnessie/events/api/DeltaLakeTable.java b/events/api/src/main/java/org/projectnessie/events/api/DeltaLakeTable.java
deleted file mode 100644
index e1c03256867..00000000000
--- a/events/api/src/main/java/org/projectnessie/events/api/DeltaLakeTable.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2023 Dremio
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.projectnessie.events.api;
-
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import java.util.List;
-import org.immutables.value.Value;
-
-/** A {@link Content} object that represents a Delta Lake table. */
-@Value.Immutable
-@JsonSerialize(as = ImmutableDeltaLakeTable.class)
-@JsonDeserialize(as = ImmutableDeltaLakeTable.class)
-public interface DeltaLakeTable extends Content {
-
- @Override
- @Value.Default
- default ContentType getType() {
- return ContentType.DELTA_LAKE_TABLE;
- }
-
- List getMetadataLocationHistory();
-
- List getCheckpointLocationHistory();
-
- String getLastCheckpoint();
-}
diff --git a/events/api/src/main/java/org/projectnessie/events/api/GenericContent.java b/events/api/src/main/java/org/projectnessie/events/api/GenericContent.java
deleted file mode 100644
index ee2daeddd94..00000000000
--- a/events/api/src/main/java/org/projectnessie/events/api/GenericContent.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2023 Dremio
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.projectnessie.events.api;
-
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import org.immutables.value.Value;
-import org.projectnessie.events.api.json.GenericContentDeserializer;
-import org.projectnessie.events.api.json.GenericContentSerializer;
-
-/**
- * A generic {@link Content} whose runtime type is not known.
- *
- * This special content subtype is only used when deserializing unknown content types. Since
- * contents are pluggable in Nessie, this situation can happen when a custom content other than the
- * built-in ones is registered server-side, but the client deserializing the content does not have
- * the concrete class available on its classpath.
- *
- *
All properties of the original content object will be deserialized in the {@link
- * #getProperties()} map.
- */
-@Value.Immutable
-@JsonSerialize(using = GenericContentSerializer.class)
-@JsonDeserialize(using = GenericContentDeserializer.class)
-public interface GenericContent extends Content {
-
- @Override
- @Value.Default
- default ContentType getType() {
- return ContentType.GENERIC;
- }
-
- /** The actual runtime type name of this content object. */
- String getGenericType();
-}
diff --git a/events/api/src/main/java/org/projectnessie/events/api/IcebergTable.java b/events/api/src/main/java/org/projectnessie/events/api/IcebergTable.java
deleted file mode 100644
index 6c892abe776..00000000000
--- a/events/api/src/main/java/org/projectnessie/events/api/IcebergTable.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2023 Dremio
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.projectnessie.events.api;
-
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import org.immutables.value.Value;
-
-/** A {@link Content} object that represents an Iceberg table. */
-@Value.Immutable
-@JsonSerialize(as = ImmutableIcebergTable.class)
-@JsonDeserialize(as = ImmutableIcebergTable.class)
-public interface IcebergTable extends Content {
-
- @Override
- @Value.Default
- default ContentType getType() {
- return ContentType.ICEBERG_TABLE;
- }
-
- /**
- * Location where Iceberg stored its {@code TableMetadata} file. The location depends on the
- * (implementation of) Iceberg's {@code FileIO} configured for the particular Iceberg table.
- */
- String getMetadataLocation();
-
- /** Corresponds to Iceberg's {@code currentSnapshotId}. */
- long getSnapshotId();
-
- /** Corresponds to Iceberg's {@code currentSchemaId}. */
- int getSchemaId();
-
- /** Corresponds to Iceberg's {@code defaultSpecId}. */
- int getSpecId();
-
- /** Corresponds to Iceberg's {@code defaultSortOrderId}. */
- int getSortOrderId();
-}
diff --git a/events/api/src/main/java/org/projectnessie/events/api/IcebergView.java b/events/api/src/main/java/org/projectnessie/events/api/IcebergView.java
deleted file mode 100644
index c8e30a48081..00000000000
--- a/events/api/src/main/java/org/projectnessie/events/api/IcebergView.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2023 Dremio
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.projectnessie.events.api;
-
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import java.util.Optional;
-import org.immutables.value.Value;
-
-/** A {@link Content} object that represents an Iceberg view. */
-@Value.Immutable
-@JsonSerialize(as = ImmutableIcebergView.class)
-@JsonDeserialize(as = ImmutableIcebergView.class)
-public interface IcebergView extends Content {
-
- @Override
- @Value.Default
- default ContentType getType() {
- return ContentType.ICEBERG_VIEW;
- }
-
- /**
- * Location where Iceberg stored its {@code TableMetadata} file. The location depends on the
- * (implementation of) Iceberg's {@code FileIO} configured for the particular Iceberg table.
- */
- String getMetadataLocation();
-
- /** Corresponds to Iceberg's {@code currentVersionId}. */
- long getVersionId();
-
- int getSchemaId();
-
- String getSqlText();
-
- Optional getDialect();
-}
diff --git a/events/api/src/main/java/org/projectnessie/events/api/Namespace.java b/events/api/src/main/java/org/projectnessie/events/api/Namespace.java
deleted file mode 100644
index 42408687e9a..00000000000
--- a/events/api/src/main/java/org/projectnessie/events/api/Namespace.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2023 Dremio
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.projectnessie.events.api;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import java.util.List;
-import java.util.stream.Collectors;
-import org.immutables.value.Value;
-
-/** A {@link Content} object that represents a namespace. */
-@Value.Immutable
-@JsonSerialize(as = ImmutableNamespace.class)
-@JsonDeserialize(as = ImmutableNamespace.class)
-public interface Namespace extends Content {
-
- @Override
- @Value.Default
- default ContentType getType() {
- return ContentType.NAMESPACE;
- }
-
- List getElements();
-
- /**
- * The simple name of the namespace.
- *
- * The simple name is the last element of the namespace. For example, the simple name of
- * namespace {@code ["a", "b", "c"]} is {@code "c"}.
- */
- @Value.Lazy
- @JsonIgnore
- default String getSimpleName() {
- return getElements().get(getElements().size() - 1);
- }
-
- /**
- * The full name of the namespace.
- *
- *
The full name is composed of all the elements of the namespace, separated by dots. For
- * example, the full name of the namespace {@code ["a", "b", "c"]} is {@code "a.b.c"}.
- *
- *
When an element contains a dot or the NUL character (unicode {@code U+0000}), it is replaced
- * by the unicode character {@code U+001D}.
- */
- @Value.Lazy
- @JsonIgnore
- default String getName() {
- // see org.projectnessie.model.Util
- return getElements().stream()
- .map(element -> element.replace('.', '\u001D').replace('\u0000', '\u001D'))
- .collect(Collectors.joining("."));
- }
-}
diff --git a/events/api/src/main/java/org/projectnessie/events/api/UDF.java b/events/api/src/main/java/org/projectnessie/events/api/UDF.java
deleted file mode 100644
index 926e90ee35c..00000000000
--- a/events/api/src/main/java/org/projectnessie/events/api/UDF.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2023 Dremio
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.projectnessie.events.api;
-
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import java.util.Optional;
-import org.immutables.value.Value;
-
-/** A {@link Content} object that represents a UDF. */
-@Value.Immutable
-@JsonSerialize(as = ImmutableUDF.class)
-@JsonDeserialize(as = ImmutableUDF.class)
-public interface UDF extends Content {
-
- @Override
- @Value.Default
- default ContentType getType() {
- return ContentType.UDF;
- }
-
- String getSqlText();
-
- Optional getDialect();
-}
diff --git a/events/api/src/main/java/org/projectnessie/events/api/json/ContentTypeIdResolver.java b/events/api/src/main/java/org/projectnessie/events/api/json/ContentTypeIdResolver.java
deleted file mode 100644
index 944e2c54d4d..00000000000
--- a/events/api/src/main/java/org/projectnessie/events/api/json/ContentTypeIdResolver.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2023 Dremio
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.projectnessie.events.api.json;
-
-import java.util.Locale;
-import org.projectnessie.events.api.Content;
-import org.projectnessie.events.api.ContentType;
-import org.projectnessie.events.api.GenericContent;
-
-public final class ContentTypeIdResolver extends AbstractEnumBasedTypeIdResolver {
-
- @Override
- public String idFromValue(Object value) {
- return ((Content) value).getType().name();
- }
-
- @Override
- protected Class> subtypeFromId(String id) {
- return ContentType.valueOf(id.toUpperCase(Locale.ROOT)).getSubtype();
- }
-
- @Override
- protected Class> genericSubtype() {
- return GenericContent.class;
- }
-}
diff --git a/events/api/src/main/java/org/projectnessie/events/api/json/GenericContentDeserializer.java b/events/api/src/main/java/org/projectnessie/events/api/json/GenericContentDeserializer.java
deleted file mode 100644
index c789689258a..00000000000
--- a/events/api/src/main/java/org/projectnessie/events/api/json/GenericContentDeserializer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2023 Dremio
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.projectnessie.events.api.json;
-
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
-import java.io.IOException;
-import java.util.Map;
-import java.util.Objects;
-import org.projectnessie.events.api.GenericContent;
-import org.projectnessie.events.api.ImmutableGenericContent;
-
-public final class GenericContentDeserializer extends StdDeserializer {
-
- private static final TypeReference