001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.tlv.packager.bertlv; 020 021 022import org.jpos.emv.EMVProprietaryTagType; 023import org.jpos.emv.EMVStandardTagType; 024import org.jpos.emv.EMVTagType; 025import org.jpos.tlv.TLVDataFormat; 026import org.jpos.emv.UnknownTagNumberException; 027import org.jpos.iso.ISOException; 028 029/** 030 * @author Vishnu Pillai 031 */ 032public class DefaultICCBERTLVFormatMapper implements BERTLVFormatMapper { 033 034 public static DefaultICCBERTLVFormatMapper INSTANCE = new DefaultICCBERTLVFormatMapper(); 035 036 private EMVTagType getTagType(final Integer tagNumber) throws UnknownTagNumberException { 037 if (EMVStandardTagType.isProprietaryTag(tagNumber)) { 038 return getProprietaryTagType(tagNumber); 039 } else { 040 return EMVStandardTagType.forCode(tagNumber); 041 } 042 } 043 044 @Override 045 public TLVDataFormat getFormat(Integer tagNumber) throws ISOException { 046 EMVTagType tagType; 047 try { 048 tagType = getTagType(tagNumber); 049 } catch (UnknownTagNumberException e) { 050 throw new ISOException(e); 051 } 052 return tagType.getFormat(); 053 } 054 055 /** 056 * Subclasses should override this method to provide an implementation of org.jpos.emv.EMVProprietaryTagType 057 * @param tagNumber 058 * @return EMVProprietaryTagType 059 * @throws UnknownTagNumberException 060 */ 061 protected EMVProprietaryTagType getProprietaryTagType(Integer tagNumber) throws UnknownTagNumberException { 062 throw new UnknownTagNumberException(Integer.toHexString(tagNumber)); 063 } 064 065}