промежуточный. рефакторинг объекта сервера.
This commit is contained in:
@@ -29,9 +29,10 @@ import java.util.LinkedHashMap;
|
||||
import java.util.Properties;
|
||||
import java.util.Vector;
|
||||
public abstract class RepositoryServer<D extends Database> {
|
||||
public final static String separator = "----------------------------------";
|
||||
protected static FileWriter Log;
|
||||
protected static boolean printOn = true;
|
||||
public abstract String getServerFileName();
|
||||
public abstract String getServerHomeName();
|
||||
//-
|
||||
public D db;
|
||||
protected Socket clientSocket; //сокет для общения
|
||||
@@ -159,12 +160,6 @@ public abstract class RepositoryServer<D extends Database> {
|
||||
public void StartAction() throws Exception {
|
||||
}
|
||||
public void Start() throws Exception {
|
||||
/*
|
||||
File started = new File(Constants.STARTED);
|
||||
if (started.exists())
|
||||
FileUtils.forceDelete(started);
|
||||
Utils.createEmptyFile(Constants.STARTED);
|
||||
*/
|
||||
DiagnosticSignalHandler.install("TERM", signalHandler);
|
||||
DiagnosticSignalHandler.install("INT", signalHandler);
|
||||
DiagnosticSignalHandler.install("ABRT", signalHandler);
|
||||
@@ -192,64 +187,31 @@ public abstract class RepositoryServer<D extends Database> {
|
||||
Print("клиент_2021: <- " + (request.codeName));
|
||||
try {
|
||||
code = request.getCode();
|
||||
//базовый функционал.
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
switch (code) {
|
||||
//<editor-fold desc="файлы и почта">
|
||||
case Ping:
|
||||
Ping();
|
||||
break;
|
||||
case ReadFile:
|
||||
Print("Отправить клиенту текст файла по пути " + Utils_.Brackets(request.arg));
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK, "", Utils.ReadAllText(new File(request.arg)));
|
||||
ReadFile();
|
||||
break;
|
||||
case SendFile:
|
||||
//нам пришел файл.
|
||||
Print("Получить от клиента файл, и распаковать его по пути " + Utils_.Brackets(request.arg));
|
||||
request.Unpack(); //распаковка идет по его аргу-пути назначения
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
SendFile();
|
||||
break;
|
||||
case ReceiveFile:
|
||||
Print("Отправить клиенту файл по пути " + Utils_.Brackets(request.arg));
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
File file = new File(request.arg);
|
||||
response.object = file.exists() ? Utils_.fileToBytes(file) : null;
|
||||
ReceiveFile();
|
||||
break;
|
||||
case Email:
|
||||
Print("Отправка сообщения электронной почты");
|
||||
Email((EmailMessage) request.object, request.arg);
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
break;
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="Главная база данных">
|
||||
case CheckObjectExistense:
|
||||
p = (Pair<Class, Object>) request.object;
|
||||
Print("Проверить существование объекта класса " + p.getKey().toString() + " с ключом " + p.getValue());
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = db.checkObjectExistense(p.getKey(), p.getValue());
|
||||
Email();
|
||||
break;
|
||||
case EditObject:
|
||||
DBObject new_object = (DBObject) request.object;
|
||||
Print("Редактировать объект " + new_object.getPK());
|
||||
db.UpdateWithCheck(new_object);
|
||||
afterEditAction(new_object);
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
break;
|
||||
case DeleteObject: //устарело. потом убрать. сейчас на это баг репорты повязаны.
|
||||
dbObject = (DBObject) request.object;
|
||||
Print("Удалить объект " + dbObject.getPK());
|
||||
db.DeleteWithCheck(dbObject);
|
||||
afterDeleteAction(dbObject);
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
EditObject();
|
||||
break;
|
||||
case GetObjectCopyByPK:
|
||||
p = (Pair<Class, Object>) request.object;
|
||||
Print("Получить копию объекта класса " + p.getKey().toString() + " по ключу " + p.getValue());
|
||||
dbObject = db.getObjectCopyByPK(p.getKey(), p.getValue());
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = dbObject;
|
||||
GetObjectCopyByPK();
|
||||
break;
|
||||
case GetObjectsCopiesByPK:
|
||||
Print("Получить список копий объектов по ключам");
|
||||
p = (Pair<Class, Object>) request.object;
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
response.object = db.getObjectsCopies(p.getKey(), (Vector<Object>) p.getValue());
|
||||
GetObjectsCopiesByPK();
|
||||
break;
|
||||
case PublishObject:
|
||||
PublishObject();
|
||||
@@ -266,15 +228,6 @@ public abstract class RepositoryServer<D extends Database> {
|
||||
case CloneObjectByPK:
|
||||
CloneObject();
|
||||
break;
|
||||
//</editor-fold>
|
||||
case EXIT:
|
||||
Print("ЗАВЕРШИТЬ РАБОТУ СЕРВЕРА");
|
||||
System.exit(0);
|
||||
break;
|
||||
case Ping:
|
||||
Print("Проверка активности сервера");
|
||||
Ping();
|
||||
break;
|
||||
default:
|
||||
Session();
|
||||
break;
|
||||
@@ -317,78 +270,7 @@ public abstract class RepositoryServer<D extends Database> {
|
||||
}
|
||||
}
|
||||
//--
|
||||
protected Database getDefaultDatabase() {
|
||||
return db;
|
||||
}
|
||||
//--
|
||||
private void PublishObject() throws Exception {
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
DBObject dbObject = (DBObject) request.object;
|
||||
beforePublishAction(dbObject);
|
||||
response.object = (Serializable) getDefaultDatabase().InsertS(dbObject).getPK();
|
||||
afterPublishAction(dbObject);
|
||||
}
|
||||
private void PublishObjects() throws Exception {
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
Vector<DBObject> objects = (Vector<DBObject>) request.object;
|
||||
Database database = getDefaultDatabase();
|
||||
for (DBObject dbObject : objects) {
|
||||
beforePublishAction(dbObject);
|
||||
response.object = (Serializable) database.InsertS(dbObject).getPK();
|
||||
afterPublishAction(dbObject);
|
||||
}
|
||||
}
|
||||
private void CloneObject() throws Exception {
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
Print("Дублировать объект по ключу");
|
||||
Pair<Class, Object> to_clone = (Pair<Class, Object>) request.object;
|
||||
Object pk = to_clone.getValue();
|
||||
if (db.getTable(to_clone.getKey()).containsKey(to_clone.getValue())) {
|
||||
riDBObject src = (riDBObject) db.getTable(to_clone.getKey()).get(to_clone.getValue());
|
||||
riDBObject dst = (riDBObject) to_clone.getKey().newInstance();
|
||||
dst.SynchronizeFields(src);
|
||||
//единственное отличие клона - текущий автор
|
||||
dst.description += " копия";
|
||||
String[] packed = request.arg.split("\n");
|
||||
dst.sender_name = packed[0];
|
||||
dst.sender_address = packed[1];
|
||||
db.Insert(dst);
|
||||
afterCloneAction(src, dst);
|
||||
response.object = (Serializable) dst.getPK();
|
||||
}
|
||||
}
|
||||
protected void afterCloneAction(riDBObject src, riDBObject dst) throws Exception {
|
||||
}
|
||||
protected void beforePublishAction(DBObject object) throws Exception {
|
||||
}
|
||||
protected void afterPublishAction(DBObject object) throws Exception {
|
||||
}
|
||||
protected void afterEditAction(DBObject object) throws Exception {
|
||||
}
|
||||
//------------------------------
|
||||
private void DeleteObjectByPK() throws Exception {
|
||||
Print("Удалить объект по ключу");
|
||||
Pair<Class, Object> to_delete = (Pair<Class, Object>) request.object;
|
||||
afterDeleteAction(getDefaultDatabase().DeleteByPK(to_delete.getKey(), to_delete.getValue()));
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
}
|
||||
private void DeleteObjectsByPK() throws Exception {
|
||||
Print("Удалить объекты по ключам");
|
||||
Pair<Class, Vector<Object>> to_delete = (Pair<Class, Vector<Object>>) request.object;
|
||||
Database database = getDefaultDatabase();
|
||||
for (Object object : to_delete.getValue()) {
|
||||
afterDeleteAction(database.DeleteByPK(to_delete.getKey(), object));
|
||||
}
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
}
|
||||
public void afterDeleteAction(DBObject object) throws Exception {
|
||||
}
|
||||
public void Ping() {
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK);
|
||||
}
|
||||
//--
|
||||
public abstract String getServerFileName();
|
||||
public abstract String getServerHomeName();
|
||||
void Ping() {}
|
||||
public boolean PingFromClient() {
|
||||
RepositoryPass pingPass = new RepositoryPass(this) {
|
||||
boolean success;
|
||||
@@ -429,4 +311,83 @@ public abstract class RepositoryServer<D extends Database> {
|
||||
};
|
||||
return pingPass.Do();
|
||||
}
|
||||
void ReadFile() throws Exception {
|
||||
response = new ServerExchangeUnit_2021(ServerCode.OK, "", Utils.ReadAllText(new File(request.arg)));
|
||||
}
|
||||
void ReceiveFile() throws Exception {
|
||||
File file = new File(request.arg);
|
||||
response.object = file.exists() ? Utils_.fileToBytes(file) : null;
|
||||
}
|
||||
void SendFile() throws Exception {
|
||||
request.Unpack(); //распаковка идет по его аргу-пути назначения
|
||||
}
|
||||
void Email() throws Exception {
|
||||
Email((EmailMessage) request.object, request.arg);
|
||||
}
|
||||
//----
|
||||
void PublishObject() throws Exception {
|
||||
DBObject dbObject = (DBObject) request.object;
|
||||
beforePublishAction(dbObject);
|
||||
response.object = (Serializable) db.InsertS(dbObject).getPK();
|
||||
afterPublishAction(dbObject);
|
||||
}
|
||||
void PublishObjects() throws Exception {
|
||||
Vector<DBObject> objects = (Vector<DBObject>) request.object;
|
||||
for (DBObject dbObject : objects) {
|
||||
beforePublishAction(dbObject);
|
||||
response.object = (Serializable) db.InsertS(dbObject).getPK();
|
||||
afterPublishAction(dbObject);
|
||||
}
|
||||
}
|
||||
void CloneObject() throws Exception {
|
||||
Pair<Class, Object> to_clone = (Pair<Class, Object>) request.object;
|
||||
Object pk = to_clone.getValue();
|
||||
if (db.getTable(to_clone.getKey()).containsKey(to_clone.getValue())) {
|
||||
riDBObject src = (riDBObject) db.getTable(to_clone.getKey()).get(to_clone.getValue());
|
||||
riDBObject dst = (riDBObject) to_clone.getKey().newInstance();
|
||||
dst.SynchronizeFields(src);
|
||||
//единственное отличие клона - текущий автор
|
||||
dst.description += " копия";
|
||||
String[] packed = request.arg.split("\n");
|
||||
dst.sender_name = packed[0];
|
||||
dst.sender_address = packed[1];
|
||||
db.Insert(dst);
|
||||
afterCloneAction(src, dst);
|
||||
response.object = (Serializable) dst.getPK();
|
||||
}
|
||||
}
|
||||
void GetObjectCopyByPK() throws Exception {
|
||||
Pair<Class, Object> p = (Pair<Class, Object>) request.object;
|
||||
DBObject dbObject = db.getObjectCopyByPK(p.getKey(), p.getValue());
|
||||
response.object = dbObject;
|
||||
}
|
||||
void GetObjectsCopiesByPK() throws Exception {
|
||||
Pair<Class, Object> p = (Pair<Class, Object>) request.object;
|
||||
response.object = db.getObjectsCopies(p.getKey(), (Vector<Object>) p.getValue());
|
||||
}
|
||||
void EditObject() throws Exception {
|
||||
DBObject new_object = (DBObject) request.object;
|
||||
db.UpdateWithCheck(new_object);
|
||||
afterEditAction(new_object);
|
||||
}
|
||||
void DeleteObjectByPK() throws Exception {
|
||||
Pair<Class, Object> to_delete = (Pair<Class, Object>) request.object;
|
||||
afterDeleteAction(db.DeleteByPK(to_delete.getKey(), to_delete.getValue()));
|
||||
}
|
||||
void DeleteObjectsByPK() throws Exception {
|
||||
Pair<Class, Vector<Object>> to_delete = (Pair<Class, Vector<Object>>) request.object;
|
||||
for (Object object : to_delete.getValue()) {
|
||||
afterDeleteAction(db.DeleteByPK(to_delete.getKey(), object));
|
||||
}
|
||||
}
|
||||
protected void afterCloneAction(riDBObject src, riDBObject dst) throws Exception {
|
||||
}
|
||||
protected void beforePublishAction(DBObject object) throws Exception {
|
||||
}
|
||||
protected void afterPublishAction(DBObject object) throws Exception {
|
||||
}
|
||||
protected void afterEditAction(DBObject object) throws Exception {
|
||||
}
|
||||
protected void afterDeleteAction(DBObject object) throws Exception {
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user