Salome HOME
add method NameChanged to update title name
[modules/kernel.git] / src / SALOMESDS / SALOMESDS_Transaction.cxx
index ca9bc32ee239973a6f449cbb05667e115dce6d17..6d85116f9fee64520fb26b862f522f7738202668 100644 (file)
@@ -1,4 +1,4 @@
-// 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
@@ -21,6 +21,9 @@
 #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>
 
@@ -64,7 +67,7 @@ void TransactionVarCreate::rollBack()
 }
 
 /*!
- TODO : To be implemented.
+ * no implementation it is not a bug !
  */
 void TransactionVarCreate::notify()
 {
@@ -84,6 +87,13 @@ void TransactionRdExtVarCreate::perform()
   _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;
@@ -91,6 +101,39 @@ void TransactionRdWrVarCreate::perform()
   _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();
@@ -128,7 +171,7 @@ void TransactionAddKeyValue::prepareRollBackInCaseOfFailure()
 
 void TransactionAddKeyValue::notify()
 {
-  _dsct->notifyKey(_key,_value);
+  _dsct->notifyKey(getVarName(),_key,_value);
 }
 
 TransactionAddKeyValue::~TransactionAddKeyValue()
@@ -169,7 +212,7 @@ void TransactionRemoveKeyInVarErrorIfNotAlreadyExisting::perform()
 }
 
 /*!
- * not implementation it is not a bug !
+ * no implementation it is not a bug !
  */
 void TransactionRemoveKeyInVarErrorIfNotAlreadyExisting::notify()
 {
@@ -179,3 +222,92 @@ TransactionRemoveKeyInVarErrorIfNotAlreadyExisting::~TransactionRemoveKeyInVarEr
 {
   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()
+{
+}
+