package foundation.version_doc;
|
|
import foundation.dao.Filter;
|
import foundation.dao.IFileWriter;
|
import foundation.dao.IVersionIndex;
|
import foundation.dao.bizlogic.IVersionProvider;
|
import foundation.data.entity.Entity;
|
import foundation.data.object.DataObject;
|
import foundation.persist.NamedSQL;
|
|
|
public class VersionCenter extends IVersionProvider {
|
|
private static VersionCenter instance;
|
private VersionBucket versionBucket;
|
|
private VersionCenter() {
|
versionBucket = VersionBucket.getInstance();
|
}
|
|
public static synchronized VersionCenter getInstance() {
|
if (instance == null) {
|
instance = new VersionCenter();
|
}
|
|
return instance;
|
}
|
|
@Override
|
public boolean isVersionActive(String dataName) {
|
VersionMeta meta = versionBucket.get(dataName);
|
|
if (meta == null) {
|
return false;
|
}
|
|
return meta.isVersionActive();
|
}
|
|
@Override
|
public IVersionIndex getIndex(String dataName, String dataId, String applyId) throws Exception {
|
VersionMeta meta = versionBucket.get(dataName);
|
|
if (meta == null) {
|
return null;
|
}
|
|
boolean versionActive = meta.isVersionActive();
|
|
if (!versionActive) {
|
return null;
|
}
|
|
String tableName = meta.getIndexTableName();
|
DataObject dataObject = DataObject.getInstance(tableName);
|
Filter filter = new Filter("data_id", dataId).add("apply_id", applyId);
|
Entity entity = dataObject.getTableEntity(filter);
|
|
if (entity == null) {
|
//1. 获取临时版本号
|
VersionCode versionNo = new VersionCode(tableName, dataId, applyId);
|
versionNo.nextTempValue();
|
|
//2. 获取文件路径
|
String path = VersionFileRepository.getFilePath(dataName, dataId, versionNo.getCode());
|
|
//3. 保存文件索引到数据库
|
entity = dataObject.createTableEntity(true);
|
|
entity.set("data_name", dataName);
|
entity.set("data_id", dataId);
|
entity.set("apply_Id", applyId);
|
entity.set("version_code", versionNo.getCode());
|
entity.set("version_no", versionNo.getNo());
|
entity.set("is_temp", true);
|
entity.set("path", path);
|
|
dataObject.insertEntity(entity);
|
}
|
|
VersionIndex result = new VersionIndex(meta);
|
result.load(entity);
|
|
return result;
|
}
|
|
@Override
|
public String activateVersion(String dataName, String dataId, String applyId) throws Exception {
|
IVersionIndex index = getIndex(dataName, dataId, applyId);
|
|
//1. 如果没有版本管理或已经是正式版本,退出
|
if (index == null || index.isStandard()) {
|
return null;
|
}
|
|
//2. 得到 code 的 next value
|
String tableName = index.getIndexTableName();
|
VersionCode versionCode = new VersionCode(tableName, dataId, applyId);
|
versionCode.nextStandardValue();
|
|
//3. 设置版本号
|
NamedSQL namedSQL = NamedSQL.getInstance("setStandardVersionNo");
|
namedSQL.setTableName(tableName);
|
namedSQL.setParam("dataId", dataId);
|
namedSQL.setParam("applyId", applyId);
|
namedSQL.setParam("versionCode", versionCode.getCode());
|
namedSQL.setParam("versionNo", versionCode.getNo());
|
namedSQL.execute();
|
|
//4. 根据正式版本号为文件重新命名
|
IFileWriter fileWriter = index.getFileWriter();
|
fileWriter.rename();
|
|
//5. 返回版本号
|
return versionCode.getCode();
|
}
|
|
public void deleteVersion(String dataName, String dataId, String applyId) throws Exception {
|
VersionMeta meta = versionBucket.get(dataName);
|
|
if (meta == null) {
|
return;
|
}
|
|
boolean versionActive = meta.isVersionActive();
|
|
if (!versionActive) {
|
return;
|
}
|
|
NamedSQL namedSQL = NamedSQL.getInstance("deleteOneVersion");
|
namedSQL.setTableName(meta.getIndexTableName());
|
namedSQL.setParam("dataId", dataId);
|
namedSQL.setParam("applyId", applyId);
|
namedSQL.execute();
|
}
|
|
}
|