Skip to content

Improve the javadocs for QueryBuilder.limit() - show some examples how it affects Changes and Shadow queries. Explain why findShadowsAndStream().limit() should be used for Shadows #998

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Kira-Cesonia opened this issue Jul 6, 2020 · 22 comments

Comments

@Kira-Cesonia
Copy link

Kira-Cesonia commented Jul 6, 2020

I have run into an interesting issue here.

Basically, I am creating a new object, and then making changes in that object twice, committing it each time. In total, javers.commit is called three times.

However, when I use a javers shadow query, I only get two shadows: The one with the initial commit, and the one with the latest commit. The shadow with the first change is missing.

  • [shadows[1]] Initial Commit
  • [MISSING] First Change
  • [shadows[0]] Second Change

Interestingly, however, the shadow IDs in the commitMetadata acknowledge that there is a version they're missing:

  • entryShadowList[0].commitMetadata.id = 3.0
  • entryShadowList[1].commitMetadata.id = 1.0

...so, whatever happened to Version 2.0, and why is it not returned?

Any idea what could cause this? I have already tried to add withScopeDeepPlus(999) to the JqlQuery that gets the shadows, like this:

	public static <T> List<Shadow<T>> shadowsQuery(
		Javers javers,
		String entryId,
		Class<T> entryClass
	) {
		JqlQuery entryQuery = QueryBuilder.byInstanceId(entryId, entryClass)
			.withScopeDeepPlus(999)
			.build();
		List<Shadow<T>> entryShadowList = javers.findShadows(entryQuery);
		LOGGER.info("Found the following shadows for: " + entryId);
		for(Shadow<T> entryShadow : entryShadowList) {
			T message = entryShadow.get();
			LOGGER.info(message);
		}
		LOGGER.info(entryShadowList.size() + " Shadows total");
		return entryShadowList;
	}

...however, it still only gets the two shadows listed above. The middle version is still missing.

For Reference, here's an excerpt of the data structure that I'm using, and where I make the changes:

ReqIf //<- The Entity
├TheHeader
├CoreContent
│└ReqIF_Content
│ ├Datatypes
│ ├SpecObjects
│ │└List<SpecObject> //<- One or more of these get removed in each request, should be 27 in initial commit, 26 after first change, and 18 after the second change
│ ├SpecRelations
│ ├SpecTypes
│ ├Specifications
│ └SpecRelationGroups
└ToolExtensions
@Kira-Cesonia
Copy link
Author

Update: I tried working around this by adding a custom field public int majorVersion to the top level entity and manually incrementing it with every commit, but somehow that only made everything worse. Now the shadow query only returns the 3.0 version, and the 1.0 version is now missing along with the 2.0 version.

@bartoszwalacik
Copy link
Member

@Kira-Cesonia
Copy link
Author

I am still trying to reproduce this with a simpler example. Meanwhile, if you have any ideas what could be behind such behaviour, please feel free to drop me any ideas.

I have just confirmed that the jv_snapshots collection in MongoDB where the Javers information gets stored contains snapshots with the versions 1 (the vast majority), 2 (a few) and 3 (only a handful), so from that I would also expect that three shadows should get returned. However, since that collection contains, like, 1989 objects, I can't just easily compare them.

@Kira-Cesonia
Copy link
Author

Kira-Cesonia commented Jul 6, 2020

Interestingly, when I do additional modifications, these spawn proper Versions that get retrieved correctly as shadows. It just seems to be the V2.0 that does not get correctly retrieved .

So, for example, when I make an initial commit and four changes, then this is what the Shadows query returns: (The version taken from shadow.commitMetadata.id):

  • V5.0 After fourth change
  • V4.0 After third change
  • V3.0 After second change
  • V1.0 Initial commit

That notably happens even though all the changes use the exact same logic.

@Kira-Cesonia
Copy link
Author

I have followed that train further now, and have made the following very interesting obeservation.

The deletions I make come in two categories. While they are all deletions of a SpecObject, most of them just plainly delete that one SpecObject, but one of the deleted SpecObjects also has children, which then also get deleted in the same commit.

Now the interesting part here is that the Versions that are returned to me by the shadows query depend entirely on where the "Chain Deletion" happens.

If I put the Chain Deletion first, like this:

  • Initial Commit
  • Chain Deletion (id_exterior)
  • Single Deletion (id_steering_system)
  • Single Deletion (id_braking_system)
  • Single Deletion (id_lighting_systems)

...then the Shadows query returns me the following very valid response:

  • V5.0 with 16 SpecObjects
  • V4.0 with 17 SpecObjects
  • V3.0 with 18 SpecObjects
  • V2.0 with 19 SpecObjects
  • V1.0 with 27 SpecObjects

However, if I put the chain deletion last, like this:

  • Initial Commit
  • Single Deletion (id_steering_system)
  • Single Deletion (id_braking_system)
  • Single Deletion (id_lighting_systems)
  • Chain Deletion (id_exterior)

...then the Shadows query returns me the following. faulty response:

  • V5.0 with 16 SpecObjects
  • V1.0 with 27 SpecObjects

I can pretty much put the chain deletion wherever I like, and it will cause all previous versions to get "lost", which is really buggy behaviour, since the chain deletion should affect completely different objects than those affected by the single deletions.

For reference, here is a rough outline of the object tree:

              id_body
                  id_exterior
                      id_bonnet
                      id_doors
                          id_front_doors
                          id_rear_doors
                          id_trunk/boot
                      id_shell
                      id_sunroof
                  id_interior
                      id_clutch_unit
                      id_display_dashboard_unit
                      id_fuel_container
                      id_gear_box
                      id_luggage
                      id_occupants_passengers
                      id_power_unit
                      id_supporting_systems
                          id_AC_System
                          id_braking_system
                          id_electrical_system
                              id_electrical_generator_unit
                              id_electrical_harness
                              id_electrical_storage_unit
                          id_fuel_system
                          id_lighting_systems
                          id_steering_system

So, removing id_steering_system, id_braking_system and id_lighting_systems remove only one SpecObject each, but removing id_exterior also removes the seven child objects, which are not linked directly, but rather indirectly via a tree map.

Any ideas on how this could trigger this behaviour?

@Kira-Cesonia
Copy link
Author

Kira-Cesonia commented Jul 7, 2020

Still not having any luck creating a simplified reproduction that I can share.

However, here's the Changelogs as generated by changes.prettyPrint() for both cases:

With Chain Deletion first (correct result):

Commit 5.0 done by Default User Name at 07 Jul 2020, 08:46:33 :
* changes on io.company.product.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif :
  - 'coreContent/reqIF_content/specObjects.specObjects' collection changes :
    16. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/16' removed
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children.specHierarchies' collection changes :
    3. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3' removed
