docs: public static FractionDescriptor fromGav(final FractionList fractionList, final String gav) {
          final String[] parts = gav.split(":");
          FractionDescriptor desc = null;
  
          switch (parts.length) {
              case 1:
                  desc = fractionList.getFractionDescriptor(THORNTAIL_GROUP_ID, parts[0]);
                  if (desc == null) {
                      throw new RuntimeException("Fraction not found: " + gav);
                  }
                  break;
              case 2:
                  desc = fractionList.getFractionDescriptor(THORNTAIL_GROUP_ID, parts[0]);
                  if (desc == null) {
                      throw new RuntimeException("Fraction not found: " + gav);
                  }
                  if (!desc.getVersion().equals(parts[1])) {
                      throw new RuntimeException("Version mismatch: requested " + gav + ", found " + desc.av());
                  }
                  break;
              case 3:
                  desc = fractionList.getFractionDescriptor(parts[0], parts[1]);
                  if (desc == null) {
                      throw new RuntimeException("Fraction not found: " + gav);
                  }
                  if (!desc.getVersion().equals(parts[2])) {
                      throw new RuntimeException("Version mismatch: requested " + gav + ", found " + desc.gav());
                  }
                  break;
              default:
                  throw new RuntimeException("Invalid fraction spec: " + gav);
          }
  
          return desc;
      }