The functionality for concurrent PCC modifications is
based on SDO mechanism ChangeSummary
(pccObject.getDataGraph().getChangeSummary()). The modification of PCC works as
follows:
- Change logging is enabled on
client side during PCC modifications.
- Synchronize operation is
available on client that sends the modified PCC to the server.
- The server receives the new
version of PCC and applies changes to its version of PCC as follows:
- For each changed node in
client PCC, a corresponding node on server PCC is found.
- It is checked if server node
is the same as client old version of the node. SDO supplies
changeSummaryObject.getOldValues() method. The method is invoked on
client's version of PCC and returns previous values of properties. Each property
must be equal with server's version of node.
- If there are no conflicts,
changes are applied.
- For each node to delete,
server node properties are compared with old version of client node
properties. If the node has not been changed, node is deleted.
- For each node to add, the node
is added to the corresponding parent node on the server.
- If changes can not be applied
because of change conflicts, a warning is displayed on client side. Text
compare is displayed. The client must manually check for conflicting nodes
and merge modifications on the server version. (work in progress)
- The server broadcasts events to
all active users informing them about PCC changes. (work in progress)
Note 1: If a node is deleted, ChangeSummary contains
two entries: the deleted node and the parent node of the deleted one. In the
parent node, the chananged property is a list that contained the deleted one.
To ensure non-conflicting updates, the change is applied once only on server.
The node that corresponds to the deleted one is found on the list on server PCC
and removed from the list.
Note 2: Before applying changes, the new PCC is
validated with xsd definition for correctness.
Pawel