Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 247136 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/wst/dtd/ui/internal/dnd/DragContentModelCommand.java (-2 / +27 lines)
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
}

Return to bug 247136