-// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include "SALOMESDS_Transaction.hxx"
#include "SALOMESDS_Exception.hxx"
#include "SALOMESDS_PickelizedPyObjServer.hxx"
+#include "SALOMESDS_PickelizedPyObjRdWrServer.hxx"
+#include "SALOMESDS_PickelizedPyObjRdExtServer.hxx"
+#include "SALOMESDS_TrustTransaction.hxx"
#include <sstream>
}
/*!
- TODO : To be implemented.
+ * no implementation it is not a bug !
*/
void TransactionVarCreate::notify()
{
_dsct->createRdExtVarInternal(_var_name,data2);
}
+void TransactionRdExtInitVarCreate::perform()
+{
+ SALOME::ByteVec data2;
+ FromVBToByteSeq(_data,data2);
+ _dsct->createRdExtInitVarInternal(_var_name,data2);
+}
+
void TransactionRdWrVarCreate::perform()
{
SALOME::ByteVec data2;
_dsct->createRdWrVarInternal(_var_name,data2);
}
+TransactionKillVar::TransactionKillVar(DataScopeServerTransaction *dsct, const std::string& varName):Transaction(dsct,varName)
+{
+}
+
+/*!
+ * TODO
+ */
+void TransactionKillVar::prepareRollBackInCaseOfFailure()
+{
+ checkVarExisting();
+ //BasicDataServer *bds(_dsct->retrieveVarInternal2(_var_name);
+ //bds->clone();
+}
+
+void TransactionKillVar::perform()
+{
+ _dsct->deleteVar(_var_name.c_str());
+}
+
+/*!
+ * TODO
+ */
+void TransactionKillVar::rollBack()
+{
+}
+
+/*!
+ * no implementation it is not a bug ! killVar is not an event.
+ */
+void TransactionKillVar::notify()
+{
+}
+
TransactionDictModify::TransactionDictModify(DataScopeServerTransaction *dsct, const std::string& varName):Transaction(dsct,varName),_varc(0)
{
_varc=checkVarExistingAndDict();
void TransactionAddKeyValue::notify()
{
- _dsct->notifyKey(_key,_value);
+ _dsct->notifyKey(getVarName(),_key,_value);
}
TransactionAddKeyValue::~TransactionAddKeyValue()
}
/*!
- * not implementation it is not a bug !
+ * no implementation it is not a bug !
*/
void TransactionRemoveKeyInVarErrorIfNotAlreadyExisting::notify()
{
{
Py_XDECREF(_key);
}
+
+TransactionMorphRdWrIntoRdOnly::TransactionMorphRdWrIntoRdOnly(DataScopeServerTransaction *dsct, const std::string& varName):Transaction(dsct,varName)
+{
+}
+
+SALOME::PickelizedPyObjRdWrServer_ptr TransactionMorphRdWrIntoRdOnly::getVar()
+{
+ SALOME::BasicDataServer_var obj(_dsct->retrieveVarInternal(_var_name.c_str()));
+ SALOME::PickelizedPyObjRdWrServer_ptr ret(SALOME::PickelizedPyObjRdWrServer::_narrow(obj));
+ if(CORBA::is_nil(ret))
+ {
+ std::ostringstream oss; oss << "TransactionMorphRdWrIntoRdOnly::getVar : var \"" << _var_name << "\" has not expected PickelizedPyObjRdWrServer type !";
+ throw Exception(oss.str());
+ }
+ return ret;
+}
+
+void TransactionMorphRdWrIntoRdOnly::prepareRollBackInCaseOfFailure()
+{
+ BasicDataServer *var(_dsct->retrieveVarInternal2(_var_name));
+ if(!var)
+ throw Exception("TransactionMorphRdWrIntoRdOnly::prepareRollBackInCaseOfFailure : Returned var is NULL !");
+ PickelizedPyObjRdWrServer *varc(dynamic_cast<PickelizedPyObjRdWrServer *>(var));
+ if(!varc)
+ throw Exception("TransactionMorphRdWrIntoRdOnly::prepareRollBackInCaseOfFailure : Returned var has not expected type !");
+}
+
+void TransactionMorphRdWrIntoRdOnly::perform()
+{
+ _dsct->moveStatusOfVarFromRdWrToRdOnly(_var_name);
+}
+
+void TransactionMorphRdWrIntoRdOnly::rollBack()
+{
+ _dsct->moveStatusOfVarFromRdOnlyToRdWr(_var_name);
+}
+
+/*!
+ * no implementation it is not a bug !
+ */
+void TransactionMorphRdWrIntoRdOnly::notify()
+{
+}
+
+TransactionMultiKeyAddSession::TransactionMultiKeyAddSession(DataScopeServerTransaction *dsct, const std::string& varName):Transaction(dsct,varName)
+{
+ _dsct->moveStatusOfVarFromRdExtOrRdExtInitToRdExtInit(_var_name);
+}
+
+void TransactionMultiKeyAddSession::addKeyValueInVarErrorIfAlreadyExistingNow(const SALOME::ByteVec& key, const SALOME::ByteVec& value)
+{
+ _dsct->checkVarExistingAndDict(_var_name);
+ TransactionAddKeyValueErrorIfAlreadyExisting ret(_dsct,_var_name,key,value);
+ {
+ bool mustRollback(true);
+ TrustTransaction t;
+ t.setTransaction(&ret,&mustRollback);
+ t.operate();
+ mustRollback=false;//important let this line to notify t that everything was OK
+ }
+ ret.notify();
+}
+
+/*!
+ * no implementation it is not a bug !
+ */
+void TransactionMultiKeyAddSession::prepareRollBackInCaseOfFailure()
+{
+}
+
+void TransactionMultiKeyAddSession::perform()
+{
+ _dsct->moveStatusOfVarFromRdExtOrRdExtInitToRdExt(_var_name);
+}
+
+/*!
+ * no implementation it is not a bug !
+ */
+void TransactionMultiKeyAddSession::rollBack()
+{
+}
+
+/*!
+ * no implementation it is not a bug !
+ */
+void TransactionMultiKeyAddSession::notify()
+{
+}
+