TatraPayFileExporter.java

package sk.iway.iwcm.ebanking.file_export;

import java.text.SimpleDateFormat;
import java.util.Date;

import sk.iway.iwcm.DB;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.ebanking.Payment;

/**
 *  TatraPayFileExporter.java
 * 	Exporter with Tatrapay specific behaviour
 *
 * 	for public API, @see PaymentFileExporter
 * 
 *@Title        webjet4_repair
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2009
 *@author       $Author: murbanec $
 *@version      $Revision: 1.3 $
 *@created      Date: 25.8.2009 16:46:15
 *@modified     $Date: 2009/09/30 13:17:33 $
 */
public class TatraPayFileExporter extends PaymentFileExporter
{
	
	static final String SINGLE_PAYMENT_SEQUENCE = "11";
	
	static final String DELIMITER_SEQUENCE = ";";
	
	@Override
	protected String getExporterIdentifierForFileName()
	{
		return "tatra_pay";
	}
	
	@Override
	public String createRowFrom(Payment payment)
	{
		if (isSourceAccountIncorrect())
			throw new IllegalStateException("Call setAccount() first - source account as Payment's account ");
				
		return new StringBuilder().
			append(SINGLE_PAYMENT_SEQUENCE).
			append(DELIMITER_SEQUENCE).
			append(getSourceAccount().getAccountNumber()).
			append(DELIMITER_SEQUENCE).
			append(payment.getAccountPrefix()).
			append(DELIMITER_SEQUENCE).
			append(payment.getAccountNumber()).
			append(DELIMITER_SEQUENCE).
			append(payment.getBankCode()).
			append(DELIMITER_SEQUENCE).
			append(payment.getCurrency()).
			append(DELIMITER_SEQUENCE).
			append(payment.getAmountString()).
			append(DELIMITER_SEQUENCE).
			append(new SimpleDateFormat("yyyy-MM-dd").format(new Date())).
			append(DELIMITER_SEQUENCE).
			append(payment.getConstantSymbol()).			
			append(DELIMITER_SEQUENCE).
			append(payment.getVariableSymbol()).
			append(DELIMITER_SEQUENCE).
			append(payment.getSpecificSymbol()).			
			append(DELIMITER_SEQUENCE).			
			append(DELIMITER_SEQUENCE).
			append(DELIMITER_SEQUENCE).
			append(DELIMITER_SEQUENCE).
			append(DELIMITER_SEQUENCE).
			append(DELIMITER_SEQUENCE).
			append(DB.internationalToEnglish(payment.getDescription())).
			append(System.getProperty("line.separator")).
			toString();
	}	

	private boolean isSourceAccountIncorrect()
	{
		return getSourceAccount() == null || 
			Tools.isAnyEmpty(getSourceAccount().getAccountPrefix(), getSourceAccount().getAccountNumber());
	}

	@Override
	protected String getFileExtension()
	{
		return "csv";
	}	
}