All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tbrugz.sqldiff.datadiff.HTMLDiff Maven / Gradle / Ivy

package tbrugz.sqldiff.datadiff;

import java.io.IOException;
import java.io.Writer;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import tbrugz.sqldump.datadump.DataDumpUtils;
import tbrugz.sqldump.datadump.HTMLDataDump;
import tbrugz.sqldump.util.SQLUtils;

public class HTMLDiff extends HTMLDataDump implements DiffSyntax {

	static final Log log = LogFactory.getLog(HTMLDiff.class);
	
	boolean shouldFlush = false;
	
	public HTMLDiff() {
		this.nullValueStr = "␀"; // NULL unicode char in HTML - unicode U+2400
	}
	
	@Override
	public boolean dumpUpdateRowIfNotEquals(ResultSet rsSource,
			ResultSet rsTarget, long count, boolean alsoDumpIfEquals, Writer w) throws IOException,
			SQLException {
		List valsS = SQLUtils.getRowObjectListFromRS(rsSource, lsColTypes, numCol, true);
		List valsT = SQLUtils.getRowObjectListFromRS(rsTarget, lsColTypes, numCol, true);
		
		List fvalS = getFormattedVals(valsS);
		List fvalT = getFormattedVals(valsT);
		if(!equals(fvalS, fvalT)) {
			dumpRowValues(fvalS, fvalT, count, "change", w);
			if(shouldFlush) { flush(w); }
			return true;
		}
		else {
			if(alsoDumpIfEquals) {
				//XXXxxx: really dump? add prop?
				dumpRow(rsTarget, count, "equal", w);
			}
			if(shouldFlush) { flush(w); }
			return false;
		}
	}

	@Override
	public void dumpUpdateRow(ResultSet rsSource, ResultSet rsTarget,
			long count, Writer w) throws IOException, SQLException {
		log.warn("dumpUpdateRow: not implemented");
	}
	
	@Override
	public void dumpRow(ResultSet rs, long count, Writer w) throws IOException, SQLException {
		dumpRow(rs, count, "add", w);
		if(shouldFlush) { flush(w); }
	}

	@Override
	public void dumpDeleteRow(ResultSet rs, long count, Writer w) throws IOException, SQLException {
		dumpRow(rs, count, "remove", w);
		//log.info("dumpDelete: count="+count);
		if(shouldFlush) { flush(w); }
	}
	
	@Override
	public void dumpStats(long insertCount, long updateCount, long deleteCount, long identicalRowsCount,
			long sourceRowCount, long targetRowCount, Writer w) throws IOException, SQLException {
	}
	
	public void dumpRowValues(List valsS, List valsT, long count, String clazz, Writer fos) throws IOException, SQLException {
		StringBuilder sb = new StringBuilder();
		sb.append("\t"+"");
		for(int i=0;i"+ valueS +"" );
			}
			else {
				sb.append( ""+ valueT +""+ valueS +"" );
			}
		}
		sb.append("");
		out(sb.toString()+"\n", fos);
	}
	
	List getFormattedVals(List vals) {
		List objs = new ArrayList();
		for(int i=0;i valS, List valT) {
		for(int i=0;i