package com.github.ryhmrt.mssqldiff.differ; import com.github.ryhmrt.mssqldiff.data.Diff; public abstract class AbstractDiffer<DATA, DIFF extends Diff<DATA>> { public DIFF diff(DATA from, DATA to) { if (from == null) { return createDiff(Diff.Type.CREATED, from, to); } if (to == null) { return createDiff(Diff.Type.DROPPED, from, to); } return detailDiff(from, to); } protected boolean isDifferent(Object a, Object b) { return (a == null) ? (b != null) : (!a.equals(b)); } protected DIFF createDiff(Diff.Type type, DATA from, DATA to) { DIFF diff = createDiff(); diff.setType(type); diff.setFrom(from); diff.setTo(to); return diff; } protected abstract DIFF detailDiff(DATA from, DATA to); protected abstract DIFF createDiff(); }