package com.baidu.disconf.web.common.comparator;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.github.knightliao.apollo.utils.common.StringUtil;

import difflib.Delta;
import difflib.DiffUtils;
import difflib.Patch;

/**
 * @author knightliao
 */
public class StringComparator extends CommonComparator {

    private final String original;

    private final String revised;

    public StringComparator(String original, String revised) {
        this.original = original;
        this.revised = revised;
    }

    protected List<Delta> getDeltas() throws IOException {

        final List<String> originalFileLines = StringToLines(original);
        final List<String> revisedFileLines = StringToLines(revised);

        final Patch patch = DiffUtils.diff(originalFileLines, revisedFileLines);

        return patch.getDeltas();
    }

    private List<String> StringToLines(String data) throws IOException {

        if (data == null || data.isEmpty()) {
            return new ArrayList<String>();
        }

        List<String> lines = StringUtil.parseStringToStringList(data, "\\r?\\n");
        if (lines == null) {
            lines = new ArrayList<String>();
        }

        return lines;
    }
}