|
Lines 26-31
Link Here
|
| 26 |
import org.eclipse.wst.dtd.core.internal.DTDNode; |
26 |
import org.eclipse.wst.dtd.core.internal.DTDNode; |
| 27 |
import org.eclipse.wst.dtd.core.internal.Element; |
27 |
import org.eclipse.wst.dtd.core.internal.Element; |
| 28 |
import org.eclipse.wst.dtd.ui.internal.DTDUIMessages; |
28 |
import org.eclipse.wst.dtd.ui.internal.DTDUIMessages; |
|
|
29 |
import org.w3c.dom.Node; |
| 29 |
|
30 |
|
| 30 |
|
31 |
|
| 31 |
public class DragContentModelCommand extends DefaultDragAndDropCommand { |
32 |
public class DragContentModelCommand extends DefaultDragAndDropCommand { |
|
Lines 73-78
Link Here
|
| 73 |
return; |
74 |
return; |
| 74 |
} |
75 |
} |
| 75 |
|
76 |
|
|
|
77 |
boolean contentModelReplaced = false; |
| 76 |
Iterator iter = sources.iterator(); |
78 |
Iterator iter = sources.iterator(); |
| 77 |
while (iter.hasNext()) { |
79 |
while (iter.hasNext()) { |
| 78 |
DTDNode node = (DTDNode) iter.next(); |
80 |
DTDNode node = (DTDNode) iter.next(); |
|
Lines 81-86
Link Here
|
| 81 |
if (element.getContentModel() == node) { |
83 |
if (element.getContentModel() == node) { |
| 82 |
continue; |
84 |
continue; |
| 83 |
} |
85 |
} |
|
|
86 |
if(isAncestor(element.getContentModel(), node)) { |
| 87 |
contentModelReplaced = true; |
| 88 |
} |
| 84 |
element.replaceContentModel(this, (CMNode) node); |
89 |
element.replaceContentModel(this, (CMNode) node); |
| 85 |
} |
90 |
} |
| 86 |
else { |
91 |
else { |
|
Lines 91-98
Link Here
|
| 91 |
group.insertIntoModel(this, (CMNode) referenceNode, (CMNode) node, isAfter()); |
96 |
group.insertIntoModel(this, (CMNode) referenceNode, (CMNode) node, isAfter()); |
| 92 |
|
97 |
|
| 93 |
} |
98 |
} |
| 94 |
DTDNode nodeParent = (DTDNode) node.getParentNode(); |
99 |
if(!contentModelReplaced) { |
| 95 |
nodeParent.delete(this, node); |
100 |
DTDNode nodeParent = (DTDNode) node.getParentNode(); |
|
|
101 |
nodeParent.delete(this, node); |
| 102 |
} |
| 103 |
else { |
| 104 |
// replace only the first selected node |
| 105 |
break; |
| 106 |
} |
| 96 |
} |
107 |
} |
| 97 |
} |
108 |
} |
| 98 |
dtdFile.getDTDModel().endRecording(this); |
109 |
dtdFile.getDTDModel().endRecording(this); |
|
Lines 110-113
Link Here
|
| 110 |
|
121 |
|
| 111 |
return super.getFeedback(); |
122 |
return super.getFeedback(); |
| 112 |
} |
123 |
} |
|
|
124 |
|
| 125 |
/** |
| 126 |
* Returns with true if node1 is an ancestor of node2. |
| 127 |
*/ |
| 128 |
private boolean isAncestor(Node node1, Node node2) { |
| 129 |
boolean result = false; |
| 130 |
for (Node parent = node2; parent != null; parent = parent.getParentNode()) { |
| 131 |
if (parent == node1) { |
| 132 |
result = true; |
| 133 |
break; |
| 134 |
} |
| 135 |
} |
| 136 |
return result; |
| 137 |
} |
| 113 |
} |
138 |
} |