Commit 4.0 done by Default User Name at 07 Jul 2020, 08:46:31 :
* changes on io.company.product.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif :
  - 'coreContent/reqIF_content/specObjects.specObjects' collection changes :
    17. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/17' removed
  - 'coreContent/reqIF_content/specObjects/specObjects/11/identifier.value' value changed from 'id_braking_system' to 'id_electrical_system'
  - 'coreContent/reqIF_content/specObjects/specObjects/11/longName.value' value changed from 'Braking_System' to 'Electrical_System'
  - 'coreContent/reqIF_content/specObjects/specObjects/11/values/attributeValues/0/theValue.value' value changed from 'The definition of the braking system      A brake system is designed to slow and halt the motion of vehicle. To do this, various components within the brake system must convert       vehicle’s moving energy into heat. This is done by using friction.      Friction is the resistance to movement exerted by two objects on each other. Two forms of friction play a part in controlling a vehicle:       Kinetic or moving, and static or stationary. The amount of friction or resistance to movement depends upon the type of material in contact, the smoothness       of their rubbing surfaces and the pressure holding them together.      Thus, in a nutshell a car brake works by applying a static surface to a moving surface of a vehicle, thus causing friction and converting kinetic energy       into heat energy. The high-level mechanics are as follows.      There are basically three types of brakes used in automobiles:      i) Mechanical brakes      ii) Hydraulic brakes      iii) Air Brakes and related type of brakes.' to 'The definition of the electronic systems and control units:      The electrical system of a car is a closed circuit with an independent power source the battery . It operates on a small fraction of the power of a household circuit.      Current flows along a single cable from the battery to the component being powered, and back to the battery through the car's metal body. The body is connected to the       earth terminal of the battery by a thick cable.      The electronic systems comprise of 3 units:      i) Electrical Generator      ii) Electrical Harness      iii) Electrical Storage Unit.'
  - 'coreContent/reqIF_content/specObjects/specObjects/12/identifier.value' value changed from 'id_electrical_system' to 'id_electrical_generator_unit'
  - 'coreContent/reqIF_content/specObjects/specObjects/12/longName.value' value changed from 'Electrical_System' to 'Electrical_Generator_Unit'
  - 'coreContent/reqIF_content/specObjects/specObjects/12/values/attributeValues/0/theValue.value' value changed from 'The definition of the electronic systems and control units:      The electrical system of a car is a closed circuit with an independent power source the battery . It operates on a small fraction of the power of a household circuit.      Current flows along a single cable from the battery to the component being powered, and back to the battery through the car's metal body. The body is connected to the       earth terminal of the battery by a thick cable.      The electronic systems comprise of 3 units:      i) Electrical Generator      ii) Electrical Harness      iii) Electrical Storage Unit.' to 'The definition of the electronic generator system:      The Lundell generator (claw-pole rotor generator) is the automotive generator used in the vehicle, with total powers per unit up to 5 kW and speeds up to 18,000 rpm.      The solid rotor claw-pole structure with ring-shaped single direct current (DC) excitation coil, though supplied through slip-rings and brushes from       the battery on board, has proven to be simple and reliable, with low cost, low volume and low excitation power loss.'
  - 'coreContent/reqIF_content/specObjects/specObjects/13/identifier.value' value changed from 'id_electrical_generator_unit' to 'id_electrical_harness'
  - 'coreContent/reqIF_content/specObjects/specObjects/13/longName.value' value changed from 'Electrical_Generator_Unit' to 'Electrical_Harness'
  - 'coreContent/reqIF_content/specObjects/specObjects/13/values/attributeValues/0/theValue.value' value changed from 'The definition of the electronic generator system:      The Lundell generator (claw-pole rotor generator) is the automotive generator used in the vehicle, with total powers per unit up to 5 kW and speeds up to 18,000 rpm.      The solid rotor claw-pole structure with ring-shaped single direct current (DC) excitation coil, though supplied through slip-rings and brushes from       the battery on board, has proven to be simple and reliable, with low cost, low volume and low excitation power loss.' to 'The definition of the electrical harness system:      harnesses for various components that need to be pre-assembled. For instance, motors, doors, roofs, tailgates, seats,       air conditioners, generators, bumpers and front ends are all equipped with our wire harnesses.'
  - 'coreContent/reqIF_content/specObjects/specObjects/14/identifier.value' value changed from 'id_electrical_harness' to 'id_electrical_storage_unit'
  - 'coreContent/reqIF_content/specObjects/specObjects/14/longName.value' value changed from 'Electrical_Harness' to 'Electronic_Storage_Unit'
  - 'coreContent/reqIF_content/specObjects/specObjects/14/values/attributeValues/0/theValue.value' value changed from 'The definition of the electrical harness system:      harnesses for various components that need to be pre-assembled. For instance, motors, doors, roofs, tailgates, seats,       air conditioners, generators, bumpers and front ends are all equipped with our wire harnesses.' to 'The definition of the electronic storage unit:      The electrical storage unit saves the power generated by the generator and the regenerative braking system to the battery pack to be used when needed.'
  - 'coreContent/reqIF_content/specObjects/specObjects/15/identifier.value' value changed from 'id_electrical_storage_unit' to 'id_fuel_system'
  - 'coreContent/reqIF_content/specObjects/specObjects/15/longName.value' value changed from 'Electronic_Storage_Unit' to 'Fuel_System'
  - 'coreContent/reqIF_content/specObjects/specObjects/15/values/attributeValues/0/theValue.value' value changed from 'The definition of the electronic storage unit:      The electrical storage unit saves the power generated by the generator and the regenerative braking system to the battery pack to be used when needed.' to 'The definition of the fueling systems:       The fuel system is to store and supply fuel to the cylinder chamber where it can be mixed       with air, vaporized, and burned to produce energy. The fuel, which can be either gasoline or diesel is stored       in a fuel tank. A fuel pump draws the fuel from the fuel tank through fuel lines and delivers it through a fuel       filter to either a carburetor or fuel injector and finally to the cylinder chamber for combustion.'
  - 'coreContent/reqIF_content/specObjects/specObjects/16/identifier.value' value changed from 'id_fuel_system' to 'id_lighting_systems'
  - 'coreContent/reqIF_content/specObjects/specObjects/16/longName.value' value changed from 'Fuel_System' to 'Lighting_Systems'
  - 'coreContent/reqIF_content/specObjects/specObjects/16/values/attributeValues/0/theValue.value' value changed from 'The definition of the fueling systems:       The fuel system is to store and supply fuel to the cylinder chamber where it can be mixed       with air, vaporized, and burned to produce energy. The fuel, which can be either gasoline or diesel is stored       in a fuel tank. A fuel pump draws the fuel from the fuel tank through fuel lines and delivers it through a fuel       filter to either a carburetor or fuel injector and finally to the cylinder chamber for combustion.' to 'The definition of the lighting systems:      The lighting system consists of lighting and signalling devices mounted on the front, rear, sides, and in some cases the top       of a motor vehicle. This lights the roadway for the driver. The lighting system also makes the vehicle more visible especially in low light conditions.      It gives warning to other drivers and pedestrians of a vehicle's presence and direction of travel.       Emergency vehicles usually carry distinctive lighting equipment to alert drivers and pedestrians of their rapid movement during an emergency.'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children.specHierarchies' collection changes :
    4. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4' removed
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/children.specHierarchies' collection changes :
    0. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/children/specHierarchies/0' added
    1. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/children/specHierarchies/1' added
    2. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/children/specHierarchies/2' added
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/identifier.value' value changed from 'anforderungshierarchie_1_2_8_2' to 'anforderungshierarchie_1_2_8_3'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/specHierarchyObject/referenceField.value' value changed from 'id_braking_system' to 'id_electrical_system'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/children.specHierarchies' collection changes :
    0. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/children/specHierarchies/0' removed
    1. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/children/specHierarchies/1' removed
    2. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/children/specHierarchies/2' removed
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/identifier.value' value changed from 'anforderungshierarchie_1_2_8_3' to 'anforderungshierarchie_1_2_8_4'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/specHierarchyObject/referenceField.value' value changed from 'id_electrical_system' to 'id_fuel_system'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/identifier.value' value changed from 'anforderungshierarchie_1_2_8_4' to 'anforderungshierarchie_1_2_8_5'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/specHierarchyObject/referenceField.value' value changed from 'id_fuel_system' to 'id_lighting_systems'
Commit 3.0 done by Default User Name at 07 Jul 2020, 08:46:29 :
* changes on io.company.product.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif :
  - 'coreContent/reqIF_content/specObjects.specObjects' collection changes :
    18. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/18' removed
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children.specHierarchies' collection changes :
    5. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5' removed
