001package org.hl7.fhir.r5.terminologies.utilities;
002
003import org.hl7.fhir.r5.model.Coding;
004import org.hl7.fhir.r5.model.DataType;
005import org.hl7.fhir.utilities.VersionUtilities;
006
007import java.security.AlgorithmParameterGenerator;
008
009public enum VersionAlgorithm {
010  Unknown, SemVer, Integer, Alpha, Date, Natural;
011
012  public static VersionAlgorithm fromType(DataType dt) {
013    if (dt == null) {
014      return Unknown;
015    }
016    if (dt instanceof Coding) {
017      return VersionAlgorithm.fromString(((Coding) dt).getCode());
018    } else if (dt.isPrimitive()) {
019      return VersionAlgorithm.fromString(dt.primitiveValue());
020    } else {
021      return Unknown;
022    }
023  }
024
025  private static VersionAlgorithm fromString(String code) {
026    if (code == null) {
027      return Unknown;
028    }
029    switch (code) {
030      case "semver": return SemVer;
031      case "integer": return Integer;
032      case "alpha" : return Alpha;
033      case "date": return Date;
034      case "natural": return Natural;
035      default: return Unknown;
036    }
037  }
038
039  public static VersionAlgorithm guessFormat(String result) {
040    if (VersionUtilities.isSemVerWithWildcards(result)) {
041      return SemVer;
042    }
043    return Alpha;
044
045  }
046}