merge r108414 from trunk to branch 5.3

TDI-25871 : fix problem of wrong display of links, avoid to use xpath to get current path to link, but try to get from elements


git-svn-id: http://talendforge.org/svn/tos/branches/branch-5_3@108417 f6f1c999-d317-4740-80b0-e6d1abc6f99e
This commit is contained in:
nrousseau
2013-09-24 03:14:44 +00:00
parent 663ebaeefa
commit 73c1ba4e8c

View File

@@ -54,6 +54,7 @@ import org.talend.core.model.metadata.builder.connection.SchemaTarget;
import org.talend.designer.fileoutputxml.managers.FOXManager;
import org.talend.repository.i18n.Messages;
import org.talend.repository.ui.wizards.metadata.connection.files.xml.extraction.XmlExtractorBgRefresher;
import org.talend.repository.ui.wizards.metadata.connection.files.xml.treeNode.Element;
import org.talend.repository.ui.wizards.metadata.connection.files.xml.treeNode.FOXTreeNode;
/**
@@ -277,7 +278,9 @@ public class Schema2XMLLinker extends TableToTreeLinker<Object, Object> {
String path = tableItem.getText();
if (path != null) {
TreeItem treeItem = getTreeItem(treeNode);
addLoopLink(tableItem, tableItem.getData(), xmlViewer.getTree(), (FOXTreeNode) treeItem.getData());
if (treeItem != null) {
addLoopLink(tableItem, tableItem.getData(), xmlViewer.getTree(), (FOXTreeNode) treeItem.getData());
}
}
}
createLoopLinks(treeNode.getChildren());
@@ -294,47 +297,56 @@ public class Schema2XMLLinker extends TableToTreeLinker<Object, Object> {
return path;
}
public TreeItem getTreeItem(FOXTreeNode foxTreeNode) {
String path = getAbsoluteXPath(foxTreeNode);
TreeItem[] items = xmlViewer.getTree().getItems();
public TreeItem getTreeItem(TreeItem[] items, FOXTreeNode treeNode, boolean expandedOnly) {
TreeItem item = null;
while (!path.isEmpty()) {
for (TreeItem curItem : items) {
if (path.equals("/" + curItem.getText()) || path.startsWith("/" + curItem.getText() + "/")) {
item = curItem;
path = path.replaceFirst("/" + curItem.getText(), "");
break;
for (TreeItem curItem : items) {
// call getText method since we are in a lazy tree.
// it will force to load this item in the GUI (since it should be displayed in all cases)
// without this, the data will be null, and we can't retrieve anything
curItem.getText();
if (curItem.getData() != null) {
if (curItem.getData().equals(treeNode)) {
return curItem;
}
// will check if one of the parent of the treeNode is this one.
if (containsTreeNode((FOXTreeNode) curItem.getData(), treeNode)) {
if (!expandedOnly || curItem.getExpanded()) {
return getTreeItem(curItem.getItems(), treeNode, expandedOnly);
} else {
return curItem;
}
}
}
if (!path.isEmpty()) {
items = item.getItems();
}
}
return item;
}
public TreeItem getFirstVisibleTreeItemOfPath(FOXTreeNode foxTreeNode) {
String path = getAbsoluteXPath(foxTreeNode);
TreeItem[] items = xmlViewer.getTree().getItems();
TreeItem item = null;
while (!path.isEmpty()) {
for (TreeItem curItem : items) {
if (path.equals("/" + curItem.getText()) || path.startsWith("/" + curItem.getText() + "/")) {
item = curItem;
path = path.replaceFirst("/" + curItem.getText(), "");
break;
}
}
if (!path.isEmpty()) {
if (!item.getExpanded()) {
return item;
}
items = item.getItems();
/**
* DOC nrousseau Comment method "containsTreeNode".
*
* @param data
* @param treeNode
* @return
*/
private boolean containsTreeNode(FOXTreeNode currentNode, FOXTreeNode leafNode) {
FOXTreeNode parentOfLeafNode = leafNode.getParent();
if (parentOfLeafNode != null) {
if (parentOfLeafNode.equals(currentNode)) {
return true;
}
return containsTreeNode(currentNode, parentOfLeafNode);
}
return item;
return false;
}
public TreeItem getTreeItem(FOXTreeNode foxTreeNode) {
TreeItem[] items = xmlViewer.getTree().getItems();
return getTreeItem(items, foxTreeNode, false);
}
public TreeItem getFirstVisibleTreeItemOfPath(FOXTreeNode foxTreeNode) {
TreeItem[] items = xmlViewer.getTree().getItems();
return getTreeItem(items, foxTreeNode, true);
}
/**