package org.ektorp;
import java.io.*;
import java.util.*;
import com.fasterxml.jackson.annotation.*;
import org.ektorp.util.*;
import com.fasterxml.jackson.databind.JsonNode;
/**
*
* @author henrik lundgren
*
*/
public class DbInfo implements Serializable {
private static final long serialVersionUID = -6511885014968791685L;
private final String dbName;
@JsonProperty("compact_running")
boolean compactRunning;
@JsonProperty("disk_format_version")
int diskFormatVersion;
@JsonProperty("disk_size")
long diskSize;
@JsonProperty("doc_count")
long docCount;
@JsonProperty("doc_del_count")
int docDelCount;
@JsonProperty("instance_start_time")
long instanceStartTime;
@JsonProperty("purge_seq")
int purgeSeq;
@JsonProperty("update_seq")
@edu.umd.cs.findbugs.annotations.SuppressWarnings(value="SE_BAD_FIELD")
JsonNode updateSeq;
/**
* Used to future proof this class, if new fields are added by CouchDb they will be found here.
*/
private Map<String, Object> unknownFields;
public boolean isCompactRunning() {
return compactRunning;
}
/**
* @return Name of the database
*/
public String getDbName() {
return dbName;
}
/**
* @return Current version of the internal database format on disk
*/
public int getDiskFormatVersion() {
return diskFormatVersion;
}
/**
* @return Current size in Bytes of the database (Note: Size of views indexes on disk are not included)
*/
public long getDiskSize() {
return diskSize;
}
/**
* @return Number of documents (including design documents) in the database.
*/
public long getDocCount() {
return docCount;
}
/**
* @return
*/
public int getDocDelCount() {
return docDelCount;
}
/**
* @return Timestamp of CouchDBs start time (ms)
*/
public long getInstanceStartTime() {
return instanceStartTime;
}
/**
* @return Number of purge operations
*/
public int getPurgeSeq() {
return purgeSeq;
}
/**
* @return Current number of updates to the database
*/
public long getUpdateSeq() {
return updateSeq.asLong();
}
/**
* Cloudant uses generated strings for update sequence.
* @return
*/
public String getUpdateSeqAsString() {
return updateSeq.asText();
}
/**
* @return false if db is an Cloudant instance.
*/
public boolean isUpdateSeqNumeric() {
return updateSeq != null && (updateSeq.isInt() || updateSeq.isLong());
}
@JsonCreator
public DbInfo(@JsonProperty("db_name") String dbName) {
Assert.hasText(dbName, "dbName may not be null or empty");
this.dbName = dbName;
}
@JsonAnySetter
public void setUnknown(String key, Object value) {
unknownFields().put(key, value);
}
public Map<String, Object> getUnknownFields() {
return unknownFields();
}
private Map<String, Object> unknownFields() {
if (unknownFields == null) {
unknownFields = new HashMap<String, Object>();
}
return unknownFields;
}
@Override
public boolean equals(Object o) {
if (o == this) return true;
if (o instanceof DbInfo) {
DbInfo dbi = (DbInfo) o;
return dbName.equals(dbi.dbName);
}
return false;
}
@Override
public int hashCode() {
return dbName.hashCode();
}
}