// Path: src/main/java/com/turn/sorcerer/status/StatusStorage.java
// public interface StatusStorage {
// 
// 	String toString();
// 
// 	void init() throws IOException;
// 
// 	StatusStorage setType(String type);
// 
// 	DateTime getLastUpdateTime(String identifier, int id) throws IOException;
// 
// 	DateTime getStatusUpdateTime(String identifier, int id, Status status) throws IOException;
// 
// 	int getCurrentIterNo(String identifier) throws IOException;
// 
// 	Status checkStatus(String identifier, int id) throws IOException;
// 
// 	void clearAllStatuses(String identifier, int jobId) throws IOException;
// 
// 	void removeStatus(String identifier, int jobId, Status status) throws IOException;
// 
// 	void commitStatus(String identifier, int jobId, Status status, DateTime time, boolean overwrite) throws IOException;
// 
// }
// 
// Path: src/main/java/com/turn/sorcerer/status/type/StatusStorageType.java
// public interface StatusStorageType {
// 
// 	Class<? extends StatusStorage> getStorageClass();
// 
// 	String name();
// }
// 
// Path: src/main/java/com/turn/sorcerer/status/impl/MemoryStatusStorage.java
// public class MemoryStatusStorage implements StatusStorage {
// 
// 	private static final Logger logger =
// 			LoggerFactory.getLogger(MemoryStatusStorage.class);
// 
// 	private final Table<String, Integer, ConcurrentMap<Status, DateTime>> store;
// 
// 	public MemoryStatusStorage() {
// 		logger.debug("New instance of memory status storage");
// 		store =	HashBasedTable.create();
// 	}
// 
// 	@Override
// 	public void init() throws IOException {
// 
// 	}
// 
// 	@Override
// 	public StatusStorage setType(String type) {
// 		return this;
// 	}
// 
// 	@Override
// 	public DateTime getLastUpdateTime(String identifier, int id) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, id);
// 
// 		if (statuses == null) {
// 			return null;
// 		}
// 
// 		DateTime lastDt = new DateTime().withYear(1970);
// 
// 		for (DateTime dt : statuses.values()) {
// 			if (dt.isAfter(lastDt)) {
// 				lastDt = dt;
// 			}
// 		}
// 
// 		return lastDt;
// 	}
// 
// 	@Override
// 	public DateTime getStatusUpdateTime(String identifier, int id, Status status) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, id);
// 
// 		if (statuses != null) {
// 			return statuses.get(status);
// 		}
// 
// 		return null;
// 	}
// 
// 	@Override
// 	public int getCurrentIterNo(String identifier) throws IOException {
// 		int maxIterNo = 0;
// 		for (Integer i : store.columnKeySet()) {
// 			maxIterNo = Math.max(i, maxIterNo);
// 		}
// 		return maxIterNo;
// 	}
// 
// 	@Override
// 	public Status checkStatus(String identifier, int id) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, id);
// 
// 		if (statuses == null || statuses.size() == 0) {
// 			return Status.PENDING;
// 		}
// 
// 		Set<Status> stati = statuses.keySet();
// 
// 		if (stati.contains(Status.SUCCESS)) {
// 			return Status.SUCCESS;
// 		}
// 
// 		if (stati.contains(Status.IN_PROGRESS)) {
// 			return Status.IN_PROGRESS;
// 		}
// 
// 		if (stati.contains(Status.ERROR)) {
// 			return Status.ERROR;
// 		}
// 
// 		return Status.PENDING;
// 	}
// 
// 	@Override
// 	public void clearAllStatuses(String identifier, int jobId) throws IOException {
// 		store.remove(identifier, jobId);
// 	}
// 
// 	@Override
// 	public void removeStatus(String identifier, int jobId, Status status) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, jobId);
// 
// 		statuses.remove(status);
// 	}
// 
// 	@Override
// 	public void commitStatus(String identifier, int jobId, Status status, DateTime time, boolean overwrite) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, jobId);
// 
// 		if (statuses == null || overwrite) {
// 			statuses = new ConcurrentHashMap<Status, DateTime>();
// 			store.put(identifier, jobId, statuses);
// 		}
// 
// 		statuses.put(status, time);
// 	}
// }


import com.turn.sorcerer.status.StatusStorage;
import com.turn.sorcerer.status.type.StatusStorageType;
import com.turn.sorcerer.status.impl.MemoryStatusStorage;
/*
 * Copyright (c) 2015, Turn Inc. All Rights Reserved.
 * Use of this source code is governed by a BSD-style license that can be found
 * in the LICENSE file.
 */

package com.turn.sorcerer.status.type.impl;


/**
 * Class Description Here
 *
 * @author tshiou
 */
public class MemoryStatusStorageType implements StatusStorageType {

	private String dummy;

