Grouping in ExternalProjectDataSelectorDialog

This commit is contained in:
Fedor Korotkov
2018-11-08 14:25:37 +03:00
committed by Vladislav.Soroka
parent 9b48f9a2d9
commit 5874b0d25b
5 changed files with 54 additions and 12 deletions
@@ -2,6 +2,7 @@ package com.intellij.openapi.externalSystem.model.project;
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -223,6 +224,19 @@ public class ModuleData extends AbstractNamedData implements Named, ExternalConf
myProperties.put(key, value);
}
@Nullable
public String getIdeGrouping() {
String internalName = StringUtil.nullize(getInternalName());
String parentGrouping = getIdeParentGrouping();
if (parentGrouping == null) return internalName;
return StringUtil.join(parentGrouping, ".", internalName);
}
@Nullable
public String getIdeParentGrouping() {
return StringUtil.nullize(getGroup());
}
@Override
public boolean equals(Object o) {
if (!(o instanceof ModuleData)) return false;
@@ -288,6 +288,19 @@ public class ExternalSystemApiUtil {
}
}
public static void visitChildrenFirst(@Nullable DataNode node, @NotNull Consumer<? super DataNode<?>> consumer) {
if (node == null) return;
Queue<DataNode> toProcess = ContainerUtil.newLinkedList(node);
while (!toProcess.isEmpty()) {
DataNode<?> node0 = toProcess.poll();
consumer.consume(node0);
for (DataNode<?> child : node0.getChildren()) {
toProcess.offer(child);
}
}
}
@NotNull
public static <T> Collection<DataNode<T>> findAllRecursively(@Nullable final DataNode<?> node,
@NotNull final Key<T> key) {
@@ -311,6 +311,7 @@ public class ExternalProjectDataSelectorDialog extends DialogWrapper {
private Couple<CheckedTreeNode> createRoot() {
final Map<DataNode, DataNodeCheckedTreeNode> treeNodeMap = ContainerUtil.newIdentityTroveMap();
final Map<String, DataNode> ideGroupingMap = ContainerUtil.newHashMap();
final DataNodeCheckedTreeNode[] preselectedNode = {null};
final DataNodeCheckedTreeNode[] rootModuleNode = {null};
@@ -328,7 +329,7 @@ public class ExternalProjectDataSelectorDialog extends DialogWrapper {
final int[] modulesCount = {0};
ExternalSystemApiUtil.visit(myProjectInfo.getExternalProjectStructure(), node -> {
ExternalSystemApiUtil.visitChildrenFirst(myProjectInfo.getExternalProjectStructure(), node -> {
final Key key = node.getKey();
if (!myPublicKeys.contains(key)) return;
@@ -353,20 +354,31 @@ public class ExternalProjectDataSelectorDialog extends DialogWrapper {
if (myPreselectedNodeObject != null && myPreselectedNodeObject.equals(node.getData())) {
preselectedNode[0] = treeNode;
}
DataNode parent = node.getParent();
if (node.getData() instanceof ModuleData) {
if (key.equals(ProjectKeys.MODULE) && myProjectInfo.getExternalProjectPath().equals(((ModuleData)node.getData()).getLinkedExternalProjectPath())) {
ModuleData moduleData = (ModuleData)node.getData();
if (key.equals(ProjectKeys.MODULE) && myProjectInfo.getExternalProjectPath().equals(moduleData.getLinkedExternalProjectPath())) {
rootModuleNode[0] = treeNode;
}
String ideGrouping = moduleData.getIdeGrouping();
if (ideGrouping != null) {
ideGroupingMap.put(ideGrouping, node);
}
String ideParentGrouping = moduleData.getIdeParentGrouping();
DataNode structuralParent = ideParentGrouping != null ? ideGroupingMap.get(ideParentGrouping) : null;
if (structuralParent != null) {
parent = structuralParent;
}
}
treeNode.setEnabled(myIgnorableKeys.contains(key));
treeNodeMap.put(node, treeNode);
final DataNode parent = node.getParent();
if (parent != null) {
final CheckedTreeNode parentTreeNode = treeNodeMap.get(parent);
if (parentTreeNode != null) {
parentTreeNode.add(treeNode);
}
}
treeNode.setEnabled(myIgnorableKeys.contains(key));
treeNodeMap.put(node, treeNode);
}
});
@@ -132,16 +132,13 @@ public class ModuleNode extends ExternalSystemNode<ModuleData> {
public String getIdeGrouping() {
ModuleData data = getData();
if (data == null) return null;
String internalName = StringUtil.nullize(data.getInternalName());
String parentGrouping = getIdeParentGrouping();
if (parentGrouping == null) return internalName;
return StringUtil.join(parentGrouping, ".", internalName);
return data.getIdeGrouping();
}
@Nullable
public String getIdeParentGrouping() {
ModuleData data = getData();
if (data == null) return null;
return StringUtil.nullize(data.getGroup());
return data.getIdeParentGrouping();
}
}
@@ -19,15 +19,17 @@ import com.intellij.openapi.externalSystem.ExternalSystemUiAware;
import com.intellij.openapi.externalSystem.importing.ExternalProjectStructureCustomizer;
import com.intellij.openapi.externalSystem.model.DataNode;
import com.intellij.openapi.externalSystem.model.Key;
import com.intellij.openapi.externalSystem.model.ProjectKeys;
import com.intellij.openapi.externalSystem.model.project.Identifiable;
import com.intellij.openapi.externalSystem.model.project.ModuleData;
import com.intellij.openapi.util.Couple;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData;
import javax.swing.*;
import java.util.Collections;
import java.util.Set;
/**
@@ -35,7 +37,7 @@ import java.util.Set;
*/
public class GradleProjectStructureCustomizer extends ExternalProjectStructureCustomizer {
private final Set<Key<GradleSourceSetData>> myKeys = Collections.singleton(GradleSourceSetData.KEY);
private final Set<Key<? extends Identifiable>> myKeys = ContainerUtil.newHashSet(GradleSourceSetData.KEY, ProjectKeys.MODULE);
@NotNull
@Override
@@ -68,6 +70,10 @@ public class GradleProjectStructureCustomizer extends ExternalProjectStructureCu
final GradleSourceSetData data = (GradleSourceSetData)node.getData();
return Couple.of("Source Set", StringUtil.substringAfter(data.getExternalName(), ":"));
}
if (node.getKey().equals(ProjectKeys.MODULE)) {
ModuleData moduleData = (ModuleData)node.getData();
return Couple.of(moduleData.getExternalName(), null);
}
return super.getRepresentationName(node);
}
}