package com.zendesk.maxwell.producer.partitioners; import com.zendesk.maxwell.row.RowMap; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public abstract class AbstractMaxwellPartitioner { HashStringProvider provider; List<String> partitionColumns = new ArrayList<String>(); String partitionKeyFallback; public AbstractMaxwellPartitioner(String partitionKey, String csvPartitionColumns, String partitionKeyFallback) { switch (partitionKey) { case "table": this.provider = new HashStringTable(); break; case "primary_key": this.provider = new HashStringPrimaryKey(); break; case "column": this.provider = new HashStringColumn(); break; case "database": default: this.provider = new HashStringDatabase(); break; } if ( csvPartitionColumns != null ) this.partitionColumns = Arrays.asList(csvPartitionColumns.split("\\s*,\\s*")); this.partitionKeyFallback = partitionKeyFallback; } static protected String getDatabase(RowMap r) { return r.getDatabase(); } static protected String getTable(RowMap r) { return r.getTable(); } static protected String getPrimaryKey(RowMap r) { return r.pkAsConcatString(); } public String getHashString(RowMap r) { return provider.getHashString(r, this.partitionColumns, this.partitionKeyFallback); } }