Commit 2.0 done by Default User Name at 07 Jul 2020, 08:46:27 :
* changes on io.company.product.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif :
  - 'coreContent/reqIF_content/specObjects/specObjects/13/longName.value' value changed from 'Gear_Box_Unit' to 'Electrical_Generator_Unit'
  - 'coreContent/reqIF_content/specTypes/specTypeTags/0/identifier.attributeName' reference changed from '...ReqIf/TL-211-Exterior-Interior.reqif#theHeader/reqIF_header/identifier/attributeName' to '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/0/identifier/attributeName'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/identifier.attributeName' reference changed from '...ReqIf/TL-211-Exterior-Interior.reqif#theHeader/reqIF_header/identifier/attributeName' to '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/identifier/attributeName'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/identifier.value' value changed from 'anforderungshierarchie_1_1_3' to 'anforderungshierarchie_1_2_3'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/desc.attributeName' reference changed from '...ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/productToolExtension/suppliers/suppliers/1/desc/attributeName' to '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/desc/attributeName'

With Chain Deletion last (wrong result):

Commit 5.0 done by Default User Name at 07 Jul 2020, 08:42:17 :
* changes on io.company.product.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif :
  - 'coreContent/reqIF_content/specObjects/specObjects/10/values/attributeValues/0/theValue.value' value changed from 'The definition of the clutch unit:      A clutch is a unit of the car transmission that provides interaction between the engine, gearbox and crankshaft, the essence of its work is to transfer torque       to the wheels from the engine by means of the gearbox. In addition, the clutch depresses fluctuations in the transmission and reduce the risk of overload.      To provide high-quality car care, it is necessary to understand the basic characteristics and features of its functionality (both mechanics and electronics systems).      Clutch unit quite important and “multifaceted” mechanical unit in your car. Classification, design and, consequently, faults have a number of differences between them. This article will cover key aspects of the clutch unit operation.      The interaction between the engine and the transmission based on the disconnection/connection between them, and thus directly helps you to change speeds.' to 'The definition of the air conditioning system:      An automobile air conditioner must be capable of removing all the heat inputs in addition to reducing and maintaining the temperature       of the compartment of the vehicle in the comfort zone. Besides temperature, humidity is also one of the comfort factors and in many cases       it is an even more important factor. Therefore, removal of excess humidity is also one of the requirements of air conditioning.      Air Conditioning Requirements      The automobile compartment is heated due to several factors such as,      (i) higher temperature of outside air,      (ii) solar radiation, and (Hi) engine heat.      The amount of heat absorbed is dependent upon,      a) automobile insulation,      b) position of sun and intensity of solar radiation,      c) variation of light and shadow,      d) vehicle colour,      e) tinted glass,      f) vehicle speed, and      g) wind direction and velocity.'
  - 'coreContent/reqIF_content/specObjects/specObjects/12/values/attributeValues/0/theValue.value' value changed from 'The definition of the fuel container:      A fuel container must allow or provide the following:      i) Storage of fuel: the system must contain a given quantity of fuel and must avoid leakage and limit evaporative emissions.      ii) Filling: the fuel container must be filled in a secure way, without sparks.' to 'The definition of the electronic generator system:      The Lundell generator (claw-pole rotor generator) is the automotive generator used in the vehicle, with total powers per unit up to 5 kW and speeds up to 18,000 rpm.      The solid rotor claw-pole structure with ring-shaped single direct current (DC) excitation coil, though supplied through slip-rings and brushes from       the battery on board, has proven to be simple and reliable, with low cost, low volume and low excitation power loss.'
  - 'coreContent/reqIF_content/specObjects/specObjects/13/identifier.value' value changed from 'id_gear_box' to 'id_electrical_harness'
  - 'coreContent/reqIF_content/specObjects/specObjects/14/longName.value' value changed from 'Luggage' to 'Electronic_Storage_Unit'
  - 'coreContent/reqIF_content/specObjects/specObjects/15/identifier.value' value changed from 'id_occupants_passengers' to 'id_fuel_system'
  - 'coreContent/reqIF_content/specObjects/specObjects/15/longName.value' value changed from 'Occupants/Passengers' to 'Fuel_System'
  - 'coreContent/reqIF_content/specObjects/specObjects/15/values/attributeValues/0/theValue.value' value changed from 'The definition of the occupants/passengers:      An occupant of a car is considered to be any one either in the front seat driving the car or someone else who is not actively driving but riding along.      The safety features, comfort and functionalities for all the passengers have to be uniform.' to 'The definition of the fueling systems:       The fuel system is to store and supply fuel to the cylinder chamber where it can be mixed       with air, vaporized, and burned to produce energy. The fuel, which can be either gasoline or diesel is stored       in a fuel tank. A fuel pump draws the fuel from the fuel tank through fuel lines and delivers it through a fuel       filter to either a carburetor or fuel injector and finally to the cylinder chamber for combustion.'
  - 'coreContent/reqIF_content/specObjects/specObjects/2/identifier.value' value changed from 'id_bonnet' to 'id_clutch_unit'
  - 'coreContent/reqIF_content/specObjects/specObjects/2/values/attributeValues/0/theValue.value' value changed from 'The definition of the bonnet:      The bonnet system is an access panel to the engine compartment to enable maintenance of       power rain, drive belts, battery, fluid levels and lamp units.It is fundamentally a reinforced skin panel with many safety and quality requirements.      The boundary conditions for commencing a new design process using aluminium can be identified and analysed by grouping together requirements       using affinity matrix methods. Bonnet and boot lid are treated separately and are then compared to highlight major differences.      Bonnet systems influence the following performance measures:      i) Overall vehicle mass      Iii) Fore / aft weight distribution      iii) Height of vehicle centre of gravity (the bonnet and the boot lid are usually located above the C of G of the vehicle, hence weight reduction is beneficial)      iv) Vehicle drive-by noise intensity.' to 'The definition of the clutch unit:      A clutch is a unit of the car transmission that provides interaction between the engine, gearbox and crankshaft, the essence of its work is to transfer torque       to the wheels from the engine by means of the gearbox. In addition, the clutch depresses fluctuations in the transmission and reduce the risk of overload.      To provide high-quality car care, it is necessary to understand the basic characteristics and features of its functionality (both mechanics and electronics systems).      Clutch unit quite important and “multifaceted” mechanical unit in your car. Classification, design and, consequently, faults have a number of differences between them. This article will cover key aspects of the clutch unit operation.      The interaction between the engine and the transmission based on the disconnection/connection between them, and thus directly helps you to change speeds.'
  - 'coreContent/reqIF_content/specObjects/specObjects/3/values/attributeValues/0/theValue.value' value changed from 'The definition of the doors.      A car door is a type of door, typically hinged, but sometimes attached by other mechanisms such as tracks, in front of an opening which is used for entering       and exiting a vehicle. A vehicle door can be opened to provide access to the opening, or closed to secure it. These doors can be opened manually, or powered electronically.      Powered doors are usually found on minivans, high-end cars, or modified cars.      The Doors of a car can be of the following types:      i) Front Doors      ii) Rear Doors      iii) Trunk/Boot.' to 'The definition of the dashboard/display: familiarity with the parts of the vehicle and how they work together is an important part of being a safe drive.      display/dashboard unit or instrument panel contains the following:      i) Speedometer tells you the speed of your vehicle in MPH and KPH.      ii) Tachometer shows how many rotations your engine is making per minute.      iii) Odometer shows how many miles your car has traveled in its lifetime.      iv) Fuel Gauge shows how much fuel remains in your car's tank.      v) Gear Display shows which gear your car is currently in.      vi) Turn Signal Indicators flash when your turn signals are on; both will flash if you turn on your hazard lights.      vii) Active System Lights alert you to parts of the vehicle that are activated, such as an open trunk or door.'
  - 'coreContent/reqIF_content/specObjects/specObjects/4/values/attributeValues/0/theValue.value' value changed from 'The definition of the shell:      The individual face of a vehicle is created by the body and all the components visible from the outside.      Development and design of a vehicle shell must bring an array of factors––form, function, material compounds, rigidity, elasticity––into precise alignment.' to 'The definition of the fuel container:      A fuel container must allow or provide the following:      i) Storage of fuel: the system must contain a given quantity of fuel and must avoid leakage and limit evaporative emissions.      ii) Filling: the fuel container must be filled in a secure way, without sparks.'
  - 'coreContent/reqIF_content/specObjects/specObjects/5/longName.value' value changed from 'Sunroof' to 'Gear_Box_Unit'
  - 'coreContent/reqIF_content/specObjects/specObjects/6/identifier.value' value changed from 'id_front_doors' to 'id_luggage'
  - 'coreContent/reqIF_content/specObjects/specObjects/6/values/attributeValues/0/theValue.value' value changed from 'The definition of the front doors:      A car door is a type of door, typically hinged, but sometimes attached by other mechanisms such as tracks, in front of an opening which is used for entering       and exiting a vehicle. A vehicle door can be opened to provide access to the opening, or closed to secure it. These doors can be opened manually, or powered electronically.      Powered doors are usually found on minivans, high-end cars, or modified cars.      The Doors of a car can be of the following types:      i) Driver Door      ii) Front Passenger Door.' to 'The definition of the luggage space:      The door or opening of a cargo area may be hinged at the top, side, or bottom.      If the door is hinged at the bottom it is termed a tailgate, particularly in the United States. They are used on station wagons and pickup trucks,       as well as on some sport utility vehicles (SUV). Traditional drop-down station wagon and pickup tailgates can also serve as a mount for a workbench.      Traditional U.S. station wagons included a roll down window retracting into the tailgate to load small items or to allow the tailgate to be opened down on       its bottom mounted hinges. Because of the potential for carbon-monoxide fumes, the tailgate window on station wagons should be closed whenever the engine is running.      Two-way station wagon tailgates may be hinged at the side and the bottom so they can be opened sideways like a regular door, or drop downwards as load platform extenders.      They are designed with special handle(s) for opening in the selected direction on special hinges after the window is lowered.      A three-way design that was also used by Ford allows for the tailgate to be opened like a door with the window up.      General Motors developed a clam shell style 'disappearing' design where the rear window rolls up into the roof and the tailgate slides down and beneath the load floor.      If the door is hinged at the top it is termed a hatch, and is used on a hatchback. A bottom opening door is now common on sport utility vehicles (SUV).'
  - 'coreContent/reqIF_content/specObjects/specObjects/7/identifier.value' value changed from 'id_rear_doors' to 'id_occupants_passengers'
  - 'coreContent/reqIF_content/specObjects/specObjects/7/values/attributeValues/0/theValue.value' value changed from 'The definition of the rear doors:      A car door is a type of door, typically hinged, but sometimes attached by other mechanisms such as tracks, in front of an opening which is used for entering       and exiting a vehicle. A vehicle door can be opened to provide access to the opening, or closed to secure it. These doors can be opened manually, or powered electronically.      Powered doors are usually found on minivans, high-end cars, or modified cars.' to 'The definition of the occupants/passengers:      An occupant of a car is considered to be any one either in the front seat driving the car or someone else who is not actively driving but riding along.      The safety features, comfort and functionalities for all the passengers have to be uniform.'
  - 'coreContent/reqIF_content/specObjects/specObjects/8/longName.value' value changed from 'Trunk/Boot' to 'Power_Unit'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children.specHierarchies' collection changes :
    1. '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/1' removed
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/specHierarchyObject/referenceField.value' value changed from 'id_shell' to 'id_fuel_container'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/specHierarchyObject/referenceField.value' value changed from 'id_sunroof' to 'id_gear_box'

