package com.netifera.platform.internal.model;
import java.util.List;
import com.db4o.ObjectContainer;
public class ModelStatus {
private final static int FIRST_PROBE_ID = 0x1000;
private long modelVersion;
private long currentEntityId;
private int currentProbeId;
private long currentTaskId;
private long idPrefix;
private transient ObjectContainer db;
public static ModelStatus getModelStatus(final ObjectContainer db) {
ModelStatus status;
List<ModelStatus> result = db.query(ModelStatus.class);
if(result.size() == 0) {
status = new ModelStatus(db);
status.currentProbeId = FIRST_PROBE_ID - 1;
status.modelVersion = Workspace.MODEL_VERSION;
db.store(status);
} else {
status = result.get(0);
status.db = db;
}
return status;
}
private ModelStatus(final ObjectContainer db) {
this.db = db;
}
synchronized boolean setIdPrefix(long prefix, boolean force) {
if(prefix == idPrefix)
return true;
if(idPrefix == 0 || force) {
idPrefix = prefix;
db.store(this);
return true;
} else {
return false;
}
}
long getIdPrefix() {
return idPrefix;
}
long getModelVersion() {
return modelVersion;
}
synchronized long generateEntityId() {
currentEntityId += 1;
db.store(this);
return (idPrefix << 32) | currentEntityId;
}
synchronized int generateProbeId() {
currentProbeId += 1;
db.store(this);
return currentProbeId;
}
synchronized long generateTaskId() {
currentTaskId += 1;
db.store(this);
return (idPrefix << 32) | currentTaskId;
}
}