templates tree reordered

This commit is contained in:
Dmitry Avdeev
2012-10-19 11:14:46 +04:00
parent d80c4b38bb
commit 52ced51a5e
4 changed files with 73 additions and 51 deletions
@@ -89,19 +89,29 @@ public class SelectTemplateStep extends ModuleWizardStep {
Messages.installHyperlinkSupport(myDescriptionPane);
ProjectTemplatesFactory[] factories = ProjectTemplatesFactory.EP_NAME.getExtensions();
final MultiMap<String, ProjectTemplatesFactory> groups = new MultiMap<String, ProjectTemplatesFactory>();
final MultiMap<String, ProjectTemplate> groups = new MultiMap<String, ProjectTemplate>();
for (ProjectTemplatesFactory factory : factories) {
for (String string : factory.getGroups()) {
groups.putValue(string, factory);
groups.putValues(string, Arrays.asList(factory.createTemplates(string, context)));
}
}
final MultiMap<String, ProjectTemplate> sorted = new MultiMap<String, ProjectTemplate>();
// put single leafs under "Other"
for (Map.Entry<String, Collection<ProjectTemplate>> entry : groups.entrySet()) {
if (entry.getValue().size() > 1 || ArchivedTemplatesFactory.CUSTOM_GROUP.equals(entry.getKey())) {
sorted.put(entry.getKey(), entry.getValue());
}
else {
sorted.putValues("Other", entry.getValue());
}
}
SimpleTreeStructure.Impl structure = new SimpleTreeStructure.Impl(new SimpleNode() {
@Override
public SimpleNode[] getChildren() {
return ContainerUtil.map2Array(groups.entrySet(), NO_CHILDREN, new Function<Map.Entry<String, Collection<ProjectTemplatesFactory>>, SimpleNode>() {
return ContainerUtil.map2Array(sorted.entrySet(), NO_CHILDREN, new Function<Map.Entry<String, Collection<ProjectTemplate>>, SimpleNode>() {
@Override
public SimpleNode fun(Map.Entry<String, Collection<ProjectTemplatesFactory>> entry) {
public SimpleNode fun(Map.Entry<String, Collection<ProjectTemplate>> entry) {
return new GroupNode(entry.getKey(), entry.getValue());
}
});
@@ -182,7 +192,7 @@ public class SelectTemplateStep extends ModuleWizardStep {
}
mySettingsPanel.setVisible(settingsPanel != null);
String description = template.getDescription();
if (description != null) {
if (StringUtil.isNotEmpty(description)) {
StringBuilder sb = new StringBuilder("<html><body><font face=\"Verdana\" ");
sb.append(SystemInfo.isMac ? "" : "size=\"-1\"").append('>');
sb.append(description).append("</font></body></html>");
@@ -234,12 +244,10 @@ public class SelectTemplateStep extends ModuleWizardStep {
case KeyEvent.VK_DOWN:
myTemplatesTree.setSelectionRow(row < myTemplatesTree.getRowCount() - 1 ? row + 1 : 0);
break;
case KeyEvent.VK_ENTER:
myTemplatesTree.expandRow(row);
}
}
}
}.registerCustomShortcutSet(new CustomShortcutSet(KeyEvent.VK_UP, KeyEvent.VK_DOWN, KeyEvent.VK_ENTER), mySearchField);
}.registerCustomShortcutSet(new CustomShortcutSet(KeyEvent.VK_UP, KeyEvent.VK_DOWN), mySearchField);
}
@Override
@@ -368,23 +376,20 @@ public class SelectTemplateStep extends ModuleWizardStep {
mySearchField = new SearchTextField(false);
}
private class GroupNode extends SimpleNode {
private static class GroupNode extends SimpleNode {
private final String myGroup;
private final Collection<ProjectTemplatesFactory> myFactories;
private final Collection<ProjectTemplate> myTemplates;
public GroupNode(String group, Collection<ProjectTemplatesFactory> factories) {
public GroupNode(String group, Collection<ProjectTemplate> templates) {
myGroup = group;
myFactories = factories;
myTemplates = templates;
}
@Override
public SimpleNode[] getChildren() {
List<SimpleNode> children = new ArrayList<SimpleNode>();
for (ProjectTemplatesFactory factory : myFactories) {
ProjectTemplate[] templates = factory.createTemplates(myGroup, myContext);
for (ProjectTemplate template : templates) {
children.add(new TemplateNode(template));
}
for (ProjectTemplate template : myTemplates) {
children.add(new TemplateNode(template));
}
return children.toArray(new SimpleNode[children.size()]);
}
@@ -99,7 +99,7 @@ public class ArchivedTemplatesFactory implements ProjectTemplatesFactory {
}
static String getCustomTemplatesPath() {
return PathManager.getConfigPath() + "/projectTemplates";
return PathManager.getConfigPath() + "/resources/projectTemplates";
}
@NotNull
@@ -39,48 +39,65 @@ public class EmptyModuleTemplatesFactory implements ProjectTemplatesFactory {
@NotNull
@Override
public String[] getGroups() {
return new String[] {GROUP_NAME};
List<ModuleBuilder> builders = ModuleBuilder.getAllBuilders();
return ContainerUtil.map2Array(builders, String.class, new Function<ModuleBuilder, String>() {
@Override
public String fun(ModuleBuilder builder) {
return getGroupName(builder);
}
});
}
@NotNull
@Override
public ProjectTemplate[] createTemplates(String group, WizardContext context) {
List<ModuleBuilder> builders = ModuleBuilder.getAllBuilders();
return ContainerUtil.map2Array(builders, ProjectTemplate.class, new Function<ModuleBuilder, ProjectTemplate>() {
@Override
public ProjectTemplate fun(final ModuleBuilder builder) {
return new ProjectTemplate() {
@NotNull
@Override
public String getName() {
return builder.getPresentableName();
}
for (ModuleBuilder builder : builders) {
if (getGroupName(builder).equals(group)) return new ProjectTemplate[] {new EmptyModuleTemplate(builder)};
}
return new ProjectTemplate[0];
}
@Nullable
@Override
public String getDescription() {
return builder.getDescription();
}
private static String getGroupName(ModuleBuilder builder) {
String name = builder.getPresentableName();
return name.split(" ")[0];
}
@Nullable
@Override
public JComponent getSettingsPanel() {
return null;
}
private static class EmptyModuleTemplate implements ProjectTemplate {
private final ModuleBuilder myBuilder;
@NotNull
@Override
public ModuleBuilder createModuleBuilder() {
return builder;
}
public EmptyModuleTemplate(ModuleBuilder builder) {
myBuilder = builder;
}
@Nullable
@Override
public ValidationInfo validateSettings() {
return null;
}
};
}
});
@NotNull
@Override
public String getName() {
return myBuilder.getPresentableName();
}
@Nullable
@Override
public String getDescription() {
return myBuilder.getDescription();
}
@Nullable
@Override
public JComponent getSettingsPanel() {
return null;
}
@NotNull
@Override
public ModuleBuilder createModuleBuilder() {
return myBuilder;
}
@Nullable
@Override
public ValidationInfo validateSettings() {
return null;
}
}
}