// sn0 sn1 sn2
// ci2 cn2
//
Pair<DocOp, DocOp> c = Decomposer.decompose(clientOp);
Pair<DocOp, DocOp> s = Decomposer.decompose(serverOp);
DocOp ci0 = c.first;
DocOp cn0 = c.second;
DocOp si0 = s.first;
DocOp sn0 = s.second;
OperationPair<DocOp> r1 = new InsertionTransformer().transformOperations(ci0, si0);
DocOp ci1 = r1.clientOp();
DocOp si1 = r1.serverOp();
OperationPair<DocOp> r2 =
new InsertionNoninsertionTransformer().transformOperations(ci1, sn0);
DocOp ci2 = r2.clientOp();
DocOp sn1 = r2.serverOp();
OperationPair<DocOp> r3 =
new InsertionNoninsertionTransformer().transformOperations(si1, cn0);
DocOp si2 = r3.clientOp();
DocOp cn1 = r3.serverOp();
OperationPair<DocOp> r4 = new NoninsertionTransformer().transformOperations(cn1, sn1);
DocOp cn2 = r4.clientOp();
DocOp sn2 = r4.serverOp();
return new OperationPair<DocOp>(
Composer.compose(ci2, cn2),
Composer.compose(si2, sn2));
} catch (OperationException e) {
throw new TransformException(e);