KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > rcp > action > OpenFileAction


1 /**
2  * <p> Project: com.nightlabs.base </p>
3  * <p> Copyright: Copyright (c) 2005 </p>
4  * <p> Company: NightLabs GmbH (Germany) </p>
5  * <p> Creation Date: 20.06.2005 </p>
6  * <p> Author: Daniel Mazurek </p>
7 **/

8 package com.nightlabs.rcp.action;
9
10 import java.beans.PropertyChangeListener JavaDoc;
11 import java.beans.PropertyChangeSupport JavaDoc;
12 import java.io.File JavaDoc;
13 import java.util.ArrayList JavaDoc;
14 import java.util.Iterator JavaDoc;
15 import java.util.List JavaDoc;
16 import java.util.regex.Pattern JavaDoc;
17
18 import org.eclipse.core.runtime.IConfigurationElement;
19 import org.eclipse.jface.action.Action;
20 import org.eclipse.swt.SWT;
21 import org.eclipse.swt.widgets.Display;
22 import org.eclipse.swt.widgets.FileDialog;
23 import org.eclipse.swt.widgets.MessageBox;
24 import org.eclipse.ui.IEditorDescriptor;
25 import org.eclipse.ui.IEditorRegistry;
26 import org.eclipse.ui.IFileEditorMapping;
27 import org.eclipse.ui.PartInitException;
28 import org.eclipse.ui.PlatformUI;
29
30 import com.nightlabs.base.NLBasePlugin;
31 import com.nightlabs.config.Config;
32 import com.nightlabs.config.ConfigException;
33 import com.nightlabs.rcp.config.RecentFileConfig;
34 import com.nightlabs.rcp.extensionpoint.AbstractEPProcessor;
35 import com.nightlabs.rcp.extensionpoint.EPProcessorException;
36 import com.nightlabs.rcp.io.IOUtil;
37 import com.nightlabs.rcp.util.RCPUtil;
38
39 public class OpenFileAction
40 extends Action
41 {
42     public static final String JavaDoc ID = OpenFileAction.class.getName();
43     public static final String JavaDoc FILTER_ALL = "*";
44     
45     protected RecentFileConfig historyConfig;
46         
47     protected PropertyChangeSupport JavaDoc pcs = new PropertyChangeSupport JavaDoc(this);
48     public void addPropertyChangeListener(PropertyChangeListener JavaDoc pcl) {
49         pcs.addPropertyChangeListener(pcl);
50     };
51     public void removePropertyChangeListener(PropertyChangeListener JavaDoc pcl) {
52         pcs.removePropertyChangeListener(pcl);
53     };
54     
55     public OpenFileAction() {
56         super();
57         init();
58     }
59     
60     protected void init()
61     {
62         setId(ID);
63         setText(NLBasePlugin.getResourceString("action.openfile.text"));
64         setToolTipText(NLBasePlugin.getResourceString("action.openfile.tooltip"));
65                 
66         try {
67             historyConfig = (RecentFileConfig) Config.sharedInstance().createConfigModule(RecentFileConfig.class);
68         } catch (ConfigException e) {
69             // TODO Auto-generated catch block
70
e.printStackTrace();
71         }
72     }
73     
74     protected List JavaDoc getRecentFileNames() {
75         if (historyConfig != null)
76             return historyConfig.getRecentFileNames();
77         
78         return null;
79     }
80     
81     public void run()
82     {
83         FileDialog dialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.OPEN);
84         IEditorRegistry editorRegistry = PlatformUI.getWorkbench().getEditorRegistry();
85         String JavaDoc[] fileExtensions = getFileExtensions(editorRegistry);
86         dialog.setFilterExtensions(fileExtensions);
87         String JavaDoc fullFileName = dialog.open();
88         // Cancel pressed
89
if (fullFileName == null)
90             return;
91         
92         File JavaDoc file = new File JavaDoc(fullFileName);
93         if (!file.exists()) {
94             return;
95         }
96         
97         try {
98             boolean foundEditor = IOUtil.openFile(file);
99             if (foundEditor)
100                 addFileToHistory(fullFileName);
101         } catch (PartInitException e) {
102             e.printStackTrace();
103             RCPUtil.showErrorDialog(
104                     NLBasePlugin.getResourceString("action.openfile.error.message1")
105                     + " " + fullFileName + " " +
106                     NLBasePlugin.getResourceString("action.openfile.error.message2")
107             );
108         }
109     }
110     
111     public static final String JavaDoc HISTORY_FILE_ADDED = "history file added";
112     protected void addFileToHistory(String JavaDoc fileName)
113     {
114         if (getRecentFileNames() != null)
115         {
116             // add file only if it is not already contained
117
if (!getRecentFileNames().contains(fileName))
118             {
119                 getRecentFileNames().add(fileName);
120                 pcs.firePropertyChange(HISTORY_FILE_ADDED, null, fileName);
121             }
122             historyConfig.setChanged(true);
123         }
124     }
125         
126     protected String JavaDoc[] getFileExtensions(IEditorRegistry editorRegistry)
127     {
128         IFileEditorMapping[] mappings = editorRegistry.getFileEditorMappings();
129         List JavaDoc extensions = new ArrayList JavaDoc(mappings.length);
130         for (int mapCount=0; mapCount<mappings.length; mapCount++) {
131             IFileEditorMapping map = mappings[mapCount];
132             String JavaDoc extension = map.getExtension();
133             IEditorDescriptor[] editorDescritors = map.getEditors();
134             for (int descCount=0; descCount<editorDescritors.length; descCount++) {
135                 IEditorDescriptor descriptor = editorDescritors[descCount];
136                 String JavaDoc id = descriptor.getId();
137                 if (EditorFileFilterRegistry.getSharedInstance().doesMatchEditorID(id)) {
138                     if (isValid(extension)) {
139                         extensions.add(extension);
140                     }
141                 }
142             }
143         }
144         if (isUseFilterAll()) {
145             extensions.add(0, FILTER_ALL);
146         }
147         String JavaDoc[] fileExtensions = new String JavaDoc[extensions.size()];
148         for (int j=0; j<extensions.size(); j++) {
149             String JavaDoc fileExtension = (String JavaDoc) extensions.get(j);
150             fileExtensions[j] = concatExtension(fileExtension);
151         }
152         return fileExtensions;
153     }
154     
155     protected boolean isValid(String JavaDoc s)
156     {
157         if (s == null)
158             return false;
159         if (s.equals("") || s.equals(" "))
160             return false;
161         
162         return true;
163     }
164     
165     protected String JavaDoc concatExtension(String JavaDoc s) {
166         return "*." + s;
167     }
168         
169     protected boolean useFilterAll = true;
170     public boolean isUseFilterAll() {
171         return useFilterAll;
172     }
173     public void setUseFilterAll(boolean useFilterAll) {
174         this.useFilterAll = useFilterAll;
175     }
176         
177 }
178
Popular Tags