	@Override
// Path: src/main/java/com/turn/sorcerer/status/StatusStorage.java
// public interface StatusStorage {
// 
// 	String toString();
// 
// 	void init() throws IOException;
// 
// 	StatusStorage setType(String type);
// 
// 	DateTime getLastUpdateTime(String identifier, int id) throws IOException;
// 
// 	DateTime getStatusUpdateTime(String identifier, int id, Status status) throws IOException;
// 
// 	int getCurrentIterNo(String identifier) throws IOException;
// 
// 	Status checkStatus(String identifier, int id) throws IOException;
// 
// 	void clearAllStatuses(String identifier, int jobId) throws IOException;
// 
// 	void removeStatus(String identifier, int jobId, Status status) throws IOException;
// 
// 	void commitStatus(String identifier, int jobId, Status status, DateTime time, boolean overwrite) throws IOException;
// 
// }
// 
// Path: src/main/java/com/turn/sorcerer/status/type/StatusStorageType.java
// public interface StatusStorageType {
// 
// 	Class<? extends StatusStorage> getStorageClass();
// 
// 	String name();
// }
// 
// Path: src/main/java/com/turn/sorcerer/status/impl/MemoryStatusStorage.java
// public class MemoryStatusStorage implements StatusStorage {
// 
// 	private static final Logger logger =
// 			LoggerFactory.getLogger(MemoryStatusStorage.class);
// 
// 	private final Table<String, Integer, ConcurrentMap<Status, DateTime>> store;
// 
// 	public MemoryStatusStorage() {
// 		logger.debug("New instance of memory status storage");
// 		store =	HashBasedTable.create();
// 	}
// 
// 	@Override
// 	public void init() throws IOException {
// 
// 	}
// 
// 	@Override
// 	public StatusStorage setType(String type) {
// 		return this;
// 	}
// 
// 	@Override
// 	public DateTime getLastUpdateTime(String identifier, int id) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, id);
// 
// 		if (statuses == null) {
// 			return null;
// 		}
// 
// 		DateTime lastDt = new DateTime().withYear(1970);
// 
// 		for (DateTime dt : statuses.values()) {
// 			if (dt.isAfter(lastDt)) {
// 				lastDt = dt;
// 			}
// 		}
// 
// 		return lastDt;
// 	}
// 
// 	@Override
// 	public DateTime getStatusUpdateTime(String identifier, int id, Status status) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, id);
// 
// 		if (statuses != null) {
// 			return statuses.get(status);
// 		}
// 
// 		return null;
// 	}
// 
// 	@Override
// 	public int getCurrentIterNo(String identifier) throws IOException {
// 		int maxIterNo = 0;
// 		for (Integer i : store.columnKeySet()) {
// 			maxIterNo = Math.max(i, maxIterNo);
// 		}
// 		return maxIterNo;
// 	}
// 
// 	@Override
// 	public Status checkStatus(String identifier, int id) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, id);
// 
// 		if (statuses == null || statuses.size() == 0) {
// 			return Status.PENDING;
// 		}
// 
// 		Set<Status> stati = statuses.keySet();
// 
// 		if (stati.contains(Status.SUCCESS)) {
// 			return Status.SUCCESS;
// 		}
// 
// 		if (stati.contains(Status.IN_PROGRESS)) {
// 			return Status.IN_PROGRESS;
// 		}
// 
// 		if (stati.contains(Status.ERROR)) {
// 			return Status.ERROR;
// 		}
// 
// 		return Status.PENDING;
// 	}
// 
// 	@Override
// 	public void clearAllStatuses(String identifier, int jobId) throws IOException {
// 		store.remove(identifier, jobId);
// 	}
// 
// 	@Override
// 	public void removeStatus(String identifier, int jobId, Status status) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, jobId);
// 
// 		statuses.remove(status);
// 	}
// 
// 	@Override
// 	public void commitStatus(String identifier, int jobId, Status status, DateTime time, boolean overwrite) throws IOException {
// 		ConcurrentMap<Status, DateTime> statuses = store.get(identifier, jobId);
// 
// 		if (statuses == null || overwrite) {
// 			statuses = new ConcurrentHashMap<Status, DateTime>();
// 			store.put(identifier, jobId, statuses);
// 		}
// 
// 		statuses.put(status, time);
// 	}
// }


// Path: src/main/java/com/turn/sorcerer/status/type/impl/MemoryStatusStorageType.java
import com.turn.sorcerer.status.StatusStorage;
import com.turn.sorcerer.status.type.StatusStorageType;
import com.turn.sorcerer.status.impl.MemoryStatusStorage;

/*
 * Copyright (c) 2015, Turn Inc. All Rights Reserved.
 * Use of this source code is governed by a BSD-style license that can be found
 * in the LICENSE file.
 */

package com.turn.sorcerer.status.type.impl;


/**
 * Class Description Here
 *
 * @author tshiou
 */
public class MemoryStatusStorageType implements StatusStorageType {

	private String dummy;

	@Override
	public Class<? extends StatusStorage> getStorageClass() {