// Path: src/main/java/org/lightcouch/CouchDbUtil.java
// public static void assertNotEmpty(Object object, String prefix) throws IllegalArgumentException {
// 	if(object == null) {
// 		throw new IllegalArgumentException(format("%s may not be null.", prefix));
// 	} else if(object instanceof String && ((String)object).length() == 0) {
// 		throw new IllegalArgumentException(format("%s may not be empty.", prefix));
// 	} 
// }
// 
// Path: src/main/java/org/lightcouch/CouchDbUtil.java
// public static void close(HttpResponse response) {
// 	try {
// 		close(response.getEntity().getContent());
// 	} catch (Exception e) {}
// }
// 
// Path: src/main/java/org/lightcouch/CouchDbUtil.java
// public static InputStream getStream(HttpResponse response) {
// 	try { 
// 		return response.getEntity().getContent();
// 	} catch (Exception e) {
// 		throw new CouchDbException("Error reading response. ", e);
// 	}
// }
// 
// Path: src/main/java/org/lightcouch/URIBuilder.java
// public static URIBuilder buildUri() {
// 	return new URIBuilder();
// }
// 
// Path: src/main/java/org/lightcouch/ReplicationResult.java
// public static class ReplicationHistory {
// 	@SerializedName("session_id")
// 	private String sessionId;
// 	@SerializedName("start_time")
// 	private String startTime;
// 	@SerializedName("end_time")
// 	private String endTime;
// 	@SerializedName("start_last_seq")
// 	private String startLastSeq;
// 	@SerializedName("end_last_seq")
// 	private String endLastSeq;
// 	@SerializedName("recorded_seq")
// 	private String recordedSeq;
// 	@SerializedName("missing_checked")
// 	private long missingChecked;
// 	@SerializedName("missing_found")
// 	private long missingFound;
// 	@SerializedName("docs_read")
// 	private long docsRead;
// 	@SerializedName("docs_written")
// 	private long docsWritten;
// 	@SerializedName("doc_write_failures")
// 	private long docWriteFailures;
// 
// 	public String getSessionId() {
// 		return sessionId;
// 	}
// 
// 	public String getStartTime() {
// 		return startTime;
// 	}
// 
// 	public String getEndTime() {
// 		return endTime;
// 	}
// 
// 	public String getStartLastSeq() {
// 		return startLastSeq;
// 	}
// 
// 	public String getEndLastSeq() {
// 		return endLastSeq;
// 	}
// 
// 	public String getRecordedSeq() {
// 		return recordedSeq;
// 	}
// 
// 	public long getMissingChecked() {
// 		return missingChecked;
// 	}
// 
// 	public long getMissingFound() {
// 		return missingFound;
// 	}
// 
// 	public long getDocsRead() {
// 		return docsRead;
// 	}
// 
// 	public long getDocsWritten() {
// 		return docsWritten;
// 	}
// 
// 	public long getDocWriteFailures() {
// 		return docWriteFailures;
// 	}
// } // /class ReplicationHistory


