1 8 package com.nightlabs.rcp.action; 9 10 import java.beans.PropertyChangeListener ; 11 import java.beans.PropertyChangeSupport ; 12 import java.io.File ; 13 import java.util.ArrayList ; 14 import java.util.Iterator ; 15 import java.util.List ; 16 import java.util.regex.Pattern ; 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 ID = OpenFileAction.class.getName(); 43 public static final String FILTER_ALL = "*"; 44 45 protected RecentFileConfig historyConfig; 46 47 protected PropertyChangeSupport pcs = new PropertyChangeSupport (this); 48 public void addPropertyChangeListener(PropertyChangeListener pcl) { 49 pcs.addPropertyChangeListener(pcl); 50 }; 51 public void removePropertyChangeListener(PropertyChangeListener 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 e.printStackTrace(); 71 } 72 } 73 74 protected List 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 [] fileExtensions = getFileExtensions(editorRegistry); 86 dialog.setFilterExtensions(fileExtensions); 87 String fullFileName = dialog.open(); 88 if (fullFileName == null) 90 return; 91 92 File file = new File (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 HISTORY_FILE_ADDED = "history file added"; 112 protected void addFileToHistory(String fileName) 113 { 114 if (getRecentFileNames() != null) 115 { 116 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 [] getFileExtensions(IEditorRegistry editorRegistry) 127 { 128 IFileEditorMapping[] mappings = editorRegistry.getFileEditorMappings(); 129 List extensions = new ArrayList (mappings.length); 130 for (int mapCount=0; mapCount<mappings.length; mapCount++) { 131 IFileEditorMapping map = mappings[mapCount]; 132 String extension = map.getExtension(); 133 IEditorDescriptor[] editorDescritors = map.getEditors(); 134 for (int descCount=0; descCount<editorDescritors.length; descCount++) { 135 IEditorDescriptor descriptor = editorDescritors[descCount]; 136 String 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 [] fileExtensions = new String [extensions.size()]; 148 for (int j=0; j<extensions.size(); j++) { 149 String fileExtension = (String ) extensions.get(j); 150 fileExtensions[j] = concatExtension(fileExtension); 151 } 152 return fileExtensions; 153 } 154 155 protected boolean isValid(String 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 concatExtension(String 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 |