Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * ====================================================================
   * Copyright (c) 2004 TMate Software Ltd.  All rights reserved.
   *
   * This software is licensed as described in the file COPYING, which
   * you should have received as part of this distribution.  The terms
   * are also available at http://svnkit.com/license.html
   * If newer versions of this license are posted there, you may use a
   * newer version instead, at your option.
  * ====================================================================
  */
 
 package de.regnis.q.sequence.line.diff;
 
 import java.io.*;
 import java.util.*;
 

Author(s):
Ian Sullivan
TMate Software Ltd.
 
 public abstract class QDiffSequenceGenerator implements QDiffGenerator {
 
 	// Abstract ===============================================================
 
 	protected abstract void processBlock(QSequenceDifferenceBlock[] segmentQSequenceLineCache sourceLinesQSequenceLineCache targetLinesString encoding,
 	                                     Writer outputthrows IOException;
 
 	// Fields =================================================================
 
 	private final String header;
 
 	private Map myProperties;
 
 	// Setup ==================================================================
 
 	protected QDiffSequenceGenerator(Map propertiesString header) {
 		this. = header;
 		 = properties == null ? . : properties;
 	}
 
 	// Implemented ============================================================
 
 	public void generateBinaryDiff(InputStream leftInputStream rightString encodingWriter outputthrows IOException {
 		println("Binary files are different"output);
 	}
 
 	public void generateTextDiff(InputStream leftInputStream rightString encodingWriter outputthrows IOException {
 		final QSequenceLineResult result;
 		try {
 			result = QSequenceLineMedia.createBlocks(QSequenceLineRAByteData.create(left), QSequenceLineRAByteData.create(right), getSimplifier());
 		}
 		catch (QSequenceException ex) {
 			throw new IOException(ex.getMessage());
 		}
 
 		try {
 			final List combinedBlocks = combineBlocks(result.getBlocks(), getGutter());
 
 			boolean headerWritten = false;
 			for (Iterator it = combinedBlocks.iterator(); it.hasNext();) {
 				List segment = (List)it.next();
 				if (segment.isEmpty()) {
 					continue;
 				}
 
 				if (!headerWritten &&  != null) {
 					headerWritten = true;
 					output.write();
 				}
 
 				QSequenceDifferenceBlock[] segmentBlocks = (QSequenceDifferenceBlock[])segment.toArray(new QSequenceDifferenceBlock[segment.size()]);
 				processBlock(segmentBlocksresult.getLeftCache(), result.getRightCache(), encodingoutput);
 			}
 		}
 		finally {
 			result.close();
 		}
 	}
 
 	// Accessing ==============================================================
 
 	protected Map getProperties() {
 		return ;
 	}
 
 	protected String getEOL() {
 		}
 		return System.getProperty("line.separator""\n");
 	}
 
		final QSequenceLineSimplifier baseSimplifier;
		}
		}
		else {
			baseSimplifier = new QSequenceLineDummySimplifier();
		}
		}
		return baseSimplifier;
	}
	protected int getGutter() {
		if (gutterStr == null) {
			return 0;
		}
		try {
			return Integer.parseInt(gutterStr.toString());
		}
		catch (NumberFormatException e) {
		}
		return 0;
	}
	protected String printLine(QSequenceLine lineString encodingthrows IOException {
		String str = new String(line.getContentBytes(), encoding);
		return str;
	}
	protected void println(Writer outputthrows IOException {
		output.write(getEOL());
	}
	protected void println(String strWriter outputthrows IOException {
		if (str != null) {
			output.write(str);
		}
		output.write(getEOL());
	}
	protected void print(String strWriter outputthrows IOException {
		if (str != null) {
			output.write(str);
		}
	}
	// Utils ==================================================================
	private static List combineBlocks(List blocksListint gutter) {
		List combinedBlocks = new LinkedList();
		List currentList = new LinkedList();
		QSequenceDifferenceBlock lastBlock = null;
		for (Iterator blocks = blocksList.iterator(); blocks.hasNext();) {
			if (lastBlock != null) {
				if (currentBlock.getLeftFrom() - 1 - lastBlock.getLeftTo() > gutter && currentBlock.getRightFrom() - 1 - lastBlock.getRightTo() > gutter) {
					combinedBlocks.add(currentList);
					currentList = new LinkedList();
				}
			}
			currentList.add(currentBlock);
			lastBlock = currentBlock;
		}
		if (!combinedBlocks.contains(currentList)) {
			combinedBlocks.add(currentList);
		}
		return combinedBlocks;
	}
New to GrepCode? Check out our FAQ X