// Path: src/main/java/com/flipkart/fdp/migration/db/models/Status.java
// public enum Status {
// 	NEW, STARTED, COMPLETED, FAILED
// }
// 
// Path: src/main/java/com/flipkart/fdp/migration/distcp/config/DCMConfig.java
// public class DCMConfig {
// 
// 	private String batchName = null;
// 
// 	private int numWorkers = 0;
// 
// 	private boolean ignoreException = false;
// 
// 	private String statusPath = null;
// 
// 	private StateManagerImpl stateManagerType = null;
// 
// 	private SourceConfig sourceConfig = null;
// 
// 	private SinkConfig sinkConfig = null;
// 
// 	private DBConfig dbConfig = null;
// 
// 	public long getBatchID() {
// 		return DCMConstants.HASH_MEDIAN
// 				+ DCMConstants.hasher.hashBytes(
// 						batchName.toLowerCase().getBytes()).asInt();
// 	}
// 
// 	public String getBatchName() {
// 		return batchName;
// 	}
// 
// 	public void setBatchName(String batchName) {
// 		this.batchName = batchName;
// 	}
// 
// 	public boolean isIgnoreException() {
// 		return ignoreException;
// 	}
// 
// 	public void setIgnoreException(boolean ignoreException) {
// 		this.ignoreException = ignoreException;
// 	}
// 
// 	public String getStatusPath() {
// 		return statusPath;
// 	}
// 
// 	public void setStatusPath(String statusPath) {
// 		this.statusPath = statusPath;
// 	}
// 
// 	public SourceConfig getSourceConfig() {
// 		return sourceConfig;
// 	}
// 
// 	public void setSourceConfig(SourceConfig sourceConfig) {
// 		this.sourceConfig = sourceConfig;
// 	}
// 
// 	public SinkConfig getSinkConfig() {
// 		return sinkConfig;
// 	}
// 
// 	public void setSinkConfig(SinkConfig sinkConfig) {
// 		this.sinkConfig = sinkConfig;
// 	}
// 
// 	public DBConfig getDbConfig() {
// 		return dbConfig;
// 	}
// 
// 	public void setDbConfig(DBConfig dbConfig) {
// 		this.dbConfig = dbConfig;
// 	}
// 
// 	public int getNumWorkers() {
// 		return numWorkers;
// 	}
// 
// 	public void setNumWorkers(int numWorkers) {
// 		this.numWorkers = numWorkers;
// 	}
// 
// 	public StateManagerImpl getStateManagerType() {
// 		return stateManagerType;
// 	}
// 
// 	public void setStateManagerType(StateManagerImpl stateManagerType) {
// 		this.stateManagerType = stateManagerType;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		Gson gson = new Gson();
// 		return gson.toJson(this);
// 	}
// }


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import com.flipkart.fdp.migration.db.models.Status;
import com.flipkart.fdp.migration.distcp.config.DCMConfig;
import com.google.gson.Gson;
							TransferStatus tstat = gson.fromJson(line,
									TransferStatus.class);
							if (tstat != null)
								status.add(tstat);
						} catch (Exception ein) {
							System.out
									.println("Exception Reading from location: "
											+ fstat.getPath()
											+ ", Message: "
											+ ein.getMessage());
						}
					}
					reader.close();
				} catch (Exception e) {
					System.out.println("Exception reading previous state: "
							+ e.getMessage());
				}
			}
		}
		return status;
	}

	@Override
	public Path getReportPath() {

		return new Path(runPath, REPORT_PATH);
	}

	@Override
	public String getRunId() {
// Path: src/main/java/com/flipkart/fdp/migration/db/models/Status.java
// public enum Status {
// 	NEW, STARTED, COMPLETED, FAILED
// }
// 
// Path: src/main/java/com/flipkart/fdp/migration/distcp/config/DCMConfig.java
// public class DCMConfig {
// 
// 	private String batchName = null;
// 
// 	private int numWorkers = 0;
// 
// 	private boolean ignoreException = false;
// 
// 	private String statusPath = null;
// 
// 	private StateManagerImpl stateManagerType = null;
// 
// 	private SourceConfig sourceConfig = null;
// 
// 	private SinkConfig sinkConfig = null;
// 
// 	private DBConfig dbConfig = null;
// 
// 	public long getBatchID() {
// 		return DCMConstants.HASH_MEDIAN
// 				+ DCMConstants.hasher.hashBytes(
// 						batchName.toLowerCase().getBytes()).asInt();
// 	}
// 
// 	public String getBatchName() {
// 		return batchName;
// 	}
// 
// 	public void setBatchName(String batchName) {
// 		this.batchName = batchName;
// 	}
// 
// 	public boolean isIgnoreException() {
// 		return ignoreException;
// 	}
// 
// 	public void setIgnoreException(boolean ignoreException) {
// 		this.ignoreException = ignoreException;
// 	}
// 
// 	public String getStatusPath() {
// 		return statusPath;
// 	}
// 
// 	public void setStatusPath(String statusPath) {
// 		this.statusPath = statusPath;
// 	}
// 
// 	public SourceConfig getSourceConfig() {
// 		return sourceConfig;
// 	}
// 
// 	public void setSourceConfig(SourceConfig sourceConfig) {
// 		this.sourceConfig = sourceConfig;
// 	}
// 
// 	public SinkConfig getSinkConfig() {
// 		return sinkConfig;
// 	}
// 
// 	public void setSinkConfig(SinkConfig sinkConfig) {
// 		this.sinkConfig = sinkConfig;
// 	}
// 
// 	public DBConfig getDbConfig() {
// 		return dbConfig;
// 	}
// 
// 	public void setDbConfig(DBConfig dbConfig) {
// 		this.dbConfig = dbConfig;
// 	}
// 
// 	public int getNumWorkers() {
// 		return numWorkers;
// 	}
// 
// 	public void setNumWorkers(int numWorkers) {
// 		this.numWorkers = numWorkers;
// 	}
// 
// 	public StateManagerImpl getStateManagerType() {
// 		return stateManagerType;
// 	}
// 
// 	public void setStateManagerType(StateManagerImpl stateManagerType) {
// 		this.stateManagerType = stateManagerType;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		Gson gson = new Gson();
// 		return gson.toJson(this);
// 	}
// }


// Path: src/main/java/com/flipkart/fdp/migration/distcp/state/HDFSStateManager.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import com.flipkart.fdp.migration.db.models.Status;
import com.flipkart.fdp.migration.distcp.config.DCMConfig;
import com.google.gson.Gson;

							TransferStatus tstat = gson.fromJson(line,
									TransferStatus.class);
							if (tstat != null)
								status.add(tstat);
						} catch (Exception ein) {
							System.out
									.println("Exception Reading from location: "
											+ fstat.getPath()
											+ ", Message: "
											+ ein.getMessage());
						}
					}
					reader.close();
				} catch (Exception e) {
					System.out.println("Exception reading previous state: "
							+ e.getMessage());
				}
			}
		}
		return status;
	}

	@Override
	public Path getReportPath() {

		return new Path(runPath, REPORT_PATH);
	}

	@Override
	public String getRunId() {
		return runId;