View Issue Details

IDProjectCategoryView StatusLast Update
0030773Open CASCADEOCCT:Application Frameworkpublic2021-12-17 18:41
ReportermpvAssigned Toabv 
PrioritynormalSeverityfeature 
Status closedResolutionfixed 
Product Version7.3.0 
Target Version7.5.0Fixed in Version7.5.0 
Summary0030773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms
DescriptionCurrently most of the medium and big size-applications that use OCAF data structures covers them by higher-level interfaces. They allow involving application-specific names, relations between data, some simple logic over the basis OCAF components.

For an example: there may be “Color” class that covers the array of integer attribute (RGB). It manages OCAF data by reference to attribute of to the label. It may:
• Provide application-specific access to the data: methods ”blue”, “setBlue”, “isWhite”, etc.
• Support references between objects. Like, this label may contain not array attribute, but reference to other array or object or pointer to external, not OCAF object. Method “blue” and others may correctly manage this.
• To cash some data based on persistent values to avoid too often computation. Like “intensity” by RGB.

Disadvantage of such approach is that the interface classes hardly can be persistent. Normally interface is created on the fly by demand and cannot live longer than a transaction. This approach does not allow the cashing, keeping some objects in fields and controlling the data modification.

If objects are more persistent, there appeared a problem with update of these objects on undo/redo, abort and load/save operations. Modification of OCAF data may be done outside of related objects, so it breaks the object-oriented approach and an idea of encapsulation.

Currently here appeared a problem that it is required to create interface-objects by some data of TDF_Attribute. Low level OCAF entities (labels and/or attributes) in many cases become arguments of methods for creation, searching or iteration of high-level interfaces. It is necessary anyway to create some kind of factory that creates interface-objects (at least on load of the document) by the presented OCAF structure. Another approach may be to inherit the OCAF attributes and somehow control the data change (AfterUndo and other similar methods), but this requires complicated development to implement persistent mechanism for them (in general, at least for 2 standard formats supported) and other things. With the current way of implementation it is simple code-duplication.

In this improvement it is proposed to allow developer to inherit existing attributes if the same persistent fileds are used. All methods that allow controlling the data model changes or getting some callbacks may be overridden in successor.
Development of persistence mechanism for such attributes is minimal. In the example above for “Color” class it will be enough to inherit “TDataStd_IntegerArray”, so, functionality of “TDataStd_IntegerArray” will be used to store/restore all the needed data. Minimal requirement is to redefine NewEmpty method (ID and GetID to have different GUID, other methods for more complicated behavior).

To re-create such attributes on load of the file, there must be a special factory. It is proposed to add it to the TDF_Attribute.hxx file, so, no additional includes will be required to make a derived attribute. A special macro will register a new derived attributes in the factory (it may be callled instead of standard Handle macro definition: IMPLEMENT_STANDARD_RTTIEXT).

The main benefit for OCCT is that derived attributes contain only interfaces and new GUIDs (and dynamic type) and require no classes in persistent drivers (like TDataStd_Comment may inherit TDataStd_Name and the following drivers become obsolete: BinMDataStd_CommentDriver, XmlMDataStd_CommentDriver, part of StdLPersistent_Value).

This improvement should not change both present formats Bin and XML documents. THe obsolete Standard scheme is not changed at all.
Steps To ReproduceThe following tests are added:
caf basic F4
caf basic F5
TagsNo tags attached.
Test case numberNot required

Relationships

related to 0025681 closedbugmaster Community Application Framework - Unicode data storage in XML or binary format 

Activities

git

2019-06-06 18:24

administrator   ~0084935

Branch CR30773 has been created by mpv.

SHA-1: 3468f571674dbc9e876bad577980f70d0465c126


Detailed log of new commits:

Author: mpv
Date: Thu Jun 6 18:23:34 2019 +0300

    30773: To allow to inherit existing attributes to reuse persistence mechanisms
    
    Added possibility to inherit attributes, supported by Deriver Attributes factory in TDF_Attribute, macros and DerivedDriver instance in the Bin and XML data storage.
    Removed drivers in Bin and XML schemes for derived attributes.

git

2019-06-07 16:28

administrator   ~0084947

Branch CR30773 has been updated by mpv.

SHA-1: 2540bde130ea87e5a83646fd8c9752066e58c88a


Detailed log of new commits:

Author: mpv
Date: Fri Jun 7 16:28:07 2019 +0300

    30773: To allow to inherit existing attributes to reuse persistence mechanisms
    
    # Correction of compilation warnings

git

2019-06-11 09:49

administrator   ~0084981

Branch CR30773_2 has been created by mpv.

SHA-1: 7f21b051d965bea56dfeea4da88cbb08766454d7


Detailed log of new commits:

Author: mpv
Date: Tue Jun 11 09:46:16 2019 +0300

    30773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms

mpv

2019-06-13 10:20

developer   ~0085025

Solution is in CR30773_2 branch: many drivers in Bin and Xml persistence schemes are removed due to duplication of functionality of drivers, or fully empty drivers methods.

No regressions are detected:
http://occt-tests/CR30773_2-CR30773_2-MPV-Products/Debian80-64/diff_summary.html
http://occt-tests/CR30773_2-CR30773_2-MPV-OCCT/Windows-64-VC14/diff_summary.html

Please, review.

szy

2019-06-14 12:46

manager   ~0085050

Remarks.
1.IntegerDriver (Bin & Xml) modification
if (!ok) {
      theSource.SetPosition(aPos);
      anAtt->SetID(TDataStd_Integer::GetID());
      ok = Standard_True;
    } else ...
It means that expected predefined attribute (before TDataStd_Integer).
Removing line anAtt->SetID(...) is dangerous as it leads to not initialized field.
It should be processed taking into account as parent as derived types.

2.It is not desirable to use static maps (DERIVED & DERIVED_TYPES) as it blocks possibility to use it in multi-threading application.
It would be better to use another solution with dynamic creation. Let's discuss it.

