InterfaceVersion.java
- package fr.sii.ogham.sms.builder.cloudhopper;
- import java.util.Arrays;
- import java.util.List;
- import com.cloudhopper.smpp.SmppConstants;
- import fr.sii.ogham.core.convert.StringToEnumConverter.FactoryMethod;
- /**
- * Wraps the version for builder
- *
- * @author Aurélien Baudet
- *
- */
- @FactoryMethod(name = "of")
- public enum InterfaceVersion {
- /**
- * SMPP 3.3 the oldest used version (despite its limitations, it is still
- * widely used); supports GSM only. Generates an immediate response for each
- * message sent.
- */
- VERSION_3_3(SmppConstants.VERSION_3_3, "3.3"),
- /**
- * SMPP 3.4 adds optional Tag-Length-Value (TLV) parameters, support of
- * non-GSM SMS technologies and the transceiver support (single connections
- * that can send and receive messages). The exchange of SMPP request and
- * response PDUs between an ESME Transmitter and SMSC may occur
- * synchronously or asynchronously.
- */
- VERSION_3_4(SmppConstants.VERSION_3_4, "3.4"),
- /**
- * SMPP 5.0 is the latest version of SMPP; adds support for cell
- * broadcasting, smart flow control. As of 2019, it is not widely used.
- */
- VERSION_5_0(SmppConstants.VERSION_5_0, "5.0", "5");
- private final byte value;
- private final List<String> versionNames;
- InterfaceVersion(byte value, String... versionNames) {
- this.value = value;
- this.versionNames = Arrays.asList(versionNames);
- }
- /**
- * Get the version as byte value.
- *
- * @return the byte value for the version
- */
- public byte value() {
- return value;
- }
-
- /**
- * The version as string.
- *
- * @return the version string
- */
- public String getVersionString() {
- return versionNames.get(0);
- }
- private boolean matches(String versionName) {
- for (String v : versionNames) {
- if (v.equals(versionName)) {
- return true;
- }
- }
- return false;
- }
- /**
- * Get the {@link InterfaceVersion} from the byte value.
- *
- * If value is {@code null}, {@code null} is returned
- *
- * @param value
- * the byte value that represents the version
- * @return the corresponding interface version
- * @throws IllegalArgumentException
- * if the value doesn't match any known version
- */
- public static InterfaceVersion fromValue(Byte value) {
- if (value == null) {
- return null;
- }
- for (InterfaceVersion version : values()) {
- if (version.value() == value) {
- return version;
- }
- }
- throw new IllegalArgumentException("Unknown interface version with value " + value);
- }
- /**
- * Get the {@link InterfaceVersion} from either the enum name (
- * {@link InterfaceVersion#VERSION_3_3},
- * {@link InterfaceVersion#VERSION_3_4},
- * {@link InterfaceVersion#VERSION_5_0}) or from a string that represents
- * the version ("3.3", "3.4", "5.0").
- *
- * If version name is {@code null}, {@code null} is returned
- *
- * @param version
- * the version as string
- * @return the interface version
- * @throws IllegalArgumentException
- * if the version name doesn't match any known version
- */
- public static InterfaceVersion of(String version) {
- if (version == null || version.isEmpty()) {
- return null;
- }
- for (InterfaceVersion iv : values()) {
- if (iv.name().equals(version)) {
- return iv;
- }
- if (iv.matches(version)) {
- return iv;
- }
- }
- throw new IllegalArgumentException("Unknown interface version named " + version);
- }
- }