package com.zendesk.maxwell.schema.ddl; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.zendesk.maxwell.MaxwellFilter; import com.zendesk.maxwell.schema.Schema; @JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type") @JsonSubTypes({ @JsonSubTypes.Type(value = ResolvedTableAlter.class, name = "table-alter"), @JsonSubTypes.Type(value = ResolvedTableCreate.class, name = "table-create"), @JsonSubTypes.Type(value = ResolvedTableDrop.class, name = "table-drop"), @JsonSubTypes.Type(value = ResolvedDatabaseAlter.class, name = "database-alter"), @JsonSubTypes.Type(value = ResolvedDatabaseCreate.class, name = "database-create"), @JsonSubTypes.Type(value = ResolvedDatabaseDrop.class, name = "database-drop"), }) public abstract class ResolvedSchemaChange { public abstract void apply(Schema originalSchema) throws InvalidSchemaError; public abstract String databaseName(); public abstract String tableName(); public boolean shouldOutput(MaxwellFilter filter) { return MaxwellFilter.matches(filter, databaseName(), tableName()); }; }