1 package net.sourceforge.phpeclipse.wiki.actions.mediawiki;
3 import java.lang.reflect.InvocationTargetException;
4 import java.util.ArrayList;
5 import java.util.Collections;
6 import java.util.HashSet;
7 import java.util.Iterator;
10 import net.sourceforge.phpeclipse.wiki.actions.mediawiki.config.IWikipedia;
11 import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
12 import net.sourceforge.phpeclipse.wiki.internal.Configuration;
13 import net.sourceforge.phpeclipse.wiki.internal.ConfigurationManager;
14 import net.sourceforge.phpeclipse.wiki.internal.IConfiguration;
16 import org.eclipse.core.resources.IFile;
17 import org.eclipse.core.resources.IResource;
18 import org.eclipse.core.resources.IResourceRuleFactory;
19 import org.eclipse.core.resources.IResourceVisitor;
20 import org.eclipse.core.resources.ResourcesPlugin;
21 import org.eclipse.core.runtime.CoreException;
22 import org.eclipse.core.runtime.jobs.ISchedulingRule;
23 import org.eclipse.core.runtime.jobs.Job;
24 import org.eclipse.core.runtime.jobs.MultiRule;
25 import org.eclipse.jface.action.IAction;
26 import org.eclipse.jface.viewers.ISelection;
27 import org.eclipse.jface.viewers.ISelectionProvider;
28 import org.eclipse.jface.viewers.LabelProvider;
29 import org.eclipse.jface.viewers.StructuredSelection;
30 import org.eclipse.jface.window.Window;
31 import org.eclipse.ui.IActionDelegate;
32 import org.eclipse.ui.IObjectActionDelegate;
33 import org.eclipse.ui.IWorkbenchPart;
34 import org.eclipse.ui.dialogs.ListSelectionDialog;
35 import org.eclipse.ui.internal.dialogs.ListContentProvider;
37 public class RefreshWikiFilesAction implements IObjectActionDelegate {
38 private IWorkbenchPart workbenchPart;
40 protected Configuration getConfigurationPrefix(String prefix) {
41 List allConfigsList = ConfigurationManager.getInstance().getConfigurations();
42 ArrayList configsList = new ArrayList();
43 for (int i = 0; i < allConfigsList.size(); i++) {
44 IConfiguration temp = (IConfiguration) allConfigsList.get(i);
45 if (temp.getType().startsWith(prefix)) {
46 configsList.add(temp);
49 if (configsList.size() == 1) {
50 return (Configuration) configsList.get(0);
52 Collections.sort(configsList);
53 Configuration configuration = null;
54 ListSelectionDialog listSelectionDialog = new ListSelectionDialog(WikiEditorPlugin.getDefault().getWorkbench()
55 .getActiveWorkbenchWindow().getShell(), configsList, new ListContentProvider(), new LabelProvider(),
56 "Select the refresh URL.");
57 listSelectionDialog.setTitle("Multiple active configuration found");
58 if (listSelectionDialog.open() == Window.OK) {
59 Object[] locations = listSelectionDialog.getResult();
60 if (locations != null) {
61 for (int i = 0; i < locations.length; i++) {
62 configuration = (Configuration) locations[i];
70 protected Configuration getConfiguration() {
71 return getConfigurationPrefix(WikiEditorPlugin.PREFIX_LOAD);
77 public RefreshWikiFilesAction() {
82 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
84 public void setActivePart(IAction action, IWorkbenchPart targetPart) {
85 workbenchPart = targetPart;
88 public void run(IAction action) {
90 ISelectionProvider selectionProvider = null;
91 selectionProvider = workbenchPart.getSite().getSelectionProvider();
93 StructuredSelection selection = null;
94 selection = (StructuredSelection) selectionProvider.getSelection();
97 Iterator iterator = null;
98 iterator = selection.iterator();
99 Configuration configuration = getConfiguration();
100 String wikiLocale = configuration.getType().substring(WikiEditorPlugin.PREFIX_LOAD.length());
101 IWikipedia wikipediaProperties = WikiEditorPlugin.getWikiInstance(wikiLocale);
103 final HashSet set = new HashSet();
104 IResourceVisitor visitor = new IResourceVisitor() {
105 public boolean visit(IResource resource) {
106 switch (resource.getType()) {
108 if (resource.getFileExtension().equalsIgnoreCase(WikiEditorPlugin.WP_EXTENSION)) {
117 while (iterator.hasNext()) {
118 // obj => selected object in the view
119 Object obj = iterator.next();
122 if (obj instanceof IResource) {
123 IResource resource = (IResource) obj;
124 // check if it's a file resource
125 switch (resource.getType()) {
126 case IResource.FOLDER:
128 resource.accept(visitor);
133 if (set.size() > 0) {
134 IFile[] files = new IFile[set.size()];
137 Job job = new RefreshJob(wikipediaProperties, files, configuration.getURL());
138 // job.setRule(modifyRule(files));
143 } catch (CoreException e) {
144 // TODO Auto-generated catch block
146 } catch (NoSuchMethodException e) {
147 // TODO Auto-generated catch block
149 } catch (IllegalAccessException e) {
150 // TODO Auto-generated catch block
152 } catch (ClassNotFoundException e) {
153 // TODO Auto-generated catch block
155 } catch (InvocationTargetException e) {
156 // TODO Auto-generated catch block
161 public ISchedulingRule modifyRule(IFile[] files) {
162 ISchedulingRule combinedRule = null;
163 IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
164 ISchedulingRule rule;
165 for (int i = 0; i < files.length; i++) {
166 rule = ruleFactory.modifyRule(files[i]);
167 combinedRule = MultiRule.combine(rule, combinedRule);
173 * @see IActionDelegate#selectionChanged(IAction, ISelection)
175 public void selectionChanged(IAction action, ISelection selection) {