@Kira-Cesonia
Copy link
Author

Here's a first interesting thing that I came across while analyzing these changelogs.

Commit 2.0 done by Default User Name at 07 Jul 2020, 08:46:27 :
* changes on io.company.product.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif :
  - 'coreContent/reqIF_content/specObjects/specObjects/13/longName.value' value changed from 'Gear_Box_Unit' to 'Electrical_Generator_Unit'
  - 'coreContent/reqIF_content/specTypes/specTypeTags/0/identifier.attributeName' reference changed from '...ReqIf/TL-211-Exterior-Interior.reqif#theHeader/reqIF_header/identifier/attributeName' to '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/0/identifier/attributeName'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/identifier.attributeName' reference changed from '...ReqIf/TL-211-Exterior-Interior.reqif#theHeader/reqIF_header/identifier/attributeName' to '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/identifier/attributeName'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/identifier.value' value changed from 'anforderungshierarchie_1_1_3' to 'anforderungshierarchie_1_2_3'
  - 'coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/desc.attributeName' reference changed from '...ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/productToolExtension/suppliers/suppliers/1/desc/attributeName' to '...ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/desc/attributeName'

This logs the change that removes the id_exterior and its children. Interestingly, however, that removal is not logged anywhere in that change, although it appears in the shadow for that version.