import com.google.gson.JsonObject;
import static org.lightcouch.CouchDbUtil.assertNotEmpty;
import static org.lightcouch.CouchDbUtil.close;
import static org.lightcouch.CouchDbUtil.getStream;
import static org.lightcouch.URIBuilder.buildUri;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.Map;
import org.apache.commons.codec.Charsets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpResponse;
import org.lightcouch.ReplicationResult.ReplicationHistory;
		addProperty(json, "proxy", proxy);
		addProperty(json, "since_seq", sinceSeq);
		addProperty(json, "create_target", createTarget);
		
		if(targetOauth != null) {
			JsonObject auth = new JsonObject();
			JsonObject oauth = new JsonObject();
			addProperty(oauth, "consumer_secret", consumerSecret);
			addProperty(oauth, "consumer_key", consumerKey);
			addProperty(oauth, "token_secret", tokenSecret);
			addProperty(oauth, "token", token);
			
			addProperty(targetOauth, "url", target);
			auth.add("oauth", oauth);
			
			targetOauth.add("auth", auth);
			json.add("target", targetOauth);
		} else {
			addProperty(json, "target", target);
		}
		return json;
	}

	private void addProperty(JsonObject json, String name, Object value) {
		if(value != null) {
			if(value instanceof Boolean)
				json.addProperty(name, (Boolean)value);
			else if (value instanceof String)
				json.addProperty(name, (String)value);
			else if (value instanceof Integer)
// Path: src/main/java/org/lightcouch/CouchDbUtil.java
// public static void assertNotEmpty(Object object, String prefix) throws IllegalArgumentException {
// 	if(object == null) {
// 		throw new IllegalArgumentException(format("%s may not be null.", prefix));
// 	} else if(object instanceof String && ((String)object).length() == 0) {
// 		throw new IllegalArgumentException(format("%s may not be empty.", prefix));
// 	} 
// }
// 
// Path: src/main/java/org/lightcouch/CouchDbUtil.java
// public static void close(HttpResponse response) {
// 	try {
// 		close(response.getEntity().getContent());
// 	} catch (Exception e) {}
// }
// 
// Path: src/main/java/org/lightcouch/CouchDbUtil.java
// public static InputStream getStream(HttpResponse response) {
// 	try { 
// 		return response.getEntity().getContent();
// 	} catch (Exception e) {
// 		throw new CouchDbException("Error reading response. ", e);
// 	}
// }
// 
// Path: src/main/java/org/lightcouch/URIBuilder.java
// public static URIBuilder buildUri() {
// 	return new URIBuilder();
// }
// 
// Path: src/main/java/org/lightcouch/ReplicationResult.java
// public static class ReplicationHistory {
// 	@SerializedName("session_id")
// 	private String sessionId;
// 	@SerializedName("start_time")
// 	private String startTime;
// 	@SerializedName("end_time")
// 	private String endTime;
// 	@SerializedName("start_last_seq")
// 	private String startLastSeq;
// 	@SerializedName("end_last_seq")
// 	private String endLastSeq;
// 	@SerializedName("recorded_seq")
// 	private String recordedSeq;
// 	@SerializedName("missing_checked")
// 	private long missingChecked;
// 	@SerializedName("missing_found")
// 	private long missingFound;
// 	@SerializedName("docs_read")
// 	private long docsRead;
// 	@SerializedName("docs_written")
// 	private long docsWritten;
// 	@SerializedName("doc_write_failures")
// 	private long docWriteFailures;
// 
// 	public String getSessionId() {
// 		return sessionId;
// 	}
// 
// 	public String getStartTime() {
// 		return startTime;
// 	}
// 
// 	public String getEndTime() {
// 		return endTime;
// 	}
// 
// 	public String getStartLastSeq() {
// 		return startLastSeq;
// 	}
// 
// 	public String getEndLastSeq() {
// 		return endLastSeq;
// 	}
// 
// 	public String getRecordedSeq() {
// 		return recordedSeq;
// 	}
// 
// 	public long getMissingChecked() {
// 		return missingChecked;
// 	}
// 
// 	public long getMissingFound() {
// 		return missingFound;
// 	}
// 
// 	public long getDocsRead() {
// 		return docsRead;
// 	}
// 
// 	public long getDocsWritten() {
// 		return docsWritten;
// 	}
// 
// 	public long getDocWriteFailures() {
// 		return docWriteFailures;
// 	}
// } // /class ReplicationHistory


// Path: src/main/java/org/lightcouch/Replication.java
import com.google.gson.JsonObject;
import static org.lightcouch.CouchDbUtil.assertNotEmpty;
import static org.lightcouch.CouchDbUtil.close;
import static org.lightcouch.CouchDbUtil.getStream;
import static org.lightcouch.URIBuilder.buildUri;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.Map;
import org.apache.commons.codec.Charsets;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpResponse;
import org.lightcouch.ReplicationResult.ReplicationHistory;

		addProperty(json, "proxy", proxy);
		addProperty(json, "since_seq", sinceSeq);
		addProperty(json, "create_target", createTarget);
		
		if(targetOauth != null) {
			JsonObject auth = new JsonObject();
			JsonObject oauth = new JsonObject();
			addProperty(oauth, "consumer_secret", consumerSecret);
			addProperty(oauth, "consumer_key", consumerKey);
			addProperty(oauth, "token_secret", tokenSecret);
			addProperty(oauth, "token", token);
			
			addProperty(targetOauth, "url", target);
			auth.add("oauth", oauth);
			
			targetOauth.add("auth", auth);
			json.add("target", targetOauth);
		} else {
			addProperty(json, "target", target);
		}
		return json;
	}

	private void addProperty(JsonObject json, String name, Object value) {
		if(value != null) {
			if(value instanceof Boolean)
				json.addProperty(name, (Boolean)value);
			else if (value instanceof String)
				json.addProperty(name, (String)value);
			else if (value instanceof Integer)
				json.addProperty(name, (Integer)value);