package innovimax.mixthem.operation;

import innovimax.mixthem.MixException;
import innovimax.mixthem.arguments.RuleParam;
import innovimax.mixthem.arguments.ParamValue;

import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
* <p>Zips two or more lines cell by cell.</p>
* @see ILineOperation
* @author Innovimax
* @version 1.0
*/
public class DefaultCellZipping extends DefaultLineZipping {
	
	/**
	* Constructor	
 	* @param params The list of parameters (maybe empty)
	* @see innovimax.mixthem.arguments.RuleParam
	* @see innovimax.mixthem.arguments.ParamValue
	*/
	public DefaultCellZipping(final Map<RuleParam, ParamValue> params) {
		super(params);		
	}
	
	@Override
	public void process(final String line1, final String line2, final LineResult result) throws MixException {
		result.reset();
		final Iterator<String> iterator1 = line1 != null ? Arrays.asList(line1.split(CellOperation.DEFAULT_SPLIT_CELL_REGEX.getValue().asString())).iterator() : Collections.emptyIterator();
		final Iterator<String> iterator2 = line2 != null ? Arrays.asList(line2.split(CellOperation.DEFAULT_SPLIT_CELL_REGEX.getValue().asString())).iterator() : Collections.emptyIterator();
		final StringBuffer buf = new StringBuffer();
		while (iterator1.hasNext() || iterator2.hasNext()) {
			final String cell1 = iterator1.hasNext() ? iterator1.next() : "";
			final String cell2 = iterator2.hasNext() ? iterator2.next() : "";
			if (buf.length() > 0) {
				buf.append(CellOperation.DEFAULT_CELL_SEPARATOR.getValue().asString());
			}
			buf.append(cell1 + this.sep + cell2);
		}
		result.setResult(buf.toString());
	}
	
	@Override
	public void process(final List<String> lineRange, final LineResult result) throws MixException {
		//process(lineRange.get(0), lineRange.get(1), result);
		result.reset();
		System.out.println("RANGE="+lineRange.toString());
		if (zipable(lineRange)) {
			//TODO
		}
	}

	@Override
	protected boolean zipable(final List<String> lineRange) {
		if (super.zipable(lineRange)) {
			//TODO
			return false;
		}
		return false;
	}

}

@@ -1946,20 +1946,59 @@
 %09//TODO%0A
+%09%09%09System.out.println(%22--%3E Zipable!%22);%0A
 %09%09%7D%0A
-
 %09%7D%0A%0A%09@Ov
@@ -2104,29 +2104,336 @@
 %0A%09%09%09
-//TODO%0A%09%09%09return fals
+int count = 0;%0A%09%09%09for (int i=0; i %3C lineRange.size(); i++) %7B%0A%09%09%09%09final List%3CString%3E cells = Arrays.asList(lineRange.get(i).split(CellOperation.DEFAULT_SPLIT_CELL_REGEX.getValue().asString()));%0A%09%09%09%09if (count == 0) %7B%0A%09%09%09%09%09count = cells.size();%0A%09%09%09%09%7D%0A%09%09%09%09if (cells.size() != count) %7B%0A%09%09%09%09%09return false;%09%09%09%09%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09return tru
 e;%0A%09

Update DefaultCellZipping.java