@Kira-Cesonia
Copy link
Author

Meanwhile, if I get the Shadows for V1.0 and V2.0 and run javers.compare on them, then I get the following list of changes that contains the actual changes:

10:33:46,830 [INFO] [Queries:41] Diff:
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/2/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/1/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/3/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/4/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/1/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/3/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/7/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/5/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/9/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/8/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/6/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/2/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/17/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/11/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/15/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/13/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/16/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/18/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/12/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/14/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specObjects/specObjects/10/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specRelations/specRelations/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/datatypes/datatypeDefinitions/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/datatypes/datatypeDefinitions/1/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/1/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/0/specAttributes/attributeDefinitionTags/0/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/supplierStatusDefinitions/supplierStatusDefinitions/1/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/supplierStatusDefinitions/supplierStatusDefinitions/2/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/supplierStatusDefinitions/supplierStatusDefinitions/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/supplierStatusDefinitions/supplierStatusDefinitions/3/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/0/specAttributes/attributeDefinitionTags/0/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/0/specAttributes/attributeDefinitionTags/0/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specTypes/specTypeTags/0/specAttributes/attributeDefinitionTags/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/1/comment/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/4/comment/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/3/comment/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/0/comment/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/2/comment/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/3/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/0/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/4/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/2/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/1/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/0/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/1/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/0/supplierSpecRelations/supplierSpecRelations/1/specObjectRef/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/2/supplierSpecRelations/supplierSpecRelations/0/specObjectRef/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#toolExtensions/projectToolExtension/suppliers/suppliers/1/supplierSpecStatuses/supplierSpecStatuses/0/supplierSpecRelations/supplierSpecRelations/0/specObjectRef/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/0/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/1/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/1/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/0/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/1/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/1/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/0/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/specHierarchyObject/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/specHierarchyObject/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/specHierarchyObject/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/specHierarchyObject/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/desc
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/specHierarchyObject/referenceField
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/specHierarchyObject/referenceField
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/specHierarchyObject/referenceField
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/specHierarchyObject/referenceField
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/longName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/children
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/lastChange
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/identifier
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/3/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/1/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/2/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/0/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/4/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/6/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/5/specHierarchyObject/referenceField/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/isTableInternal
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/children/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/desc/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/specHierarchyObject
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/longName/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/isTableInternal/tagName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/0/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/3/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/1/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/lastChange/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/2/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/5/identifier/attributeName
* new object: io.company.project.module.reqIF.reqIF_dataStructure.ReqIf/TL-211-Exterior-Interior.reqif#coreContent/reqIF_content/specifications/specificationDataObjects/0/children/specHierarchies/0/children/specHierarchies/0/children/specHierarchies/7/children/specHierarchies/4/identifier/attributeName
[670 more]

@Kira-Cesonia
Copy link
Author

@bartoszwalacik : Any idea what could cause this? I was under the impression that the Changes should equal the Diff between two versions.

@Kira-Cesonia
Copy link
Author

I have no analysed the changelogs above in detail, and it seems to me like they don't represent all the changes. For example, when reading all the value changes in the "working version" changelog and adding them up...

  • coreContent/ reqIF_content/ specObjects/ specObjects/ 13/ identifier.value changes from id_electrical_generator_unit to id_electrical_harness
  • coreContent/ reqIF_content/ specObjects/ specObjects/ 13/ longName.value changes from Gear_Box_Unit to Electrical_Harness
  • coreContent/ reqIF_content/ specObjects/ specObjects/ 13/ values/ attributeValues/ 0/ theValue.value changes from [Generator Description] to [Harness Description]

So, according to the changelog the identifier and description changes from Generator to Harness, but the name changes from Gear Box to Harness. But in reality (comparing the first and last Shadows), all aspects should have changed from Gear Box to Harness.

I have attached a spreadsheet in which I analysed this, in case it helps.
Javers Changelog Analysis.xlsx

@Kira-Cesonia
Copy link
Author

Kira-Cesonia commented Jul 7, 2020

I have also tried "cheating" by adding an int revision fieldto the top-level entity and incrementing it by one every time I commit, but that only makes it behave more erratic.

For example, without the "revision" field:

  • Import -> V1.0
  • Remove Lighting -> MISSING
  • Remove Exterior -> V3.0
  • Remove Steering -> V4.0
  • Remove Braking -> V5.0

With the "revision" field:

  • Import -> MISSING
  • Remove Lighting -> MISSING
  • Remove Exterior -> MISSING
  • Remove Steering -> V4.0, revision = 4
  • Remove Braking -> V5.0, revision = 5

How can this happen? revision is a perfectly innocent int. How can it mess up things like this?

