/**
*
*/
package org.kapott.hbci.smartcardio;
import java.nio.charset.Charset;
import java.util.Arrays;
import org.kapott.hbci.exceptions.HBCI_Exception;
/**
* @author axel
*
*/
public class RSABankData {
private final static Charset CHARSET = Charset.forName("ISO-8859-1");
private int index;
private String country;
private String bankCode;
private String userId;
private int comService;
private String comAddress;
private String comSuffix;
private String bankId;
private String systemId;
private String customerId;
public RSABankData() {
}
public RSABankData(int index, byte[] record, byte[] customerIdData) {
this.index = index;
this.country = new String(record, 0, 3, CHARSET).trim();
this.bankCode = new String(record, 3, 30, CHARSET).trim();
this.userId = new String(record, 33, 30, CHARSET).trim();
this.comService = record[63];
this.comAddress = new String(record, 64, 28, CHARSET).trim();
this.comSuffix = new String(record, 92, 2, CHARSET).trim();
this.bankId = new String(record, 94, 30, CHARSET).trim();
this.systemId = new String(record, 124, 30, CHARSET).trim();
this.customerId = customerIdData == null ? "" :new String(customerIdData, CHARSET).trim();
}
private void fillRecord(byte[] record, int offset, int length, String value) {
byte[] bytes = value.getBytes(CHARSET);
if (bytes.length > length)
throw new HBCI_Exception("string value for bank data record at offset " + offset + " is " + bytes.length + " bytes long but must not be longer than " + length + " bytes");
Arrays.fill(record, offset, offset + length, (byte) 0x20);
System.arraycopy(bytes, 0, record, offset, bytes.length);
}
public byte[] toRecord() {
byte[] result = new byte[154];
fillRecord(result, 0, 3, country);
fillRecord(result, 3, 30, bankCode);
fillRecord(result, 33, 30, userId);
result[63] = (byte) (comService & 0xFF);
fillRecord(result, 64, 28, comAddress);
fillRecord(result, 92, 2, comSuffix);
fillRecord(result, 94, 30, bankId);
fillRecord(result, 124, 30, systemId);
return result;
}
public byte[] toCustomerIdData() {
byte[] result = new byte[30];
fillRecord(result, 0, 30, customerId);
return result;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getBankCode() {
return bankCode;
}
public void setBankCode(String bankCode) {
this.bankCode = bankCode;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public int getComService() {
return comService;
}
public void setComService(int comService) {
this.comService = comService;
}
public String getComAddress() {
return comAddress;
}
public void setComAddress(String comAddress) {
this.comAddress = comAddress;
}
public String getComSuffix() {
return comSuffix;
}
public void setComSuffix(String comSuffix) {
this.comSuffix = comSuffix;
}
public String getBankId() {
return bankId;
}
public void setBankId(String bankId) {
this.bankId = bankId;
}
public String getSystemId() {
return systemId;
}
public void setSystemId(String systemId) {
this.systemId = systemId;
}
public String getCustomerId() {
return customerId;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
@Override
public String toString() {
return "index=" + index
+ " country=" + country
+ " bankCode=" + bankCode
+ " userId=" + userId
+ " comService=" + comService
+ " comAddress=" + comAddress
+ " comSuffix=" + comSuffix
+ " bankId=" + bankId
+ " systemId=" + systemId
+ " customerId=" + customerId;
}
}