UnitConcaterator.java

package eu.javaexperience.text;

import eu.javaexperience.interfaces.simple.publish.SimplePublish1;

public abstract class UnitConcaterator implements SimplePublish1<String>
{
	protected String start;
	protected String end;
	protected String delimiter;
	
	protected StringBuilder sb = new StringBuilder();
	protected int nums;
	
	public UnitConcaterator(String start, String delmimiter, String end)
	{
		this.start = start;
		this.delimiter = delmimiter;
		this.end = end;
	}

	public void start()
	{
		this.nums = 0;
		sb.delete(0, sb.length());
		sb.append(start);
	}
	
	public int getAppendedUnitsCount()
	{
		return nums;
	}
	
	public void flush()
	{
		if(this.nums > 0)
		{
			this.end();
			this.start();
		}
	}
	
	@Override
	public void publish(String val)
	{
		val = filterAdd(val);
		if(null != val)
		{
			if(++this.nums > 1)
			{
				sb.append(delimiter);
			}
	
			sb.append(val);
		}
	}
	
	protected String filterAdd(String add)
	{
		return add;
	}
	
	public void end()
	{
		sb.append(end);
		commit(sb.toString(), nums);
	}
	
	protected abstract void commit(String txt, int units);
}