public class ReqIf extends XML_Tag {
	public List<ReqifNamespace> additionalNamespaces;
	public CoreContent coreContent;
	public TheHeader theHeader;
	public ToolExtensions toolExtensions;
	public int revision;
	@Id
	public String _id;
		reqIfData.revision++;
		updateCurrentVersion(reqIfData, workspaceID, databaseName);
		updateJaversVersion(reqIfData, workspaceID, databaseName, userName);

By the way, this also happens when I use a String for the revision.

@Kira-Cesonia
Copy link
Author

Okay, I finally found out the reason behind all this eclectic behaviour, as well as the reason why I could not reproduce it with a simplified version.

The reason was simply the default limit for snapshots, as became apparent when I looked at the JqlQuery printout:

JqlQuery {
  IdFilter{ globalId: '...ReqIf/TL-211-Exterior-Interior.reqif' }
  QueryParams{ aggregate: 'true', limit: '100' }
  ShadowScopeDefinition{ shadowScope: 'SHALLOW' }
  Stats{  
    executed in millis: '3628'  
    DB queries: '1522'  
    all snapshots: '1768'  
    SHALLOW snapshots: '101'  
    CHILD_VALUE_OBJECT snapshots: '1667'  
  }
}

So it started working once I set up my query like this:

JqlQuery entryQuery = QueryBuilder.byInstanceId(entryId, entryClass).limit(9999).build();

With that knowledge, I believe I'll be able to create a test case for the erratic behavior that happens if the limit is set too low. I don't know what the intended behavior here is, but seeing as this cost me over two days to figure it out, I can't feel that this is intended behavior .

On a related note, is there a way to turn off the limit? I have it set to the Java maximum for int, aka 2147483647 for now, and assuming production-size updates generate only about 2000 new snapshots apiece (that is actually very realistic, since I've seen some of these ReqIF Files, and they are demonic beasts from the doom dimension), that would leave us with a hard limit of about 1 million versions per file, which is probably enough, but still...

@Kira-Cesonia
Copy link
Author

Kira-Cesonia commented Jul 7, 2020

@bartoszwalacik : I have now been able to replicate this in a simplified version as a test. If you tell me where and how to push it, I can give you access. I have already tried pushing to github in a new branch, but for some strange reason that did not work.

The basic test looks like this, but it also requires the data objects to go with it:

package javers;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.ArrayList;
import java.util.List;

import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
import org.javers.repository.jql.JqlQuery;
import org.javers.repository.jql.QueryBuilder;
import org.javers.shadow.Shadow;
import org.junit.jupiter.api.*;

import dataObjects.simpleReqif.SimpleCoreContent;
import dataObjects.simpleReqif.SimpleHierarchy;
import dataObjects.simpleReqif.SimpleReqif;
import dataObjects.simpleReqif.SimpleReqifContent;
import dataObjects.simpleReqif.SimpleSpecObject;
import dataObjects.simpleReqif.SimpleSpecObjects;
import exceptions.DatabaseNotConnectedException;

public class MissingVersionsTest {
	
	private static final String REQ_IF_NAME = "Test ReqIF";
	private static final String ID_BODY = "id_body";
	private static final String ID_EXTERIOR = "id_exterior";
	private static final String ID_BONNET = "id_bonnet";
	private static final String ID_DOORS = "id_doors";
	private static final String ID_FRONT_DOORS = "id_front_doors";
	private static final String ID_REAR_DOORS = "id_rear_doors";
	private static final String ID_TRUNK_BOOT = "id_trunk/boot";
	private static final String ID_SHELL = "id_shell";
	private static final String ID_SUNROOF = "id_sunroof";
	private static final String ID_INTERIOR = "id_interior";
	private static final String ID_CLUTCH_UNIT = "id_clutch_unit";
	private static final String ID_DISPLAY_DASHBOARD_UNIT = "id_display_dashboard_unit";
	private static final String ID_FUEL_CONTAINER = "id_fuel_container";
	private static final String ID_GEAR_BOX = "id_gear_box";
	private static final String ID_LUGGAGE = "id_luggage";
	private static final String ID_OCCUPANTS_PASSENGERS = "id_occupants_passengers";
	private static final String ID_POWER_UNIT = "id_power_unit";
	private static final String ID_SUPPORTING_SYSTEMS = "id_supporting_systems";
	private static final String ID_AC_SYSTEM = "id_AC_System";
	private static final String ID_BRAKING_SYSTEM = "id_braking_system";
	private static final String ID_ELECTRICAL_SYSTEM = "id_electrical_system";
	private static final String ID_ELECTRICAL_GENERATOR_UNIT
		= "id_electrical_generator_unit";
	private static final String ID_ELECTRICAL_HARNESS = "id_electrical_harness";
	private static final String ID_ELECTRICAL_STORAGE_UNIT = "id_electrical_storage_unit";
	private static final String ID_FUEL_SYSTEM = "id_fuel_system";
	private static final String ID_LIGHTING_SYSTEMS = "id_lighting_systems";
	private static final String ID_STEERING_SYSTEM = "id_steering_system";
	private static final String AUTHOR_NAME = "Timmy the Test Author";
	
	private SimpleReqif simpleReqif;
	private Javers javers;
	private SimpleSpecObject specObjectExterior;
	private SimpleSpecObject specObjectSteeringSystem;
	private SimpleSpecObject specObjectLightingSystems;
	private SimpleSpecObject specObjectBrakingSystem;
	private SimpleHierarchy hierarchyBody;
	private SimpleHierarchy hierarchyExterior;
	private SimpleHierarchy hierarchySupportingSystems;
	private SimpleHierarchy hierarchyBrakingSystem;
	private SimpleHierarchy hierarchyLightingSystems;
	private SimpleHierarchy hierarchySteeringSystem;
	
	@BeforeEach
	public void setUpData() throws DatabaseNotConnectedException {
		List<SimpleSpecObject> simpleSpecObjects = prepareSimpleSpecObjects();
		List<SimpleHierarchy> simpleHierarchyList = prepareSimpleHierarchy();
		simpleReqif
			= new SimpleReqif(REQ_IF_NAME, simpleSpecObjects, simpleHierarchyList);
		javers = JaversBuilder.javers().build();
	}
	
	@Test
	public void removingSpecObjectWithChildrenLastShouldReturnCorrectAmountOfVersions() {
		
		javers.commit(AUTHOR_NAME, simpleReqif);
		removeExterior();
		javers.commit(AUTHOR_NAME, simpleReqif);
		removeSteeringSystem();
		javers.commit(AUTHOR_NAME, simpleReqif);
		removeLightingSystems();
		javers.commit(AUTHOR_NAME, simpleReqif);
		removeBrakingSystem();
		javers.commit(AUTHOR_NAME, simpleReqif);
		
		JqlQuery entryQuery
			= QueryBuilder.byInstanceId(simpleReqif.reqifName, SimpleReqif.class).limit(10).build();
		List<Shadow<SimpleReqif>> simpleReqifShadows = javers.findShadows(entryQuery);
		assertEquals(5, simpleReqifShadows.size());
	}
	
	private void removeSteeringSystem() {
		List<SimpleSpecObject> simpleSpecObjectList = getSpecObjectsList();
		simpleSpecObjectList.remove(specObjectSteeringSystem);
		hierarchySupportingSystems.children.remove(hierarchySteeringSystem);
	}
	
	private void removeLightingSystems() {
		List<SimpleSpecObject> simpleSpecObjectList = getSpecObjectsList();
		simpleSpecObjectList.remove(specObjectLightingSystems);
		hierarchySupportingSystems.children.remove(hierarchyLightingSystems);
		
	}
	
	private void removeBrakingSystem() {
		List<SimpleSpecObject> simpleSpecObjectList = getSpecObjectsList();
		simpleSpecObjectList.remove(specObjectBrakingSystem);
		hierarchySupportingSystems.children.remove(hierarchyBrakingSystem);
	}
	
	private void removeExterior() {
		List<SimpleSpecObject> simpleSpecObjectList = getSpecObjectsList();
		simpleSpecObjectList.remove(specObjectExterior);
		hierarchyBody.children.remove(hierarchyExterior);
	}
	
	private SimpleReqifContent getSimpleReqifContent() {
		SimpleCoreContent simpleCoreContent = simpleReqif.simpleCoreContent;
		SimpleReqifContent simpleReqifContent = simpleCoreContent.simpleReqifContent;
		return simpleReqifContent;
	}
	
	private List<SimpleSpecObject> getSpecObjectsList() {
		SimpleReqifContent simpleReqifContent = getSimpleReqifContent();
		SimpleSpecObjects simpleSpecObjects = simpleReqifContent.simpleSpecObjects;
		List<SimpleSpecObject> simpleSpecObjectList
			= simpleSpecObjects.simpleSpecObjectList;
		return simpleSpecObjectList;
	}
	
	private List<SimpleSpecObject> prepareSimpleSpecObjects() {
		List<SimpleSpecObject> simpleSpecObjects = new ArrayList<>();
		simpleSpecObjects.add(new SimpleSpecObject(ID_BODY));
		specObjectExterior = new SimpleSpecObject(ID_EXTERIOR);
		simpleSpecObjects.add(specObjectExterior);
		simpleSpecObjects.add(new SimpleSpecObject(ID_BONNET));
		simpleSpecObjects.add(new SimpleSpecObject(ID_DOORS));
		simpleSpecObjects.add(new SimpleSpecObject(ID_FRONT_DOORS));
		simpleSpecObjects.add(new SimpleSpecObject(ID_REAR_DOORS));
		simpleSpecObjects.add(new SimpleSpecObject(ID_TRUNK_BOOT));
		simpleSpecObjects.add(new SimpleSpecObject(ID_SHELL));
		simpleSpecObjects.add(new SimpleSpecObject(ID_SUNROOF));
		simpleSpecObjects.add(new SimpleSpecObject(ID_INTERIOR));
		simpleSpecObjects.add(new SimpleSpecObject(ID_CLUTCH_UNIT));
		simpleSpecObjects.add(new SimpleSpecObject(ID_DISPLAY_DASHBOARD_UNIT));
		simpleSpecObjects.add(new SimpleSpecObject(ID_FUEL_CONTAINER));
		simpleSpecObjects.add(new SimpleSpecObject(ID_GEAR_BOX));
		simpleSpecObjects.add(new SimpleSpecObject(ID_LUGGAGE));
		simpleSpecObjects.add(new SimpleSpecObject(ID_OCCUPANTS_PASSENGERS));
		simpleSpecObjects.add(new SimpleSpecObject(ID_POWER_UNIT));
		simpleSpecObjects.add(new SimpleSpecObject(ID_SUPPORTING_SYSTEMS));
		simpleSpecObjects.add(new SimpleSpecObject(ID_AC_SYSTEM));
		specObjectBrakingSystem = new SimpleSpecObject(ID_BRAKING_SYSTEM);
		simpleSpecObjects.add(specObjectBrakingSystem);
		simpleSpecObjects.add(new SimpleSpecObject(ID_ELECTRICAL_SYSTEM));
		simpleSpecObjects.add(new SimpleSpecObject(ID_ELECTRICAL_GENERATOR_UNIT));
		simpleSpecObjects.add(new SimpleSpecObject(ID_ELECTRICAL_HARNESS));
		simpleSpecObjects.add(new SimpleSpecObject(ID_ELECTRICAL_STORAGE_UNIT));
		simpleSpecObjects.add(new SimpleSpecObject(ID_FUEL_SYSTEM));
		specObjectLightingSystems = new SimpleSpecObject(ID_LIGHTING_SYSTEMS);
		simpleSpecObjects.add(specObjectLightingSystems);
		specObjectSteeringSystem = new SimpleSpecObject(ID_STEERING_SYSTEM);
		simpleSpecObjects.add(specObjectSteeringSystem);
		return simpleSpecObjects;
	}
	
	private List<SimpleHierarchy> prepareSimpleHierarchy() {
		List<SimpleHierarchy> doorsChildren = new ArrayList<>();
		doorsChildren.add(new SimpleHierarchy(ID_FRONT_DOORS));
		doorsChildren.add(new SimpleHierarchy(ID_REAR_DOORS));
		doorsChildren.add(new SimpleHierarchy(ID_TRUNK_BOOT));
		
		List<SimpleHierarchy> exteriorChildren = new ArrayList<>();
		exteriorChildren.add(new SimpleHierarchy(ID_BONNET));
		exteriorChildren.add(new SimpleHierarchy(ID_DOORS, doorsChildren));
		exteriorChildren.add(new SimpleHierarchy(ID_SHELL));
		exteriorChildren.add(new SimpleHierarchy(ID_SUNROOF));
		
		List<SimpleHierarchy> electricalSystemChildren = new ArrayList<>();
		electricalSystemChildren.add(new SimpleHierarchy(ID_ELECTRICAL_GENERATOR_UNIT));
		electricalSystemChildren.add(new SimpleHierarchy(ID_ELECTRICAL_HARNESS));
		electricalSystemChildren.add(new SimpleHierarchy(ID_ELECTRICAL_STORAGE_UNIT));
		
		List<SimpleHierarchy> supportingSystemsChildren = new ArrayList<>();
		supportingSystemsChildren.add(new SimpleHierarchy(ID_AC_SYSTEM));
		hierarchyBrakingSystem = new SimpleHierarchy(ID_BRAKING_SYSTEM);
		supportingSystemsChildren.add(hierarchyBrakingSystem);
		supportingSystemsChildren.add(
			new SimpleHierarchy(ID_ELECTRICAL_SYSTEM, electricalSystemChildren)
		);
		supportingSystemsChildren.add(new SimpleHierarchy(ID_FUEL_SYSTEM));
		hierarchyLightingSystems = new SimpleHierarchy(ID_LIGHTING_SYSTEMS);
		supportingSystemsChildren.add(hierarchyLightingSystems);
		hierarchySteeringSystem = new SimpleHierarchy(ID_STEERING_SYSTEM);
		supportingSystemsChildren.add(hierarchySteeringSystem);
		
		List<SimpleHierarchy> interiorChildren = new ArrayList<>();
		interiorChildren.add(new SimpleHierarchy(ID_CLUTCH_UNIT));
		interiorChildren.add(new SimpleHierarchy(ID_DISPLAY_DASHBOARD_UNIT));
		interiorChildren.add(new SimpleHierarchy(ID_FUEL_CONTAINER));
		interiorChildren.add(new SimpleHierarchy(ID_GEAR_BOX));
		interiorChildren.add(new SimpleHierarchy(ID_LUGGAGE));
		interiorChildren.add(new SimpleHierarchy(ID_OCCUPANTS_PASSENGERS));
		interiorChildren.add(new SimpleHierarchy(ID_POWER_UNIT));
		hierarchySupportingSystems
			= new SimpleHierarchy(ID_SUPPORTING_SYSTEMS, supportingSystemsChildren);
		interiorChildren.add(hierarchySupportingSystems);
		
		List<SimpleHierarchy> bodyChildren = new ArrayList<>();
		hierarchyExterior = new SimpleHierarchy(ID_EXTERIOR, exteriorChildren);
		bodyChildren.add(hierarchyExterior);
		bodyChildren.add(new SimpleHierarchy(ID_INTERIOR, interiorChildren));
		
		List<SimpleHierarchy> simpleHierarchyList = new ArrayList<>();
		hierarchyBody = new SimpleHierarchy(ID_BODY, bodyChildren);
		simpleHierarchyList.add(hierarchyBody);
		
		return simpleHierarchyList;
	}
}

Here's those data objects:

package dataObjects.simpleReqif;

import java.util.List;

import org.javers.core.metamodel.annotation.Id;

public class SimpleReqif {
	@Id
	public String reqifName;
	public SimpleCoreContent simpleCoreContent;
	
	public SimpleReqif(
		String reqifName,
		List<SimpleSpecObject> simpleSpecObjects,
		List<SimpleHierarchy> simpleHierarchyList
	) {
		this.reqifName = reqifName;
		simpleCoreContent = new SimpleCoreContent(simpleSpecObjects, simpleHierarchyList
	);
	}
}
package dataObjects.simpleReqif;

import java.util.List;

public class SimpleCoreContent {
	public SimpleReqifContent simpleReqifContent;
	
	public SimpleCoreContent(
		List<SimpleSpecObject> simpleSpecObjects,
		List<SimpleHierarchy> simpleHierarchyList
	) {
		simpleReqifContent
			= new SimpleReqifContent(simpleSpecObjects, simpleHierarchyList);
	}
	
}
package dataObjects.simpleReqif;

import java.util.List;

public class SimpleReqifContent {
	public SimpleSpecObjects simpleSpecObjects;
	public List<SimpleHierarchy> simpleHierarchyList;
	
	public SimpleReqifContent(
		List<SimpleSpecObject> simpleSpecObjectList,
		List<SimpleHierarchy> simpleHierarchyList
	) {
		simpleSpecObjects = new SimpleSpecObjects(simpleSpecObjectList);
		this.simpleHierarchyList = simpleHierarchyList;
	}
	
}
package dataObjects.simpleReqif;

import java.util.ArrayList;
import java.util.List;

public class SimpleHierarchy {
	public String specObjectReference;
	public List<SimpleHierarchy> children;
	
	public SimpleHierarchy(String specObjectReference, List<SimpleHierarchy> children) {
		this.specObjectReference = specObjectReference;
		this.children = children;
	}
	
	public SimpleHierarchy(String specObjectReference) {
		this(specObjectReference, new ArrayList<SimpleHierarchy>());
	}
}
package dataObjects.simpleReqif;

import java.util.List;

public class SimpleSpecObjects {
	public List<SimpleSpecObject> simpleSpecObjectList;
	
	public SimpleSpecObjects(List<SimpleSpecObject> simpleSpecObjectList) {
		this.simpleSpecObjectList = simpleSpecObjectList;
	}
	
}
package dataObjects.simpleReqif;

public class SimpleSpecObject {
	public String identifier;
	
	public SimpleSpecObject(String identifier) {
		this.identifier = identifier;
	}
}

@bartoszwalacik
Copy link
Member

@Kira-Cesonia quite a long story, any wrap up?

@bartoszwalacik
Copy link
Member

@Kira-Cesonia
Copy link
Author

Kira-Cesonia commented Jul 9, 2020

Well, sorry, I've been working on this issue for three days straight. I'll try to wrap it up. =>,<=

Not so much a bug, as more unexpected behavior and unclear documentation. I was aware of the limit functionality, but I would never have guessed that the limit would cause fewer versions to be loaded than expected, especially in a "V1, V4, V5" pattern. From what I read in the documentation, I figured that it would still load all the top-level objects, and then lose some of the child level objects or something. And I re-read the thing twice!

In fact, since that is apparently not what the limit does, is there another functionality that I can use to load only the top-level entities, so I can just get an overview of how many versions there are without loading the whole object tree to save time, and then use version-specific requests to get a certain version? The situation I have here is that I only have the top level entity, while all the other objects are effectively children of that entity.

Also, is there not an option for disabling the limit so I can always guarantee that all the versions are loaded? That would be kind of important.

Alternatively, to support pagination, it would really help to have a functionality to support either the latest, or the latest X version, such as I already mentioned on https://stackoverflow.com/questions/62467169/javers-quering-the-current-state-of-the-repository . I have also opened an issue for that here: #1002

@bartoszwalacik
Copy link
Member

Please tell me where the docs is misleading, I will fix it.

QueryBuilder.limit() limits Snapshots not Shadows.
A Shadow Query with SHALLOW scope doesn't load referenced entities

    /**
     * Limits number of Snapshots to be fetched from JaversRepository in a single query,
     * default is 100.
     * <br/><br/>
     *
     * Always choose reasonable limits to improve performance of your queries.
     */
    public QueryBuilder limit(int limit) {
        queryParamsBuilder.limit(limit);
        return this;
    }

    /**
     * Default scope.<br/>
     * Object shadows are created only from snapshots selected directly in the main JQL query.
     * <br/><br/>
     *
     * This query is fast (no additional queries are executed)
     * but shadows are shallow. Most object references <b>are nulled</b>.
     * <br/><br/>
     *
     * You can initialize referenced objects using the wider scopes:
     * child-value-object, commit-deep or deep+.
     */
    SHALLOW,

@Kira-Cesonia
Copy link
Author

Kira-Cesonia commented Jul 10, 2020

I think the problem here is that the documentation is clear to the ones who wrote it and know how everything fits together, but for someone just getting started, there's a lot of correlations that are not obvious because they don't know the full picture. I think it especially lacks "that means"-sections and examples for clarification.

Allow me to attempt to write a description for the limit that I feel would be clearer and would have helped me avoid that issue:

The limit filter limits the maximum amount of snapshots loaded during a Changes, Shadows or Snapshots request. By default, it is set to 100, which works well with small data structures. However, with large data structures, it is important to increase the limit to a more generous amount, as otherwise the requests might not return the desired amount of information. Since all requests rely on Snapshots in order to generate their output, the limit affects all three types of requests.

For example, if a Shadows request would result in the loading of more Snapshots than specified by the limit, the result might be that some versions are not returned, such as :

V5.0
V4.0
V1.0

Due to the way that Javers works, it will always return the earliest and the latest version correctly, even if it means exceeding the limit. After that, Javers will attempt to re-construct versions in order from latest to earliest until it exceeds the limit, at which point it will stop after the version where it exceeded the limit.

The limit can currently be set as high as 2147483647. There is currently no way to disable the limit completely. There is currently also no way to apply a limit to the number of Changes or Versions to load.

Overall, while working with Javers, I mostly got the feeling that the documentation is actually too short, does not go into detail enough. What you have now is a good overview and introduction to Javers, but it lacks in-depth sections that help with the problems one tends to run into when actually working with the thing. =^,~'=

@bartoszwalacik
Copy link
Member

@Kira-Cesonia this is the Open Source project, writing good docs is very hard, very time consuming and very boring to most developers. I don;t have time to write and maintain book-scale docs. Docs in Javers are concise and will stay concise. I will accept your changes to javadoc for the limit() method but it must be short and preferably based on some examples.

@bartoszwalacik bartoszwalacik changed the title After three commits, only two shadows are returned Improve the javadocs for QueryBuilder.limit() - show some examples how it affects Changes and Shadow queries Jul 10, 2020
@Kira-Cesonia
Copy link
Author

Kira-Cesonia commented Jul 10, 2020

I know. This is why I took the time to write together something that I felt could be added to the documentation as simple as copy-paste.
Keep up the good work! I know I complained a lot, but really, I am grateful for all the time and effort you've been putting into this project. =^,^=

@bartoszwalacik bartoszwalacik changed the title Improve the javadocs for QueryBuilder.limit() - show some examples how it affects Changes and Shadow queries Improve the javadocs for QueryBuilder.limit() - show some examples how it affects Changes and Shadow queries. Explain why findShadowsAndStream().limit() should be used for Shadows Jul 10, 2020
@bartoszwalacik
Copy link
Member

See new javadoc for QueryBuilder.limit(), Javers.findShadows() and Javers.findShadowsAndStream()

@bartoszwalacik
Copy link
Member

fixed in 5.13.2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants