1 // Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author : Anthony GEAY (EDF R&D)
21 #ifndef __SALOMESDS_TRANSACTION_HXX__
22 #define __SALOMESDS_TRANSACTION_HXX__
24 #include "SALOMEconfig.h"
25 #include CORBA_SERVER_HEADER(SALOME_SDS)
27 #include "SALOMESDS_Defines.hxx"
28 #include "SALOMESDS_Exception.hxx"
29 #include "SALOMESDS_DataServerManager.hxx"
30 #include "SALOMESDS_Auto.hxx"
37 class PickelizedPyObjServer;
38 class PickelizedPyObjRdWrServer;
39 class PickelizedPyObjRdExtServer;
41 class SALOMESDS_EXPORT Transaction : public virtual POA_SALOME::Transaction, public POAHolder
44 Transaction(DataScopeServerTransaction *dsct, const std::string& varName):_dsct(dsct),_var_name(varName) { if(!_dsct) throw Exception("Transaction constructor error !"); }
45 std::string getVarName() const { return _var_name; }
46 void checkVarExisting() { _dsct->checkExistingVar(_var_name); }
47 void checkNotAlreadyExisting() { _dsct->checkNotAlreadyExistingVar(_var_name); }
48 PortableServer::POA_var getPOA() const { return _dsct->getPOA(); }
49 virtual void prepareRollBackInCaseOfFailure() = 0;
50 virtual void perform() = 0;
51 virtual void rollBack() = 0;
52 virtual void notify() = 0;
53 virtual ~Transaction();
55 static void FromByteSeqToVB(const SALOME::ByteVec& bsToBeConv, std::vector<unsigned char>& ret);
56 static void FromVBToByteSeq(const std::vector<unsigned char>& bsToBeConv, SALOME::ByteVec& ret);
58 DataScopeServerTransaction *_dsct;
59 std::string _var_name;
62 class TransactionVarCreate : public Transaction
65 TransactionVarCreate(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& constValue);
66 void prepareRollBackInCaseOfFailure() override;
67 void rollBack() override;
68 void notify() override;
70 std::vector<unsigned char> _data;
73 class TransactionRdOnlyVarCreate : public TransactionVarCreate
76 TransactionRdOnlyVarCreate(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& constValue):TransactionVarCreate(dsct,varName,constValue) { }
80 class TransactionRdExtVarCreate : public TransactionVarCreate
83 TransactionRdExtVarCreate(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& constValue):TransactionVarCreate(dsct,varName,constValue) { }
84 void perform() override;
87 class TransactionRdExtVarFreeStyleCreate : public TransactionRdExtVarCreate
90 TransactionRdExtVarFreeStyleCreate(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& constValue, const char *compareFuncContent);
91 void prepareRollBackInCaseOfFailure() override;
92 void rollBack() override;
93 void perform() override;
95 bool _null_rollback = false;
96 std::string _cmp_func_content;
97 SALOME::AutoPyRef _cmp_func;
100 class TransactionRdExtInitVarCreate : public TransactionVarCreate
103 TransactionRdExtInitVarCreate(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& constValue):TransactionVarCreate(dsct,varName,constValue) { }
104 void perform() override;
107 class TransactionRdWrVarCreate : public TransactionVarCreate
110 TransactionRdWrVarCreate(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& constValue):TransactionVarCreate(dsct,varName,constValue) { }
111 void perform() override;
114 class TransactionKillVar : public Transaction
117 TransactionKillVar(DataScopeServerTransaction *dsct, const std::string& varName);
118 void prepareRollBackInCaseOfFailure() override;
119 void perform() override;
120 void rollBack() override;
121 void notify() override;
124 class PickelizedPyObjServer;
126 class TransactionDictModify : public Transaction
129 TransactionDictModify(DataScopeServerTransaction *dsct, const std::string& varName);
130 PickelizedPyObjServer *checkVarExistingAndDict() { return _dsct->checkVarExistingAndDict(_var_name); }
131 void prepareRollBackInCaseOfFailure() override;
132 void rollBack() override;
134 std::string _zeDataBefore;
135 PickelizedPyObjServer *_varc;
138 class TransactionAddKeyValue : public TransactionDictModify
141 TransactionAddKeyValue(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& key, const SALOME::ByteVec& value);
142 void prepareRollBackInCaseOfFailure() override;
143 void notify() override;
144 ~TransactionAddKeyValue();
150 class TransactionAddKeyValueHard : public TransactionAddKeyValue
153 TransactionAddKeyValueHard(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& key, const SALOME::ByteVec& value);
154 void perform() override;
157 class TransactionAddKeyValueErrorIfAlreadyExisting : public TransactionAddKeyValue
160 TransactionAddKeyValueErrorIfAlreadyExisting(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& key, const SALOME::ByteVec& value);
161 void perform() override;
164 class TransactionRemoveKeyInVarErrorIfNotAlreadyExisting : public TransactionDictModify
167 TransactionRemoveKeyInVarErrorIfNotAlreadyExisting(DataScopeServerTransaction *dsct, const std::string& varName, const SALOME::ByteVec& key);
168 void perform() override;
169 void notify() override;
170 ~TransactionRemoveKeyInVarErrorIfNotAlreadyExisting();
175 class TransactionMorphRdWrIntoRdOnly : public Transaction, public virtual POA_SALOME::TransactionRdWrAccess
178 TransactionMorphRdWrIntoRdOnly(DataScopeServerTransaction *dsct, const std::string& varName);
180 SALOME::PickelizedPyObjRdWrServer_ptr getVar();
182 void prepareRollBackInCaseOfFailure();
183 void perform() override;
184 void rollBack() override;
185 void notify() override;
189 * This transaction switch from RdExt to RdExtInit in constructor and when perform called RdExtInit to RdExt.
191 class TransactionMultiKeyAddSession : public Transaction, public virtual POA_SALOME::TransactionMultiKeyAddSession
194 TransactionMultiKeyAddSession(DataScopeServerTransaction *dsct, const std::string& varName);
195 public://remotely callable
196 void addKeyValueInVarErrorIfAlreadyExistingNow(const SALOME::ByteVec& key, const SALOME::ByteVec& value);
198 void prepareRollBackInCaseOfFailure() override;
199 void perform() override;
200 void rollBack() override;
201 void notify() override;