1 package net.sourceforge.phpeclipse.wiki.actions.mediawiki.post;
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 PostWikiFilesAction 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_STORE);
77 public PostWikiFilesAction() {
82 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
84 public void setActivePart(IAction action, IWorkbenchPart targetPart) {
85 workbenchPart = targetPart;
88 public void run(IAction action) {
89 final HashSet set = new HashSet();
90 IResourceVisitor visitor = new IResourceVisitor() {
91 public boolean visit(IResource resource) {
92 switch (resource.getType()) {
94 if (resource.getFileExtension().equalsIgnoreCase(WikiEditorPlugin.WP_EXTENSION)) {
103 ISelectionProvider selectionProvider = null;
104 selectionProvider = workbenchPart.getSite().getSelectionProvider();
106 StructuredSelection selection = null;
107 selection = (StructuredSelection) selectionProvider.getSelection();
109 //Shell shell = null;
110 Iterator iterator = null;
111 iterator = selection.iterator();
112 Configuration configuration = getConfiguration();
113 String wikiLocale = configuration.getType().substring(WikiEditorPlugin.PREFIX_STORE.length());
114 IWikipedia wikipediaProperties = WikiEditorPlugin.getWikiInstance(wikiLocale);
115 // ArrayList list = new ArrayList();
116 while (iterator.hasNext()) {
117 // obj => selected object in the view
118 Object obj = iterator.next();
120 if (obj instanceof IResource) {
121 IResource resource = (IResource) obj;
122 // check if it's a file resource
123 switch (resource.getType()) {
124 case IResource.FOLDER:
126 resource.accept(visitor);
131 if (set.size() > 0) {
132 IFile[] files = new IFile[set.size()];
135 for (int i = 0; i < files.length; i++) {
136 System.out.println(files[i].getLocation().toString());
139 Job job = new PostJob(configuration, wikipediaProperties, configuration.getUser(), configuration.getPassword(), files);
140 // job.setRule(modifyRule(files));
145 } catch (CoreException e) {
146 // TODO Auto-generated catch block
148 } catch (NoSuchMethodException e) {
149 // TODO Auto-generated catch block
151 } catch (IllegalAccessException e) {
152 // TODO Auto-generated catch block
154 } catch (ClassNotFoundException e) {
155 // TODO Auto-generated catch block
157 } catch (InvocationTargetException e) {
158 // TODO Auto-generated catch block
163 public ISchedulingRule modifyRule(IFile[] files) {
164 ISchedulingRule combinedRule = null;
165 IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
166 ISchedulingRule rule;
167 for (int i = 0; i < files.length; i++) {
168 rule = ruleFactory.modifyRule(files[i]);
169 combinedRule = MultiRule.combine(rule, combinedRule);
175 * @see IActionDelegate#selectionChanged(IAction, ISelection)
177 public void selectionChanged(IAction action, ISelection selection) {