szy

2019-06-14 12:47

manager   ~0085051

See my comments.

git

2019-06-14 15:39

administrator   ~0085055

Branch CR30773_2 has been updated by mpv.

SHA-1: 1056ba2343c05ec33814341474943fe6f188032b


Detailed log of new commits:

Author: mpv
Date: Fri Jun 14 15:39:03 2019 +0300

    30773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms
    
    Protection for the multi-threaded open/save of documents with different resources.

mpv

2019-06-17 17:14

developer   ~0085093

It is discussed that the first note is not needed to implement: GUID is defined in the constructor of the attributes.

The second note is fixed in branch CR30773_2 : access to the map is covered by a mutex.

http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_2-CR30773_2-MPV-OCCT-Windows-64-VC14-opt-test-compare/4/

http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_2-CR30773_2-MPV-OCCT-Debian80-64-opt-test-compare/7/

Please, review.

szy

2019-06-19 10:37

manager   ~0085138

Reviewed.

bugmaster

2019-06-19 20:12

administrator   ~0085151

Combination -
OCCT branch : CR30773_2
master SHA - 1056ba2343c05ec33814341474943fe6f188032b
d67d4b811012eef8913d3c535c29654d0acf3c4c
Products branch : CR30773_2 SHA - 13155ea25080dfb52eff0da21e2a40bed0df94a2
was compiled on Linux, MacOS and Windows platforms and tested in optimize mode.

Number of compiler warnings:
No new/fixed warnings

Regressions/Differences/Improvements:
No regressions/differences

