1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.treetank.service.xml.diff;
29
30 import org.treetank.api.INodeReadTrx;
31 import org.treetank.exception.TTException;
32 import org.treetank.exception.TTIOException;
33 import org.treetank.node.ElementNode;
34 import org.treetank.node.IConstants;
35 import org.treetank.service.xml.diff.DiffFactory.Builder;
36
37
38
39
40
41
42
43
44 final class FullDiff extends AbsDiff {
45
46
47
48
49
50
51
52
53
54 FullDiff(final Builder paramBuilder) throws TTException {
55 super(paramBuilder);
56 }
57
58
59
60 @Override
61 boolean checkNodes(final INodeReadTrx paramFirstRtx, final INodeReadTrx paramSecondRtx) throws TTIOException {
62 assert paramFirstRtx != null;
63 assert paramSecondRtx != null;
64
65 boolean found = false;
66
67 if (paramFirstRtx.getNode().getDataKey() == paramSecondRtx.getNode().getDataKey()
68 && paramFirstRtx.getNode().equals(paramSecondRtx.getNode())) {
69 final long nodeKey = paramFirstRtx.getNode().getDataKey();
70
71 if (paramFirstRtx.getNode().getKind() == IConstants.ELEMENT) {
72 if (((ElementNode)paramFirstRtx.getNode()).getNamespaceCount() == 0
73 && ((ElementNode)paramFirstRtx.getNode()).getAttributeCount() == 0
74 && ((ElementNode)paramSecondRtx.getNode()).getAttributeCount() == 0
75 && ((ElementNode)paramSecondRtx.getNode()).getNamespaceCount() == 0) {
76 found = true;
77 } else {
78 if (((ElementNode)paramFirstRtx.getNode()).getNamespaceCount() == 0) {
79 found = true;
80 } else {
81 for (int i = 0; i < ((ElementNode)paramFirstRtx.getNode()).getNamespaceCount(); i++) {
82 paramFirstRtx.moveToNamespace(i);
83 for (int j = 0; j < ((ElementNode)paramSecondRtx.getNode()).getNamespaceCount(); j++) {
84 paramSecondRtx.moveToNamespace(i);
85
86 if (paramFirstRtx.getNode().equals(paramSecondRtx.getNode())) {
87 found = true;
88 break;
89 }
90 }
91 paramFirstRtx.moveTo(nodeKey);
92 paramSecondRtx.moveTo(nodeKey);
93 }
94 }
95
96 if (found) {
97 for (int i = 0; i < ((ElementNode)paramFirstRtx.getNode()).getAttributeCount(); i++) {
98 paramFirstRtx.moveToAttribute(i);
99 for (int j = 0; j < ((ElementNode)paramSecondRtx.getNode()).getAttributeCount(); j++) {
100 paramSecondRtx.moveToAttribute(i);
101
102 if (paramFirstRtx.getNode().equals(paramSecondRtx.getNode())) {
103 found = true;
104 break;
105 }
106 }
107 paramFirstRtx.moveTo(nodeKey);
108 paramSecondRtx.moveTo(nodeKey);
109 }
110 }
111 }
112 } else {
113 found = true;
114 }
115 }
116
117 return found;
118 }
119 }