@VisibleForTesting
  protected static DbAndTable parseLogicalDbAndTable(String datasetNamePattern, DbAndTable dbAndTable,
      String logicalDbToken, String logicalTableToken) {
    Preconditions.checkArgument(StringUtils.isNotBlank(datasetNamePattern), "Dataset name pattern must not be empty.");

    List<String> datasetNameSplit = Lists.newArrayList(SPLIT_ON_DOT.split(datasetNamePattern));
    Preconditions.checkArgument(datasetNameSplit.size() == 2, "Dataset name pattern must of the format: "
        + "dbPrefix_$LOGICAL_DB_dbPostfix.tablePrefix_$LOGICAL_TABLE_tablePostfix (prefix / postfix are optional)");

    String dbNamePattern = datasetNameSplit.get(0);
    String tableNamePattern = datasetNameSplit.get(1);

    String logicalDb = extractTokenValueFromEntity(dbAndTable.getDb(), dbNamePattern, logicalDbToken);
    String logicalTable = extractTokenValueFromEntity(dbAndTable.getTable(), tableNamePattern, logicalTableToken);

    return new DbAndTable(logicalDb, logicalTable);
  }
@ VisibleForTesting protected static DbAndTable parseLogicalDbAndTable ( String datasetNamePattern , DbAndTable dbAndTable , String logicalDbToken , String logicalTableToken ) { Preconditions . checkArgument ( StringUtils . isNotBlank ( datasetNamePattern ) , "Dataset name pattern must not be empty." ) ; List < String > datasetNameSplit = Lists . newArrayList ( SPLIT_ON_DOT . split ( datasetNamePattern ) ) ; Preconditions . checkArgument ( datasetNameSplit . size ( ) == 2 , "Dataset name pattern must of the format: " + "dbPrefix_$LOGICAL_DB_dbPostfix.tablePrefix_$LOGICAL_TABLE_tablePostfix (prefix / postfix are optional)" ) ; String dbNamePattern = datasetNameSplit . get ( 0 ) ; String tableNamePattern = datasetNameSplit . get ( 1 ) ; String logicalDb = extractTokenValueFromEntity ( dbAndTable . getDb ( ) , dbNamePattern , logicalDbToken ) ; String logicalTable = extractTokenValueFromEntity ( dbAndTable . getTable ( ) , tableNamePattern , logicalTableToken ) ; return new DbAndTable ( logicalDb , logicalTable ) ; }
*
Parse logical Database and Table name from a given DbAndTable object.

Eg.
Dataset Name Pattern         : prod_$LOGICAL_DB_linkedin.prod_$LOGICAL_TABLE_linkedin
Source DB and Table          : prod_dbName_linkedin.prod_tableName_linkedin
Logical DB Token             : $LOGICAL_DB
Logical Table Token          : $LOGICAL_TABLE
Parsed Logical DB and Table  : dbName.tableName

@param datasetNamePattern    Dataset name pattern.
@param dbAndTable            Source DB and Table.
@param logicalDbToken        Logical DB token.
@param logicalTableToken     Logical Table token.
@return  Parsed logical DB and Table.