package com.github.ryhmrt.mssqldiff.differ;
import java.util.List;
import com.github.ryhmrt.mssqldiff.data.Column;
import com.github.ryhmrt.mssqldiff.data.ColumnDiff;
import com.github.ryhmrt.mssqldiff.data.Diff;
import com.github.ryhmrt.mssqldiff.data.Permission;
import com.github.ryhmrt.mssqldiff.data.PermissionDiff;
import com.github.ryhmrt.mssqldiff.data.Table;
import com.github.ryhmrt.mssqldiff.data.TableDiff;
public class TableDiffer extends AbstractDiffer<Table, TableDiff> {
private ColumnDiffer columnDiffer = new ColumnDiffer();
private ListDiffer<Column, ColumnDiff, ColumnDiffer> columnListDiffer = new ListDiffer<Column, ColumnDiff, ColumnDiffer>();
private PermissionDiffer permissionDiffer = new PermissionDiffer();
private ListDiffer<Permission, PermissionDiff, PermissionDiffer> permissionListDiffer = new ListDiffer<Permission, PermissionDiff, PermissionDiffer>();
@Override
protected TableDiff detailDiff(Table from, Table to) {
List<ColumnDiff> columnDiffs = columnListDiffer.diff(columnDiffer, from.getColumns(), to.getColumns());
List<PermissionDiff> permissionDiffs = permissionListDiffer.diff(permissionDiffer, from.getPermissions(), to.getPermissions());
TableDiff diff = createDiff(columnDiffs.isEmpty() && permissionDiffs.isEmpty() ? Diff.Type.EQUAL : Diff.Type.MODIFIED, from, to);
diff.setColumnDiffs(columnDiffs);
diff.setPermissionDiffs(permissionDiffs);
return diff;
}
@Override
protected TableDiff createDiff() {
return new TableDiff();
}
}