code: @VisibleForTesting
    protected static String extractTokenValueFromEntity(String sourceEntity, String sourceTemplate, String token) {
      Preconditions.checkArgument(StringUtils.isNotBlank(sourceEntity), "Source entity should not be blank");
      Preconditions.checkArgument(StringUtils.isNotBlank(sourceTemplate), "Source template should not be blank");
      Preconditions.checkArgument(sourceTemplate.contains(token), String.format("Source template: %s should contain token: %s", sourceTemplate, token));
  
      String extractedValue = sourceEntity;
      List<String> preAndPostFix = Lists.newArrayList(Splitter.on(token).trimResults().split(sourceTemplate));
  
      extractedValue = StringUtils.removeStart(extractedValue, preAndPostFix.get(0));
      extractedValue = StringUtils.removeEnd(extractedValue, preAndPostFix.get(1));
  
      return extractedValue;
    }
docs: *
  Extract token value from source entity, where token value is represented by a token in the source entity.
  
  Eg.
  Source Entity  : prod_tableName_avro
  Source Template: prod_$LOGICAL_TABLE_avro
  Token          : $LOGICAL_TABLE
  Extracted Value: tableName
  
  @param sourceEntity      Source entity (typically a table or database name).
  @param sourceTemplate    Source template representing the source entity.
  @param token             Token representing the value to extract from the source entity using the template.
  @return Extracted token value from the source entity.