Package org.kapott.hbci.swift

Source Code of org.kapott.hbci.swift.DTAUS_CH$Transaction

/*  $Id: DTAUS_CH.java,v 1.1 2011/05/04 22:38:03 willuhn Exp $

    This file is part of hbci4java
    Copyright (C) 2001-2008  Stefan Palme

    hbci4java is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    hbci4java is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package org.kapott.hbci.swift;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.kapott.hbci.exceptions.HBCI_Exception;
import org.kapott.hbci.exceptions.InvalidArgumentException;
import org.kapott.hbci.structures.Konto;
import org.kapott.hbci.structures.Value;

public class DTAUS_CH
{
    public class Transaction
    {
        public Konto other;
        public Value value;
        public List<String>  usage;
       
        public int idx;
       
        public Transaction(Konto other,Value value)
        {
            this.other=other;
            this.value=value;
            this.usage=new ArrayList<String>();
        }
       
        public void addUsage(String st)
        {
            usage.add(st);
        }
       
        public String toString()
        {
            StringBuffer ret=new StringBuffer();
           
            ret.append("01");
            ret.append(new SimpleDateFormat("yyMMdd").format(now));
            ret.append(expand(other.blz,12,(byte)0x20,ALIGN_LEFT));
            ret.append(expand("",5,(byte)0x30,ALIGN_LEFT));
            ret.append(new SimpleDateFormat("yyMMdd").format(now));
            ret.append(expand(myAccount.blz,7,(byte)0x20,ALIGN_LEFT));
            ret.append(expand("",5,(byte)0x20,ALIGN_LEFT));
            ret.append(expand(Integer.toString(idx),5,(byte)0x30,ALIGN_RIGHT));
            ret.append("827");
            ret.append("00");
           
            ret.append(expand("",5,(byte)0x20,ALIGN_LEFT));
            ret.append(expand("TAN"+Integer.toString(idx),11,(byte)0x20,ALIGN_LEFT));
           
            ret.append(expand(myAccount.number,24,(byte)0x20,ALIGN_LEFT));
           
            ret.append(expand("",6,(byte)0x20,ALIGN_LEFT));
            ret.append(value.getCurr());
            ret.append(expand(new DecimalFormat("0.00").format(value.getBigDecimalValue()).replace('.',','),12,(byte)0x20,ALIGN_LEFT));
            total+=value.getLongValue();
           
            ret.append(expand("",14,(byte)0x20,ALIGN_LEFT));
           
            ret.append("02");
            ret.append(expand(myAccount.name,24,(byte)0x20,ALIGN_LEFT));
            for (int i=0;i<3;i++) {
                ret.append(expand((i<myAddress.length?myAddress[i]:""),
                        24,(byte)0x20,ALIGN_LEFT));
            }
            ret.append(expand("",30,(byte)0x20,ALIGN_LEFT));
           
            ret.append("03");
            ret.append("/C/");
            ret.append(expand(other.number,27,(byte)0x20,ALIGN_LEFT));
            ret.append(expand(other.name,24,(byte)0x20,ALIGN_LEFT));
            for (int i=0;i<3;i++) {
                ret.append(expand("",24,(byte)0x20,ALIGN_LEFT));
            }
           
            ret.append("04");
            for (int i=0;i<4;i++) {
                ret.append(expand((i<usage.size()?(String)usage.get(i):""),
                        28,(byte)0x20,ALIGN_LEFT));
            }
            ret.append(expand("",14,(byte)0x20,ALIGN_LEFT));
           
            return ret.toString();
        }
    }
   
    private List<Transaction>     entries;
    private Konto    myAccount;
    private String[] myAddress;
    private int      counter;
   
    private Date now;
    private long total;
   
    private static final byte ALIGN_LEFT=1;
    private static final byte ALIGN_RIGHT=2;
   
    public DTAUS_CH(Konto myAccount,String[] myAddress)
    {
        if (!myAccount.country.equals("CH"))
            throw new InvalidArgumentException("*** can only be used with swiss accounts");
       
        this.entries=new ArrayList<Transaction>();
        this.myAccount=myAccount;
        this.myAddress=((myAddress!=null)?myAddress:new String[0]);
        this.counter=0;
    }
   
    public void addEntry(Transaction entry)
    {
        entry.idx=++counter;
        entries.add(entry);
    }
   
    public String toString()
    {
        StringBuffer ret=new StringBuffer();
       
        now=new Date();
        total=0;
       
        for (Iterator<Transaction> i=entries.iterator();i.hasNext();) {
            Transaction trans= i.next();
            ret.append(trans.toString());
        }
       
        ret.append("01");
        ret.append(expand("",6,(byte)0x30,ALIGN_LEFT));
        ret.append(expand("",12,(byte)0x20,ALIGN_LEFT));
        ret.append(expand("",5,(byte)0x30,ALIGN_LEFT));
        ret.append(new SimpleDateFormat("yyMMdd").format(now));
        ret.append(expand("",7,(byte)0x20,ALIGN_LEFT));
        ret.append(expand("",5,(byte)0x20,ALIGN_LEFT));
        ret.append(expand(Integer.toString(counter+1),5,(byte)0x30,ALIGN_RIGHT));
        ret.append("890");
        ret.append("00");
       
        ret.append(expand(new DecimalFormat("0.000").format(total/100.0).replace('.',','),16,(byte)0x20,ALIGN_LEFT));
        ret.append(expand("",59,(byte)0x20,ALIGN_LEFT));
       
        return ret.toString();
    }
   
    private String expand(String st,int len,byte filler,int align)
    {
        if (st.length()<len) {
            try {
                byte[] fill=new byte[len-st.length()];
                Arrays.fill(fill,filler);
                String fillst=new String(fill,"ISO-8859-1");
               
                if (align==ALIGN_LEFT)
                    st=st+fillst;
                else if (align==ALIGN_RIGHT)
                    st=fillst+st;
                else
                    throw new HBCI_Exception("*** invalid align type: "+align);
            } catch (Exception e) {
                throw new HBCI_Exception(e);
            }
        } else if (st.length()>len) {
            throw new InvalidArgumentException("*** string too long: \""+st+"\" has "+st.length()+" chars, but max is "+len);
        }
       
        return st;
    }
}
TOP

Related Classes of org.kapott.hbci.swift.DTAUS_CH$Transaction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.