import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.fileTypes.*;
import com.intellij.openapi.fileTypes.impl.FileTypeRenderer;
+import com.intellij.openapi.ui.ComboBox;
import com.intellij.openapi.ui.DialogWrapper;
-import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.ui.CollectionComboBoxModel;
import com.intellij.ui.ListScrollingUtil;
+import com.intellij.util.ArrayUtil;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.util.Arrays;
import java.util.Comparator;
+import java.util.Deque;
+import java.util.LinkedList;
public class FileTypeChooser extends DialogWrapper {
private JList myList;
private JLabel myTitleLabel;
- private JTextField myPattern;
+ private ComboBox myPattern;
private JPanel myPanel;
private JRadioButton myOpenInIdea;
private JRadioButton myOpenAsNative;
private final String myFileName;
- private FileTypeChooser(String pattern, String fileName) {
+ private FileTypeChooser(@NotNull String[] patterns, @NotNull String fileName) {
super(true);
myFileName = fileName;
}
}
myList.setModel(model);
- myPattern.setText(pattern);
+ myPattern.setModel(new CollectionComboBoxModel(ContainerUtil.map(patterns, Function.ID), patterns[0]));
setTitle(FileTypesBundle.message("filetype.chooser.title"));
init();
}
@Nullable
- public static FileType associateFileType(String fileName) {
- final FileTypeChooser chooser = new FileTypeChooser(suggestPatternText(fileName), fileName);
+ public static FileType associateFileType(@NotNull final String fileName) {
+ final FileTypeChooser chooser = new FileTypeChooser(suggestPatterns(fileName), fileName);
chooser.show();
if (!chooser.isOK()) return null;
final FileType type = chooser.getSelectedType();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
- FileTypeManagerEx.getInstanceEx().associatePattern(type, chooser.myPattern.getText());
+ FileTypeManagerEx.getInstanceEx().associatePattern(type, (String)chooser.myPattern.getSelectedItem());
}
});
return type;
}
- private static String suggestPatternText(final String fileName) {
- String pattern = FileUtil.getExtension(fileName);
-
- final String finalPattern;
- if (StringUtil.isEmpty(pattern)) {
- finalPattern = fileName;
- }
- else {
- finalPattern = "*." + pattern;
+ @NotNull
+ static String[] suggestPatterns(@NotNull final String fileName) {
+ final Deque<String> patterns = new LinkedList<String>();
+ int i = -1;
+ patterns.addFirst(fileName);
+ while ((i = fileName.indexOf('.', i + 1)) > 0) {
+ final String extension = fileName.substring(i);
+ if (!StringUtil.isEmpty(extension)) {
+ patterns.addFirst("*" + extension);
+ }
}
- return finalPattern;
+ return ArrayUtil.toStringArray(patterns);
}
@Override
--- /dev/null
+/*
+ * Copyright 2000-2011 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.openapi.fileTypes.ex;
+
+import com.intellij.testFramework.UsefulTestCase;
+
+/**
+ * @author Nikolay Matveev
+ */
+public class FileTypeChooserTest extends UsefulTestCase {
+
+ public void testSuggestPatterns() {
+ assertSameElements(FileTypeChooser.suggestPatterns("a"), "a");
+ assertSameElements(FileTypeChooser.suggestPatterns("a.b"), "a.b", "*.b");
+ assertSameElements(FileTypeChooser.suggestPatterns("a.b.c"), "a.b.c", "*.c", "*.b.c");
+ }
+
+}
+