package io.cattle.platform.core.cleanup;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.jooq.Field;
import org.jooq.Table;
public class CleanableTable {
public static final List<String> TIMESTAMP_FIELD_NAME_PRECEDENCE = Arrays.asList(
"removed",
"end_time",
"applied_updated",
"expires",
"created");
public final Table<?> table;
public final Field<Long> idField;
public final Field<Date> removeField;
private Integer rowsDeleted = 0;
private Integer rowsSkipped = 0;
private CleanableTable(Table<?> table) {
this(table, null);
}
private CleanableTable(Table<?> table, Field<Date> removedField) {
this.table = table;
this.idField = getIdField(table);
this.removeField = removedField == null ? getRemoveField(table) : removedField;
}
@SuppressWarnings("unchecked")
private Field<Long> getIdField(Table<?> table) {
for (Field<?> field : table.fields()) {
if (field.getName().equals("id")) {
return (Field<Long>) field;
}
}
return null;
}
@SuppressWarnings("unchecked")
private Field<Date> getRemoveField(Table<?> table) {
for (String fieldName : TIMESTAMP_FIELD_NAME_PRECEDENCE) {
for (Field<?> field : table.fields()) {
if (fieldName.equals(field.getName())) {
return (Field<Date>) field;
}
}
}
return null;
}
public void clearRowCounts() {
rowsDeleted = 0;
rowsSkipped = 0;
}
public Integer getRowsDeleted() {
return rowsDeleted;
}
public void addRowsDeleted(Integer rowsDeleted) {
this.rowsDeleted += rowsDeleted;
}
public Integer getRowsSkipped() {
return rowsSkipped;
}
public void addRowsSkipped(Integer rowsSkipped) {
this.rowsSkipped += rowsSkipped;
}
@Override
public String toString() {
return " " + table.toString();
}
public static CleanableTable from(Table<?> table) {
return new CleanableTable(table);
}
public static CleanableTable from(Table<?> table, Field<Date> removedField) {
return new CleanableTable(table, removedField);
}
}