class HdfsSnapshotLocationManager implements SourceLocationManager {

  @Override
  public Path getPartitionSubPath(Path partitionLocation) {
    String sourceDataPathString = sourceDataPath.toString();
    String partitionLocationString = partitionLocation.toString();
    if (!partitionLocationString.startsWith(sourceDataPathString)) {
      throw new CircusTrainException("Partition path '"
          + partitionLocationString
          + "' does not seem to belong to data source path '"
          + sourceDataPathString
          + "'");
    }

    String subPath = partitionLocationString.replace(sourceDataPathString, "");
    if (subPath.charAt(0) == '/') {
      subPath = subPath.substring(1);
    }
    return new Path(subPath);
  }

    HdfsSnapshotLocationManager(
      HiveConf sourceHiveConf,
      String eventId,
      Table sourceTable,
      boolean snapshotsDisabled,
      SourceCatalogListener sourceCatalogListener);
    HdfsSnapshotLocationManager(
      HiveConf sourceHiveConf,
      String eventId,
      Table sourceTable,
      boolean snapshotsDisabled,
      String tableBasePath,
      SourceCatalogListener sourceCatalogListener);
    HdfsSnapshotLocationManager(
      HiveConf sourceHiveConf,
      String eventId,
      Table sourceTable,
      List<Partition> sourcePartitions,
      boolean snapshotsDisabled,
      String tableBasePath,
      SourceCatalogListener sourceCatalogListener);
    HdfsSnapshotLocationManager(
      HiveConf sourceHiveConf,
      String eventId,
      Table sourceTable,
      List<Partition> sourcePartitions,
      boolean snapshotsDisabled,
      String tableBasePath,
      FileSystemFactory fileSystemFactory,
      SourceCatalogListener sourceCatalogListener);

}