CPU differences:
Debian80-64:
OCCT
Total CPU difference: 16189.080000000034 / 16165.440000000055 [+0.15%]
Products
Total CPU difference: 10479.060000000041 / 10470.220000000043 [+0.08%]
Windows-64-VC14:
OCCT
Total CPU difference: 17615.328125 / 17617.515625 [-0.01%]
Products
Total CPU difference: 12065.65625 / 12110.78125 [-0.37%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention

git

2019-06-20 15:02

administrator   ~0085179

Branch CR30773_2 has been updated by mpv.

SHA-1: 25cdd1ed800fbef952d5f5d7f2d2e75ffea2c3b8


Detailed log of new commits:

Author: mpv
Date: Thu Jun 20 15:01:15 2019 +0300

    30773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms
    
    # fix of the Ubuntu-1604-64-opt warnings

kgv

2019-06-20 15:51

developer   ~0085182

Last edited: 2019-06-20 15:53

30773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms

The patch description which is supposed to be within commit description is missing.

+  Standard_EXPORT void AddDerivedDriver (Handle(TDF_Attribute) theInstance);
...
+  BinMDF_DerivedDriver(const Handle(TDF_Attribute) theDerivative, const Handle(BinMDF_ADriver) theBaseDriver);
...
+  Standard_EXPORT bool RegisterAttribute(Handle(TDF_Attribute) theDerived,

const Handle(TDF_Attribute)&
const Handle(BinMDF_ADriver)&

--- /dev/null
+++ b/src/BinMDF/BinMDF_DerivedDriver.lxx
--- /dev/null
+++ b/src/XmlMDF/XmlMDF_DerivedDriver.lxx

Please avoid creation of new .lxx files for inlined functions having small size.
Also prefer inlining at declaration for compact functions.

--- a/src/BinMDataStd/BinMDataStd_IntegerDriver.cxx
+++ b/src/BinMDataStd/BinMDataStd_IntegerDriver.cxx
@@ -65,7 +65,6 @@ Standard_Boolean BinMDataStd_IntegerDriver::Paste
        ok = theSource >> aGuid;        
        if (!ok) {
          theSource.SetPosition(aPos);    
-         anAtt->SetID(TDataStd_Integer::GetID());

Is it related to the patch?

+    if (DERIVED.IsBound (theType))
+      return DERIVED (theType);

Seek()/Find().

+//! Defines implementation of Handle method and registers the derived attribute
+#define IMPLEMENT_DERIVED_ATTRIBUTE(Class, Base) \
+  IMPLEMENT_STANDARD_RTTIEXT(Class, Base) \
+  static bool TDF_DERIVED_CONTAINER(TDF_DerivedAttribute::RegisterAttribute(new Class()));

This mechanism will lead to problems on using OCCT built as static libraries.

+  //! Returns the current message driver of this driver
+  const Handle(Message_Messenger)& MessageDriver() const;

I suppose Standard_EXPORT is missing.

+inline Handle(Standard_Type) XmlMDF_ADriverTable::AddDerivedDriver (Standard_CString theDerivedType)

What inline is supposed to mean here?

+class XmlMDF_DerivedDriver : public XmlMDF_ADriver {

newline before {

git

2019-07-09 16:16

administrator   ~0085514

Branch CR30773_3 has been created by mpv.

SHA-1: c638611f5d6065172d911de2857ee98a48d641a1


Detailed log of new commits:

Author: mpv
Date: Tue Jul 9 16:15:08 2019 +0300

    0030773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms
    
    Added possibility to inherit existing attributes if the same persistent fields are used. All methods that allow controlling the data model changes or getting some callbacks may be overridden in successor. They may have same GUIDs as a base class or new ones.
    
    Special macros IMPLEMENT_DERIVED_ATTRIBUTE and IMPLEMENT_DERIVED_ATTRIBUTE_WITH_TYPE must be used instead of standard Handle macro definition IMPLEMENT_STANDARD_RTTIEXT to register new derived attributes.
    
    Using this improvement several existing attributes from TDataStd, TDataXtd and XCAFDoc packages become inherited from other base attribute-classes. XML and Bin drivers of these attributes are removed.
    
    This improvement does not change both present formats Bin and XML documents. The obsolete Standard scheme is not changed at all.

mpv

2019-07-09 18:25

developer   ~0085529

  Dear KGV,

All remarks are fixed except the following:

    + Standard_EXPORT bool RegisterAttribute(Handle(TDF_Attribute) theDerived,
It should not receive references to "Handle" because it is called with attributes, created "on the fly".

    - anAtt->SetID(TDataStd_Integer::GetID());
    Is it related to the patch?
Yes. For now correct GUID is assigned in constructor of TDataStd_Integer and this line prevents from creation of derived attributes with different GUIDs (it is already discussed with SZY in comments 85050 and 85093)

    + static bool TDF_DERIVED_CONTAINER(TDF_DerivedAttribute::RegisterAttribute(new Class()));
    This mechanism will lead to problems on using OCCT built as static libraries.
In TDF_Attribute.cxx all global variables are covered by static methods now. So, there should not be problem with order of global variables initialization in static mode of link.


Solution is in CR30773_3 branch

No regressions are detected:
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_3-CR30773_3-MPV-OCCT-Debian80-64-opt-test-compare/1/
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_3-CR30773_3-MPV-OCCT-Windows-64-VC14-opt-test-compare/1/

Please, review.

git

2019-07-18 13:07

administrator   ~0085758

Branch CR30773_3 has been updated by kgv.

SHA-1: 72a52f3bab11af12b10fd39661b81a7897377df2


Detailed log of new commits:

Author: kgv
Date: Thu Jul 18 13:05:23 2019 +0300

    # remarks

git

2019-07-18 14:01

administrator   ~0085763

Branch CR30773_3 has been updated forcibly by kgv.

SHA-1: 25e0507a1c5d93e24cf6cddc0380862b12422478

kgv

2019-07-19 09:44

developer   ~0085779

Last edited: 2019-07-19 09:46

I have pushed some corrections to CR30773_3.
Apart from this, the problem of usage of static library still not handled by the patch.

The problem has been already indicated by GCC warnings which you have just suppressed:
+#if (defined(__GNUC__))
+  // gcc emits -Wunused-variable but TDF_DERIVED_CONTAINER variable is declared for RegisterAttribute call only
+  #pragma GCC diagnostic push
+  #pragma GCC diagnostic ignored "-Wunused-variable"
+#endif
+
+//! Defines implementation of Handle method and registers the derived attribute
+#define IMPLEMENT_DERIVED_ATTRIBUTE(Class, Base) \
+  IMPLEMENT_STANDARD_RTTIEXT(Class, Base) \
+  static bool TDF_DERIVED_CONTAINER(TDF_DerivedAttribute::RegisterAttribute(new Class()));

Defining a global variable which is never used explicitly in code allows linker to completely remove their construction from static library when using default linkage options.

In addition, unconditional initialization of these maps while loading DLL is also undesired, because its slows down application startup even in case, when OCAF is not used / not always used by application. Moreover, though, such kind of self-initialization looks very compact, it complicates understanding of where these structures are actually used.

Therefore, the preferred solution is implementing a dedicated initializer(s) which are explicitly called before they will be used, where each derived attribute is explicitly registered.

Example of this initialization style are global variables defined via Interface_Static interface - see STEPCAFControl_Controller::Init(), STEPControl_Controller::Init(), IGESControl_Controller::Init() calls.

git

2019-08-01 13:37

administrator   ~0085965

Branch CR30773_3 has been updated by mpv.

SHA-1: 94cf40cfb67de7c3e1988c0f9e16f0785da06713


Detailed log of new commits:

Author: mpv
Date: Thu Aug 1 13:35:02 2019 +0300

    # reaction to remarks

mpv

2019-08-01 13:46

developer   ~0085967

Ok, I have tried to satisfy the last request:

- Global variable is now used by NewEmpty method, so, no warnings, no remove possibility by constructor

- Slowing down the application on launch is minimized: no attribute-constructors are called, no map is filled. Just list, filled by simple pointers, few bytes per attribute.

- The needed maps are filled by "Initialize" method, like in Interface_Static. It is called by the first demand: on document open or save.

- Filling (resize) of maps is normally performed only once per application run-time. So, probability to keep invalid Handle referenced to destroyed map is minimized, near to 0 (this is to comment "not thread-safe when resizing the map" in TDF_DerivedAttribute.cxx)

mpv

2019-08-21 09:39

developer   ~0086379

No regressions now:
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_3-CR30773_3-MPV-OCCT-Windows-64-VC14-opt-test-compare/3/
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_3-CR30773_3-MPV-OCCT-Debian80-64-opt-test-compare/3/
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_3-CR30773_3-MPV-Products-Windows-64-VC14-opt-test-compare/3/
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_3-CR30773_3-MPV-Products-Debian80-64-opt-test-compare/3/

git

2019-09-02 14:26

administrator   ~0086613

Branch CR30773_4 has been created by kgv.

SHA-1: bc03a2ecc61d832c33fee9cffb1241c2214506c7


Detailed log of new commits:

Author: mpv
Date: Tue Jul 9 16:15:08 2019 +0300

    0030773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms
    
    Added possibility to inherit existing attributes if the same persistent fields are used. All methods that allow controlling the data model changes or getting some callbacks may be overridden in successor. They may have same GUIDs as a base class or new ones.
    
    Special macros IMPLEMENT_DERIVED_ATTRIBUTE and IMPLEMENT_DERIVED_ATTRIBUTE_WITH_TYPE must be used instead of standard Handle macro definition IMPLEMENT_STANDARD_RTTIEXT to register new derived attributes.
    
    Using this improvement several existing attributes from TDataStd, TDataXtd and XCAFDoc packages become inherited from other base attribute-classes. XML and Bin drivers of these attributes are removed.
    
    This improvement does not change both present formats Bin and XML documents. The obsolete Standard scheme is not changed at all.

kgv

2019-09-02 15:40

developer   ~0086616

Last edited: 2019-09-02 15:40

+const Handle(TDF_Attribute) & TDF_DerivedAttribute::Attribute (Standard_CString theType)
+{
+  Standard_Mutex::Sentry aSentry (TDF_DerivedAttributeGlobals::Mutex());
+  Initialize();
+  if (const Handle(TDF_Attribute)* aResult = TDF_DerivedAttributeGlobals::Attributes().Seek (theType))
+  {
+    return *aResult; /// TODO - not thread-safe when resizing the map
+  }
+
+  static const Handle(TDF_Attribute) aNullAttrib;
+  return aNullAttrib;
+}

Any ideas for these TODOs?

git

2019-09-02 17:29

administrator   ~0086626

Branch CR30773_4 has been updated by mpv.

SHA-1: 4328f91feeeb933999b5a93ab39fb9886f4d41b0


Detailed log of new commits:

Author: mpv
Date: Mon Sep 2 17:26:28 2019 +0300

    # Apply of TODOs

mpv

2019-09-03 08:41

developer   ~0086676

The patch is checked "ok":
http://occt-tests/CR30773_4-CR30773_3-MPV-OCCT/Windows-64-VC14/diff_summary.html
http://occt-tests/CR30773_4-CR30773_3-MPV-OCCT/Debian80-64/diff_summary.html

kgv

2019-09-03 09:13

developer   ~0086677

There is a compiler warning on android-armeabi-v7a-gcc:
                 from occt.git\src\TDataXtd\TDataXtd.cxx:18:
occt.git/src/TDF/TDF_DerivedAttribute.hxx:28:1: warning: multi-line comment [-Wcomment]
 //static Handle(TDF_Attribute) NewDerived();  \
 ^

git

2019-09-03 09:22

administrator   ~0086678

Branch CR30773_4 has been updated by mpv.

SHA-1: fa65198a01ce469cd1a5f52c12239ea54c90bc3e


Detailed log of new commits:

Author: mpv
Date: Tue Sep 3 09:19:44 2019 +0300

    # Removed useless comment

mpv

2019-09-03 09:23

developer   ~0086679

Fixed

abv

2019-09-06 14:39

manager   ~0086882

There are two remarks:

1. Possible problem in client code due to changed inheritance.

Current implementation changes inheritance relationships between existing attributes, which can be dangerous. For instance, consider this code (taken from DDocStd_MTMCommands.cxx, function XAttributeValue; similar code exists in XDEDRAW.cxx):

  else if ( att->IsKind(STANDARD_TYPE(TDataStd_Name)) )
  {
    Handle(TDataStd_Name) val = Handle(TDataStd_Name)::DownCast ( att );
    TCollection_AsciiString str ( val->Get(), '?' );
    di << str.ToCString();
  }
  else if ( att->IsKind(STANDARD_TYPE(TDataStd_Comment)) )
  {
    Handle(TDataStd_Comment) val = Handle(TDataStd_Comment)::DownCast ( att );
    TCollection_AsciiString str ( val->Get(), '?' );
    di << str.ToCString();
  }


The second "if" will never be visited since TDataStd_Comment now inherits TDataStd_Name. This kind of errors is very difficult to diagnose, thus better to avoid this possibility. I propose adding specific attributes (possibly abstract) for use as base classes for derived attributes, instead of reusing existing ones.

2. Tricky mechanism of enabling persistence for derived attributes

The proposed implementation is quite complicated, for the sake of automatism (you use two macros in attribute definition and can expect it to be supported in persistence).
However, this is not explicit and may not always work as expected.
In particular, this automatism still requires proper initialization of drivers of the base attribute.

Would not it be more straighforward and convenient just to allow registering a persistence driver for the derived class using driver class of the base class?
In that case we would keep existing approach with explicit initialization of driver tables listing all types, instead of mixed one (base drivers shall be explicitly added while derived get added automatically).

For instance, in BinMDataStd::AddDrivers() instead of

    theDriverTable->AddDriver (new BinMDataStd_CommentDriver (theMsgDriver) );

we would put (assuming that TDataStd_Name inherits TDataStd_Comment):

    theDriverTable->AddDriver (new BinMDataStd_NameDriver (theMsgDriver, new TDataStd_Comment) );

The driver would use instance of the derived attribute to get type name of the attribute class and create new instances.

Please consider this possibility.

mpv

2019-09-06 15:53

developer   ~0086893

Ok for the first remark: I will create the abstract attribute classes that will be used as base classes for all attributes which inherit other attributes currently (ok, some more entities on OCCT, I wanted to avoid).

For the second remark: this will destroy the simple mechanism I wanted to create. If we do this, this improvement may be erased, since in will be the same complexity as the current mechanism of creation of custom attributes, so, useless.

git

2020-05-14 22:49

administrator   ~0092127

Branch CR30773_5 has been created by mpv.

SHA-1: ace139800a1a27e4179b61b9b5d5aa4b4d25bc9b


Detailed log of new commits:

Author: mpv
Date: Thu May 14 22:12:52 2020 +0300

    0030773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms
    
    Added possibility to inherit existing attributes if the same persistent fields are used. All methods that allow controlling the data model changes or getting some callbacks may be overridden in successor. They may have same GUIDs as a base class or new ones.
    
    Special macros IMPLEMENT_DERIVED_ATTRIBUTE and IMPLEMENT_DERIVED_ATTRIBUTE_WITH_TYPE must be used instead of standard Handle macro definition IMPLEMENT_STANDARD_RTTIEXT to register new derived attributes.
    
    Using this improvement several existing attributes from TDataStd, TDataXtd and XCAFDoc packages become inherited from other base attribute-classes. XML and Bin drivers of these attributes are removed. New base attribute classes are added: TDataStd_GenericEmpty and TDataStd_GenericExtString.
    
    This improvement does not change both present formats Bin and XML documents. The obsolete Standard scheme is not changed at all.

git

2020-05-15 15:30

administrator   ~0092156

Branch CR30773_5 has been updated forcibly by mpv.

SHA-1: 075cce71d3889ce6d72b8b34a376abff29d68429

git

2020-05-18 13:46

administrator   ~0092231

Branch CR30773_5 has been updated by mpv.

SHA-1: 4cb2efae6c0f9ecb6bee0b5d57e10751bf35268d


Detailed log of new commits:

Author: mpv
Date: Mon May 18 13:47:33 2020 +0300

    # Eliminate MacOS warnings

git

2020-06-19 23:10

administrator   ~0092586

Branch CR30773_6 has been created by mpv.

SHA-1: 77679c3695b833ace57b8f1680d615311d8647e0


Detailed log of new commits:

Author: mpv
Date: Fri Jun 19 23:12:17 2020 +0300

    0030773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms
    
    Added possibility to inherit existing attributes if the same persistent fields are used. All methods that allow controlling the data model changes or getting some callbacks may be overridden in successor. They may have same GUIDs as a base class or new ones.
    
    Special macros IMPLEMENT_DERIVED_ATTRIBUTE and IMPLEMENT_DERIVED_ATTRIBUTE_WITH_TYPE must be used instead of standard Handle macro definition IMPLEMENT_STANDARD_RTTIEXT to register new derived attributes.
    
    Using this improvement several existing attributes from TDataStd, TDataXtd and XCAFDoc packages become inherited from other base attribute-classes. XML and Bin drivers of these attributes are removed. New base attribute classes are added: TDataStd_GenericEmpty and TDataStd_GenericExtString.
    
    This improvement does not change both present formats Bin and XML documents. The obsolete Standard scheme is not changed at all.

mpv

2020-06-22 12:59

developer   ~0092645

Fixes are located in CR307734_6 of OCCT and PRODUCTS.

TDataStd_GenericEmpty and TDataStd_GenericExtString classes are added as intermediate attributes, base of no-fields attributes and one TCollection_ExtendedString field attribute.

mpv

2020-06-22 13:40

developer   ~0092650

Tests were passed:
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_6-CR30773_6-MPV-OCCT-Windows-64-VC14-opt-test-compare/2/
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_6-CR30773_6-MPV-OCCT-Debian80-64-opt-test-compare/2/
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_6-CR30773_6-MPV-Products-Windows-64-VC14-opt-test-compare/2/
http://vm-jenkins-test-12.nnov.opencascade.com:8080/job/CR30773_6-CR30773_6-MPV-Products-Debian80-64-opt-test-compare/2/

mpv

2020-09-09 10:57

developer   ~0094287

Dear VRO, could you review this issue.

vro

2020-09-10 15:23

developer   ~0094379

Reviewed. Mikhail, there were a lot of changes in OCAF recently. What do you think about writing of a short tutorial with several simple examples (like the Color attribute from your description)?

kgv

2020-09-10 15:29

developer   ~0094381

+
+//! Defines implementation of Handle method and registers the derived attribute
+#define IMPLEMENT_DERIVED_ATTRIBUTE_WITH_TYPE(Class, Base, NameSpace, TypeName) \

Mikhail, this documentation style will not be handled correctly by Doxygen.
Could you please use @def tag for documenting new macros?

+
+class TDF_DerivedAttribute

Looks like description of the class has been lost.

mpv

2020-09-10 15:33

developer   ~0094383

In the current implementation at least internal goal is achieved: remove duplicated drivers files from OCCT.
I agree that we could extend documentation sometimes, but I would prefer to do it after we add some new attribute in this advanced way, or use the proposed mechanism in some external development.

For bugmaster:
OCCT branch: CR30773_6
Products branch: CR30773_6
Is it worth to rebase these branches on top of origin/WEEK-37 (since they are quite old)?

git

2020-09-11 16:38

administrator   ~0094479

Branch CR30773_6 has been updated by mpv.

SHA-1: 8ca4374bf859a6e75946e5c137537ea534f7aa9b


Detailed log of new commits:

Author: mpv
Date: Fri Sep 11 16:41:26 2020 +0300

    # COmments are added.

bugmaster

2020-09-13 11:06

administrator   ~0094547

Combination -
OCCT branch : IR-2020-09-11
master SHA - d1b25684e9402d995dafec22fb98f83957d5fb76
a206de37fbfa0bf71bd534ae47192bbec23b8522
Products branch : IR-2020-09-11 SHA - a7e55a291cf6642cb4af945a999deeeb5f91272a
was compiled on Linux, MacOS and Windows platforms and tested in optimize mode.

Number of compiler warnings:
No new/fixed warnings

Regressions/Differences/Improvements:
No regressions/differences

CPU differences:
Debian80-64:
OCCT
Total CPU difference: 17333.360000000142 / 17325.800000000123 [+0.04%]
Products
Total CPU difference: 12056.720000000096 / 12079.64000000011 [-0.19%]
Windows-64-VC14:
OCCT
Total CPU difference: 18817.921875 / 18792.46875 [+0.14%]
Products
Total CPU difference: 13294.09375 / 13274.75 [+0.15%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention

git

2020-09-13 11:44

administrator   ~0094566

Branch CR30773_6 has been deleted by inv.

SHA-1: 8ca4374bf859a6e75946e5c137537ea534f7aa9b

git

2020-09-13 11:47

administrator   ~0094610

Branch CR30773_5 has been deleted by inv.

SHA-1: 4cb2efae6c0f9ecb6bee0b5d57e10751bf35268d

git

2020-09-13 11:47

administrator   ~0094623

Branch CR30773_4 has been deleted by inv.

SHA-1: fa65198a01ce469cd1a5f52c12239ea54c90bc3e

git

2020-09-13 11:48

administrator   ~0094630

Branch CR30773_3 has been deleted by inv.

SHA-1: 94cf40cfb67de7c3e1988c0f9e16f0785da06713

git

2020-09-13 11:48

administrator   ~0094632

Branch CR30773_2 has been deleted by inv.

SHA-1: 25cdd1ed800fbef952d5f5d7f2d2e75ffea2c3b8

git

2020-09-13 11:48

administrator   ~0094634

Branch CR30773 has been deleted by inv.

SHA-1: 2540bde130ea87e5a83646fd8c9752066e58c88a

Related Changesets

occt: master c99ad5d7

2020-06-19 20:12:17

abv


Committer: abv Details Diff
0030773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms

Added possibility to inherit existing attributes if the same persistent fields are used. All methods that allow controlling the data model changes or getting some callbacks may be overridden in successor. They may have same GUIDs as a base class or new ones.

Special macros IMPLEMENT_DERIVED_ATTRIBUTE and IMPLEMENT_DERIVED_ATTRIBUTE_WITH_TYPE must be used instead of standard Handle macro definition IMPLEMENT_STANDARD_RTTIEXT to register new derived attributes.

Using this improvement several existing attributes from TDataStd, TDataXtd and XCAFDoc packages become inherited from other base attribute-classes. XML and Bin drivers of these attributes are removed. New base attribute classes are added: TDataStd_GenericEmpty and TDataStd_GenericExtString.

This improvement does not change both present formats Bin and XML documents. The obsolete Standard scheme is not changed at all.
Affected Issues
0030773
mod - src/BinMDataStd/BinMDataStd.cxx Diff File
mod - src/BinMDataStd/BinMDataStd.hxx Diff File
rm - src/BinMDataStd/BinMDataStd_CommentDriver.cxx Diff File
rm - src/BinMDataStd/BinMDataStd_CommentDriver.hxx Diff File
rm - src/BinMDataStd/BinMDataStd_DirectoryDriver.cxx Diff File
rm - src/BinMDataStd/BinMDataStd_DirectoryDriver.hxx Diff File
mod - src/BinMDataStd/BinMDataStd_IntegerDriver.cxx Diff File
rm - src/BinMDataStd/BinMDataStd_NoteBookDriver.cxx Diff File
rm - src/BinMDataStd/BinMDataStd_NoteBookDriver.hxx Diff File
rm - src/BinMDataStd/BinMDataStd_RelationDriver.cxx Diff File
rm - src/BinMDataStd/BinMDataStd_RelationDriver.hxx Diff File
rm - src/BinMDataStd/BinMDataStd_TickDriver.hxx Diff File
mod - src/BinMDataStd/FILES Diff File
mod - src/BinMDataXtd/BinMDataXtd.cxx Diff File
mod - src/BinMDataXtd/BinMDataXtd.hxx Diff File
rm - src/BinMDataXtd/BinMDataXtd_AxisDriver.cxx Diff File
rm - src/BinMDataXtd/BinMDataXtd_PlacementDriver.cxx Diff File
rm - src/BinMDataXtd/BinMDataXtd_PlacementDriver.hxx Diff File
rm - src/BinMDataXtd/BinMDataXtd_PlaneDriver.cxx Diff File
rm - src/BinMDataXtd/BinMDataXtd_PlaneDriver.hxx Diff File
rm - src/BinMDataXtd/BinMDataXtd_PointDriver.cxx Diff File
rm - src/BinMDataXtd/BinMDataXtd_PointDriver.hxx Diff File
rm - src/BinMDataXtd/BinMDataXtd_ShapeDriver.cxx Diff File
rm - src/BinMDataXtd/BinMDataXtd_ShapeDriver.hxx Diff File
mod - src/BinMDataXtd/FILES Diff File
mod - src/BinMDF/BinMDF_ADriver.cxx Diff File
mod - src/BinMDF/BinMDF_ADriver.hxx Diff File
mod - src/BinMDF/BinMDF_ADriver.lxx Diff File
mod - src/BinMDF/BinMDF_ADriverTable.cxx Diff File
mod - src/BinMDF/BinMDF_ADriverTable.hxx Diff File
mod - src/BinMDF/BinMDF_ADriverTable.lxx Diff File
add - src/BinMDF/BinMDF_DerivedDriver.cxx Diff File
add - src/BinMDF/BinMDF_DerivedDriver.hxx Diff File
mod - src/BinMDF/FILES Diff File
mod - src/BinMXCAFDoc/BinMXCAFDoc.cxx Diff File
mod - src/BinMXCAFDoc/BinMXCAFDoc.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_AreaDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_AreaDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ClippingPlaneToolDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ClippingPlaneToolDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ColorToolDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ColorToolDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_DimensionDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_DimensionDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_DimTolToolDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_DimTolToolDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_DocumentToolDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_DocumentToolDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_GeomToleranceDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_GeomToleranceDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_LayerToolDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_LayerToolDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_MaterialToolDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_MaterialToolDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_NoteBalloonDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_NoteBalloonDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_NotesToolDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_NotesToolDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ShapeToolDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ShapeToolDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ViewDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ViewDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ViewToolDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_ViewToolDriver.hxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_VolumeDriver.cxx Diff File
rm - src/BinMXCAFDoc/BinMXCAFDoc_VolumeDriver.hxx Diff File
mod - src/BinMXCAFDoc/FILES Diff File
mod - src/DDF/DDF_BasicCommands.cxx Diff File
mod - src/TDataStd/FILES Diff File
mod - src/TDataStd/TDataStd_Comment.cxx Diff File
mod - src/TDataStd/TDataStd_Comment.hxx Diff File
mod - src/TDataStd/TDataStd_Directory.cxx Diff File
mod - src/TDataStd/TDataStd_Directory.hxx Diff File
mod - src/TDataStd/TDataStd_Expression.cxx Diff File
mod - src/TDataStd/TDataStd_Expression.hxx Diff File
add - src/TDataStd/TDataStd_GenericEmpty.cxx Diff File
add - src/TDataStd/TDataStd_GenericEmpty.hxx Diff File
add - src/TDataStd/TDataStd_GenericExtString.cxx Diff File
add - src/TDataStd/TDataStd_GenericExtString.hxx Diff File
mod - src/TDataStd/TDataStd_Name.cxx Diff File
mod - src/TDataStd/TDataStd_Name.hxx Diff File
mod - src/TDataStd/TDataStd_NoteBook.cxx Diff File
mod - src/TDataStd/TDataStd_NoteBook.hxx Diff File
mod - src/TDataStd/TDataStd_Real.hxx Diff File
mod - src/TDataStd/TDataStd_Relation.cxx Diff File
mod - src/TDataStd/TDataStd_Relation.hxx Diff File
mod - src/TDataStd/TDataStd_Tick.cxx Diff File
mod - src/TDataStd/TDataStd_Tick.hxx Diff File
mod - src/TDataXtd/TDataXtd_Axis.cxx Diff File
mod - src/TDataXtd/TDataXtd_Axis.hxx Diff File
mod - src/TDataXtd/TDataXtd_Placement.cxx Diff File
mod - src/TDataXtd/TDataXtd_Placement.hxx Diff File
mod - src/TDataXtd/TDataXtd_Plane.cxx Diff File
mod - src/TDataXtd/TDataXtd_Plane.hxx Diff File
mod - src/TDataXtd/TDataXtd_Point.cxx Diff File
mod - src/TDataXtd/TDataXtd_Point.hxx Diff File
mod - src/TDataXtd/TDataXtd_Shape.cxx Diff File
mod - src/TDataXtd/TDataXtd_Shape.hxx Diff File
mod - src/TDF/FILES Diff File
add - src/TDF/TDF_DerivedAttribute.cxx Diff File
add - src/TDF/TDF_DerivedAttribute.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_Area.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_Area.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_ClippingPlaneTool.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_ClippingPlaneTool.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_ColorTool.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_ColorTool.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_Dimension.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_Dimension.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_DimTolTool.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_DimTolTool.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_DocumentTool.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_DocumentTool.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_GeomTolerance.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_GeomTolerance.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_LayerTool.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_LayerTool.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_MaterialTool.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_MaterialTool.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_Note.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_NoteBalloon.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_NoteBalloon.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_NotesTool.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_NotesTool.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_ShapeTool.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_ShapeTool.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_View.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_View.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_ViewTool.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_ViewTool.hxx Diff File
mod - src/XCAFDoc/XCAFDoc_Volume.cxx Diff File
mod - src/XCAFDoc/XCAFDoc_Volume.hxx Diff File
mod - src/XmlMDataStd/FILES Diff File
mod - src/XmlMDataStd/XmlMDataStd.cxx Diff File
mod - src/XmlMDataStd/XmlMDataStd.hxx Diff File
rm - src/XmlMDataStd/XmlMDataStd_CommentDriver.cxx Diff File
rm - src/XmlMDataStd/XmlMDataStd_CommentDriver.hxx Diff File
rm - src/XmlMDataStd/XmlMDataStd_DirectoryDriver.cxx Diff File
rm - src/XmlMDataStd/XmlMDataStd_DirectoryDriver.hxx Diff File
mod - src/XmlMDataStd/XmlMDataStd_IntegerDriver.cxx Diff File
rm - src/XmlMDataStd/XmlMDataStd_NoteBookDriver.cxx Diff File
rm - src/XmlMDataStd/XmlMDataStd_NoteBookDriver.hxx Diff File
rm - src/XmlMDataStd/XmlMDataStd_RelationDriver.cxx Diff File
rm - src/XmlMDataStd/XmlMDataStd_RelationDriver.hxx Diff File
mod - src/XmlMDataXtd/FILES Diff File
mod - src/XmlMDataXtd/XmlMDataXtd.cxx Diff File
mod - src/XmlMDataXtd/XmlMDataXtd.hxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_AxisDriver.cxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_AxisDriver.hxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_PlacementDriver.cxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_PlacementDriver.hxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_PlaneDriver.cxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_PlaneDriver.hxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_PointDriver.cxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_PointDriver.hxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_ShapeDriver.cxx Diff File
rm - src/XmlMDataXtd/XmlMDataXtd_ShapeDriver.hxx Diff File
mod - src/XmlMDF/FILES Diff File
mod - src/XmlMDF/XmlMDF.cxx Diff File
mod - src/XmlMDF/XmlMDF_ADriver.cxx Diff File
mod - src/XmlMDF/XmlMDF_ADriver.hxx Diff File
mod - src/XmlMDF/XmlMDF_ADriverTable.cxx Diff File
mod - src/XmlMDF/XmlMDF_ADriverTable.hxx Diff File
add - src/XmlMDF/XmlMDF_DerivedDriver.cxx Diff File
add - src/XmlMDF/XmlMDF_DerivedDriver.hxx Diff File
mod - src/XmlMXCAFDoc/FILES Diff File
mod - src/XmlMXCAFDoc/XmlMXCAFDoc.cxx Diff File
mod - src/XmlMXCAFDoc/XmlMXCAFDoc.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_AreaDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_AreaDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_ClippingPlaneToolDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_ClippingPlaneToolDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_ColorToolDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_ColorToolDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_DimTolToolDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_DimTolToolDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_DocumentToolDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_DocumentToolDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_LayerToolDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_LayerToolDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_MaterialToolDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_MaterialToolDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_NoteBalloonDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_NoteBalloonDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_NotesToolDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_NotesToolDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_ShapeToolDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_ShapeToolDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_ViewToolDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_ViewToolDriver.hxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_VolumeDriver.cxx Diff File
rm - src/XmlMXCAFDoc/XmlMXCAFDoc_VolumeDriver.hxx Diff File
add - tests/caf/basic/F4 Diff File
add - tests/caf/basic/F5 Diff File

occt-products: master aed86f84

2020-06-19 22:33:12

mpv


Committer: bugmaster Details Diff
30773: Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms

Correct behavior of the inherited attributes in the SWIG classes list. Added TDF_DerivedAttribute class to the wrapper, after TDF_Attribute. Also, added new base attributes to the wrapper: Empty and ExtString.
Affected Issues
0030773
mod - diff Diff File

Issue History

Date Modified Username Field Change
2019-06-06 18:10 mpv New Issue
2019-06-06 18:10 mpv Assigned To => mpv
2019-06-06 18:24 git Note Added: 0084935
2019-06-07 13:44 kgv Summary To allow to inherit existing attributes to reuse persistence mechanisms => Application Framework - To allow to inherit existing attributes to reuse persistence mechanisms
2019-06-07 16:28 git Note Added: 0084947
2019-06-11 09:49 git Note Added: 0084981
2019-06-13 10:20 mpv Note Added: 0085025
2019-06-13 10:20 mpv Assigned To mpv => szy
2019-06-13 10:20 mpv Status new => resolved
2019-06-13 10:20 mpv Steps to Reproduce Updated
2019-06-14 12:46 szy Note Added: 0085050
2019-06-14 12:47 szy Note Added: 0085051
2019-06-14 12:47 szy Assigned To szy => mpv
2019-06-14 12:47 szy Status resolved => feedback
2019-06-14 15:39 git Note Added: 0085055
2019-06-17 17:14 mpv Note Added: 0085093
2019-06-17 17:14 mpv Assigned To mpv => szy
2019-06-17 17:14 mpv Status feedback => resolved
2019-06-19 10:37 szy Note Added: 0085138
2019-06-19 10:37 szy Assigned To szy => bugmaster
2019-06-19 10:37 szy Status resolved => reviewed
2019-06-19 20:11 bugmaster Test case number => Not required
2019-06-19 20:12 bugmaster Note Added: 0085151
2019-06-19 20:12 bugmaster Status reviewed => tested
2019-06-20 15:02 git Note Added: 0085179
2019-06-20 15:51 kgv Note Added: 0085182
2019-06-20 15:51 kgv Assigned To bugmaster => mpv
2019-06-20 15:51 kgv Status tested => assigned
2019-06-20 15:51 kgv Target Version => 7.5.0
2019-06-20 15:53 kgv Note Edited: 0085182
2019-07-09 16:16 git Note Added: 0085514
2019-07-09 18:25 mpv Note Added: 0085529
2019-07-09 18:25 mpv Assigned To mpv => kgv
2019-07-09 18:25 mpv Status assigned => resolved
2019-07-18 13:07 git Note Added: 0085758
2019-07-18 14:01 git Note Added: 0085763
2019-07-19 09:44 kgv Note Added: 0085779
2019-07-19 09:45 kgv Assigned To kgv => mpv
2019-07-19 09:45 kgv Status resolved => assigned
2019-07-19 09:45 kgv Note Edited: 0085779
2019-07-19 09:46 kgv Note Edited: 0085779
2019-07-19 09:46 kgv Note Edited: 0085779
2019-08-01 13:37 git Note Added: 0085965
2019-08-01 13:46 mpv Note Added: 0085967
2019-08-01 13:46 mpv Assigned To mpv => kgv
2019-08-01 13:46 mpv Status assigned => resolved
2019-08-21 09:39 mpv Note Added: 0086379
2019-09-02 14:26 git Note Added: 0086613
2019-09-02 15:40 kgv Note Added: 0086616
2019-09-02 15:40 kgv Note Edited: 0086616
2019-09-02 17:29 git Note Added: 0086626
2019-09-03 08:41 mpv Note Added: 0086676
2019-09-03 09:13 kgv Note Added: 0086677
2019-09-03 09:22 git Note Added: 0086678
2019-09-03 09:23 mpv Note Added: 0086679
2019-09-03 09:24 kgv Assigned To kgv => abv
2019-09-05 09:23 mpv Target Version 7.5.0 => 7.4.0
2019-09-06 14:39 abv Note Added: 0086882
2019-09-06 14:39 abv Target Version 7.4.0 => 7.5.0
2019-09-06 14:39 abv Assigned To abv => mpv
2019-09-06 14:39 abv Status resolved => assigned
2019-09-06 15:53 mpv Note Added: 0086893
2020-05-14 22:49 git Note Added: 0092127
2020-05-15 15:30 git Note Added: 0092156
2020-05-18 13:46 git Note Added: 0092231
2020-06-19 23:10 git Note Added: 0092586
2020-06-22 12:59 mpv Note Added: 0092645
2020-06-22 12:59 mpv Assigned To mpv => abv
2020-06-22 12:59 mpv Status assigned => resolved
2020-06-22 12:59 mpv Steps to Reproduce Updated
2020-06-22 13:40 mpv Note Added: 0092650
2020-09-09 10:57 mpv Note Added: 0094287
2020-09-09 10:57 mpv Assigned To abv => vro
2020-09-10 15:23 vro Note Added: 0094379
2020-09-10 15:23 vro Assigned To vro => bugmaster
2020-09-10 15:23 vro Status resolved => reviewed
2020-09-10 15:29 kgv Note Added: 0094381
2020-09-10 15:33 mpv Note Added: 0094383
2020-09-11 16:38 git Note Added: 0094479
2020-09-13 11:06 bugmaster Note Added: 0094547
2020-09-13 11:06 bugmaster Status reviewed => tested
2020-09-13 11:24 abv Changeset attached => occt master c99ad5d7
2020-09-13 11:24 abv Assigned To bugmaster => abv
2020-09-13 11:24 abv Status tested => verified
2020-09-13 11:24 abv Resolution open => fixed
2020-09-13 11:44 git Note Added: 0094566
2020-09-13 11:47 git Note Added: 0094610
2020-09-13 11:47 git Note Added: 0094623
2020-09-13 11:48 git Note Added: 0094630
2020-09-13 11:48 git Note Added: 0094632
2020-09-13 11:48 git Note Added: 0094634
2020-10-14 11:55 kgv Relationship added related to 0025681
2020-12-02 16:22 emo Fixed in Version => 7.5.0
2020-12-02 17:11 emo Status verified => closed
2021-12-17 18:41 bugmaster Changeset attached => occt-products master aed86f84