/* $Id: SyntaxDTAUS.java,v 1.2 2012/03/06 23:18:26 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.datatypes;
import org.kapott.hbci.exceptions.InvalidArgumentException;
import org.kapott.hbci.manager.HBCIUtilsInternal;
// Speicherung im HBCI-MSG-Format
public class SyntaxDTAUS
extends SyntaxAN
{
public static String check(String st)
{
// [willuhn 2012-03-06, BUG 1129] siehe http://de.wikipedia.org/wiki/DIN_66003
// DIN-66003 (der DTAUS-Zeichensatz) ist eigentlich ASCII, jedoch sind ein paar
// unuebliche Sonderzeichen gegen deutsche Umlaute ersetzt worden.
// Da HBCI4Java den Datenstrom jedoch als Latin1 liest, werden die Umlaure
// faelschlicherweise als die Sonderzeichen aus der ASCII-Tabelle interpretiert.
// In Wirklichkeit sind es jedoch die deutschen Umlaute. Wir biegen das
// hier wieder gerade.
st=st.replace("[","�"); // 0x5B
st=st.replace("\\","�"); // 0x5C
st=st.replace("]","�"); // 0x5D
st=st.replace("{","�"); // 0x7B
st=st.replace("|","�"); // 0x7C
st=st.replace("}","�"); // 0x7D
st=st.replace("~","�"); // 0x7E
st=st.toUpperCase();
st=st.replace('\344','\133').replace('\304','\133');
st=st.replace('\366','\134').replace('\326','\134');
st=st.replace('\374','\135').replace('\334','\135');
st=st.replace('\337','\176');
int len=st.length();
for (int i=0;i<len;i++) {
char ch=st.charAt(i);
if (!((ch>='A' && ch<='Z') ||
(ch>='0' && ch<='9') ||
(ch==' ') || (ch=='.') || (ch==',') ||
(ch=='&') || (ch=='-') || (ch=='+') ||
(ch=='*') || (ch=='%') || (ch=='/') ||
(ch=='$') ||
(ch==0x5B) || (ch==0x5C) || (ch==0x5D) || (ch==0x7E))) { // � � � �
String msg=HBCIUtilsInternal.getLocMsg("EXC_DTAUS_INV_CHAR",Character.toString(ch));
if (!HBCIUtilsInternal.ignoreError(null,"client.errors.ignoreWrongDataSyntaxErrors",msg)) {
// [willuhn 2012-03-06, BUG 1129] Exception als fatal markieren
InvalidArgumentException e = new InvalidArgumentException(msg);
e.setFatal(true);
throw e;
}
st=st.replace(ch,' ');
}
}
return st;
}
public SyntaxDTAUS(String x, int minlen, int maxlen)
{
super(check(x.trim()),minlen,maxlen);
}
public void init(String x, int minlen, int maxlen)
{
super.init(check(x.trim()),minlen,maxlen);
}
protected SyntaxDTAUS()
{
super();
}
protected void init()
{
super.init();
}
// --------------------------------------------------------------------------------
private void initData(StringBuffer res, int minsize, int maxsize)
{
int startidx = skipPreDelim(res);
int endidx = findNextDelim(res, startidx);
String st = res.substring(startidx, endidx);
setContent(check(unquote(st)),minsize,maxsize);
res.delete(0,endidx);
}
public SyntaxDTAUS(StringBuffer res, int minsize, int maxsize)
{
initData(res,minsize,maxsize);
}
public void init(StringBuffer res, int minsize, int maxsize)
{
initData(res,minsize,maxsize);
}
public String toString()
{
String ret=super.toString();
ret=ret.replace('\133','\304');
ret=ret.replace('\134','\326');
ret=ret.replace('\135','\334');
ret=ret.replace('\176','\337');
return ret;
}
}