IDEA-19061 Integrate the Rearranger-plugin into core-IDEA

Finish DefaultMutableTreeNode -> ArrangementTreeNode transition
This commit is contained in:
Denis.Zhdanov
2012-08-21 14:52:31 +04:00
parent a0d858fa5b
commit d2dcc40aad
5 changed files with 22 additions and 19 deletions
@@ -60,8 +60,7 @@ public class ArrangementRuleEditingModelBuilderTest extends AbstractArrangementR
assertEquals(and(atom(PUBLIC), atom(STATIC)), modifiersUiNode.getBackingSetting());
}
// TODO den uncomment
//@Test
@Test
public void addToExistingLayer() {
myBuilder.build(and(atom(PUBLIC), atom(STATIC), atom(FIELD)), myTree, myRoot, myGrouper, myRowMappings);
myBuilder.build(and(atom(PRIVATE), atom(FIELD)), myTree, myRoot, myGrouper, myRowMappings);
@@ -171,18 +171,17 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
checkTreeNodesConsistency();
}
// TODO den uncomment
//@Test
@Test
public void removeLastRowConditionFromMultiChildrenParent() {
configure(and(atom(FIELD), atom(PUBLIC)));
configure(and(atom(FIELD), atom(STATIC)));
assertEquals(2, myRowMappings.size());
ArrangementRuleEditingModel siblingModel = myRowMappings.get(2);
assertNotNull(siblingModel);
ArrangementRuleEditingModel modelToChange = myRowMappings.get(3);
assertNotNull(modelToChange);
assertEquals(2, myRowMappings.size());
modelToChange.removeAndCondition(atom(STATIC));
@@ -199,7 +198,7 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
ArrangementTreeNode publicNode = compositeFieldNode.getFirstChild();
assertNotNull(publicNode);
assertEquals(atom(PUBLIC), publicNode.getUserObject());
assertEquals(atom(PUBLIC), publicNode.getBackingSetting());
ArrangementTreeNode atomFieldNode = compositeFieldNode.getNextSibling();
assertNotNull(atomFieldNode);
@@ -176,34 +176,38 @@ public class ArrangementConfigUtil {
* @param uiParentNode UI tree node which should hold UI nodes created for representing given settings node;
* <code>null</code> as an indication that we want to create a standalone nodes hierarchy
* @param settingsNode settings node which should be represented at the UI tree denoted by the given UI tree node
* @param model tree model to use for the tree modification
* @return pair {@code (bottom-most leaf node created; number of rows created)}
*/
@NotNull
public static Pair<ArrangementTreeNode, Integer> map(@Nullable ArrangementTreeNode uiParentNode,
@NotNull HierarchicalArrangementSettingsNode settingsNode)
@NotNull HierarchicalArrangementSettingsNode settingsNode,
@Nullable DefaultTreeModel model)
{
ArrangementTreeNode uiNode = null;
int rowsCreated = 0;
if (uiParentNode != null) {
for (int i = uiParentNode.getChildCount() - 1; i >= 0; i--) {
ArrangementTreeNode child = uiParentNode.getChildAt(i);
if (settingsNode.getCurrent().equals(child.getUserObject())) {
uiNode = child;
break;
}
if (uiParentNode != null && uiParentNode.getChildCount() > 0) {
ArrangementTreeNode child = uiParentNode.getChildAt(uiParentNode.getChildCount() - 1);
if (settingsNode.getCurrent().equals(child.getBackingSetting())) {
uiNode = child;
}
}
if (uiNode == null) {
uiNode = new ArrangementTreeNode(settingsNode.getCurrent());
if (uiParentNode != null) {
uiParentNode.add(uiNode);
if (model == null) {
uiParentNode.add(uiNode);
}
else {
model.insertNodeInto(uiNode, uiParentNode, uiParentNode.getChildCount());
}
}
rowsCreated++;
}
ArrangementTreeNode leaf = uiNode;
HierarchicalArrangementSettingsNode childSettingsNode = settingsNode.getChild();
if (childSettingsNode != null) {
Pair<ArrangementTreeNode, Integer> pair = map(uiNode, childSettingsNode);
Pair<ArrangementTreeNode, Integer> pair = map(uiNode, childSettingsNode, model);
leaf = pair.first;
rowsCreated += pair.second;
}
@@ -94,7 +94,7 @@ public class ArrangementRuleEditingModelBuilder {
HierarchicalArrangementSettingsNode grouped = grouper.group(setting);
DefaultTreeModel treeModel = (DefaultTreeModel)tree.getModel();
Pair<ArrangementTreeNode, Integer> pair = ArrangementConfigUtil.map(root, grouped);
Pair<ArrangementTreeNode, Integer> pair = ArrangementConfigUtil.map(root, grouped, treeModel);
ArrangementTreeNode topMostNode = ArrangementConfigUtil.getLastBefore(pair.first, root);
int row = initialInsertRow + pair.second - 1;
ArrangementRuleEditingModelImpl model = new ArrangementRuleEditingModelImpl(
@@ -129,7 +129,8 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo
// No refresh is necessary.
return;
}
else if (myTopMost.getUserObject().equals(node.getUserObject())) {
ArrangementSettingsNode setting = myTopMost.getBackingSetting();
if (setting != null && setting.equals(node.getBackingSetting())) {
myTopMost = node;
return;
}
@@ -181,7 +182,7 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo
return;
}
Pair<ArrangementTreeNode, Integer> replacement = ArrangementConfigUtil.map(null, grouped);
Pair<ArrangementTreeNode, Integer> replacement = ArrangementConfigUtil.map(null, grouped, null);
ArrangementTreeNode newBottom = replacement.first;
ArrangementTreeNode newTop = ArrangementConfigUtil.getRoot(newBottom);
final TIntIntHashMap rowChanges = ArrangementConfigUtil.replace(myTopMost, myBottomMost, newTop, myTreeModel);