![JAR search and dependency download from the Maven repository](/logo.png)
com.emv.qrcode.decoder.cpm.DecoderCpm Maven / Gradle / Ivy
package com.emv.qrcode.decoder.cpm;
import java.lang.reflect.Constructor;
import java.util.AbstractMap.SimpleEntry;
import java.util.Base64;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiConsumer;
import com.emv.qrcode.core.configuration.DecodersCpmMap;
import com.emv.qrcode.core.exception.PresentedModeException;
// @formatter:off
public abstract class DecoderCpm {
private static final Map, Constructor extends DecoderCpm>>> ctorMap = new ConcurrentHashMap<>();
protected final Iterator iterator;
protected DecoderCpm(final byte[] source) {
this.iterator = new DecodeCpmIterator(source);
}
protected abstract T decode() throws PresentedModeException;
protected static Entry, BiConsumer> consumerTagLengthValue(final Class clazz, final BiConsumer consumer) {
return new SimpleEntry<>(clazz, consumer);
}
/**
* Decode CPM using Base64 string encoded
*
* @param target class
* @param source base64 string CPM
* @param clazz target class
* @return target class result
* @throws PresentedModeException
*/
public static final T decode(final String source, final Class clazz) throws PresentedModeException {
return decode(Base64.getDecoder().decode(source), clazz);
}
/**
* Decode CPM using byte array
*
* @param target class
* @param source byte array CPM
* @param clazz target class
* @return target class result
* @throws PresentedModeException
*/
public static final T decode(final byte[] source, final Class clazz) throws PresentedModeException {
try {
final Class extends DecoderCpm>> parserClass = DecodersCpmMap.getDecoder(clazz);
if (!ctorMap.containsKey(clazz)) {
ctorMap.put(clazz, parserClass.getConstructor(byte[].class));
}
final Constructor extends DecoderCpm>> ctor = ctorMap.get(clazz);
final DecoderCpm> parser = ctor.newInstance(source);
return clazz.cast(parser.decode());
} catch (final PresentedModeException ex) {
throw ex;
} catch (final Exception ex) {
throw new RuntimeException(ex);
}
}
}
// @formatter:on
© 2015 - 2025 Weber Informatics LLC | Privacy Policy