KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > search > internal > ui > util > FileTypeEditor


1 /*******************************************************************************
2  * Copyright (c) 2000, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.search.internal.ui.util;
12
13 import java.util.Arrays JavaDoc;
14 import java.util.Comparator JavaDoc;
15 import java.util.HashSet JavaDoc;
16 import java.util.Set JavaDoc;
17 import java.util.StringTokenizer JavaDoc;
18
19 import org.eclipse.swt.events.DisposeEvent;
20 import org.eclipse.swt.events.DisposeListener;
21 import org.eclipse.swt.events.SelectionAdapter;
22 import org.eclipse.swt.events.SelectionEvent;
23 import org.eclipse.swt.events.SelectionListener;
24 import org.eclipse.swt.widgets.Button;
25 import org.eclipse.swt.widgets.Combo;
26 import org.eclipse.swt.widgets.Widget;
27
28 import org.eclipse.jface.window.Window;
29
30 import org.eclipse.ui.IEditorRegistry;
31 import org.eclipse.ui.dialogs.TypeFilteringDialog;
32
33 import org.eclipse.search.internal.ui.SearchMessages;
34
35 public class FileTypeEditor extends SelectionAdapter implements DisposeListener, SelectionListener {
36     
37     private Combo fTextField;
38     private Button fBrowseButton;
39
40     private final static String JavaDoc TYPE_DELIMITER= SearchMessages.FileTypeEditor_typeDelimiter;
41     public final static String JavaDoc FILE_PATTERN_NEGATOR= "!"; //$NON-NLS-1$
42

43     private static final Comparator JavaDoc FILE_TYPES_COMPARATOR= new Comparator JavaDoc() {
44         public int compare(Object JavaDoc o1, Object JavaDoc o2) {
45             return compare((String JavaDoc) o1, (String JavaDoc) o2);
46         }
47         public int compare(String JavaDoc fp1, String JavaDoc fp2) {
48             boolean isNegative1= fp1.startsWith(FILE_PATTERN_NEGATOR);
49             boolean isNegative2= fp2.startsWith(FILE_PATTERN_NEGATOR);
50             if (isNegative1 != isNegative2) {
51                 return isNegative1 ? 1 : -1;
52             }
53             return fp1.compareTo(fp2);
54         }
55     };
56
57     public FileTypeEditor(IEditorRegistry registry, Combo textField, Button browseButton) {
58         fTextField= textField;
59         fBrowseButton= browseButton;
60         
61         fTextField.addDisposeListener(this);
62         fBrowseButton.addDisposeListener(this);
63         fBrowseButton.addSelectionListener(this);
64     }
65     
66     public void widgetDisposed(DisposeEvent event) {
67         Widget widget= event.widget;
68         if (widget == fTextField)
69             fTextField= null;
70         else if (widget == fBrowseButton)
71             fBrowseButton= null;
72     }
73     
74     public void widgetSelected(SelectionEvent event) {
75         if (event.widget == fBrowseButton)
76             handleBrowseButton();
77     }
78         
79     public void widgetDoubleSelected(SelectionEvent event) {
80     }
81     
82     public String JavaDoc[] getFileTypes() {
83         Set JavaDoc result= new HashSet JavaDoc();
84         StringTokenizer JavaDoc tokenizer= new StringTokenizer JavaDoc(fTextField.getText(), TYPE_DELIMITER);
85
86         while (tokenizer.hasMoreTokens()) {
87             String JavaDoc currentExtension= tokenizer.nextToken().trim();
88             result.add(currentExtension);
89         }
90         return (String JavaDoc[]) result.toArray(new String JavaDoc[result.size()]);
91     }
92
93     public void setFileTypes(String JavaDoc[] types) {
94         fTextField.setText(typesToString(types));
95     }
96
97     protected void handleBrowseButton() {
98         TypeFilteringDialog dialog= new TypeFilteringDialog(fTextField.getShell(), Arrays.asList(getFileTypes()));
99         if (dialog.open() == Window.OK) {
100             Object JavaDoc[] result= dialog.getResult();
101             HashSet JavaDoc patterns= new HashSet JavaDoc();
102             boolean starIncluded= false;
103             for (int i= 0; i < result.length; i++) {
104                 String JavaDoc curr= result[i].toString();
105                 if (curr.equals("*")) { //$NON-NLS-1$
106
starIncluded= true;
107                 } else {
108                     patterns.add("*." + curr); //$NON-NLS-1$
109
}
110             }
111             if (patterns.isEmpty() && starIncluded) { // remove star when other file extensions active
112
patterns.add("*"); //$NON-NLS-1$
113
}
114             String JavaDoc[] filePatterns= (String JavaDoc[]) patterns.toArray(new String JavaDoc[patterns.size()]);
115             Arrays.sort(filePatterns);
116             setFileTypes(filePatterns);
117         }
118     }
119
120     public static String JavaDoc typesToString(String JavaDoc[] types) {
121         Arrays.sort(types, FILE_TYPES_COMPARATOR);
122         StringBuffer JavaDoc result= new StringBuffer JavaDoc();
123         for (int i= 0; i < types.length; i++) {
124             if (i > 0) {
125                 result.append(TYPE_DELIMITER);
126                 result.append(" "); //$NON-NLS-1$
127
}
128             result.append(types[i]);
129         }
130         return result.toString();
131     }
132 }
133
Popular Tags