Upload/Download of multiple files now possible
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / actions / mediawiki / post / PostWikiFilesAction.java
1 package net.sourceforge.phpeclipse.wiki.actions.mediawiki.post;
2
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;
8 import java.util.List;
9
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;
15
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;
36
37 public class PostWikiFilesAction implements IObjectActionDelegate {
38   private IWorkbenchPart workbenchPart;
39
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);
47       }
48     }
49     if (configsList.size() == 1) {
50       return (Configuration) configsList.get(0);
51     }
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];
63           break;
64         }
65       }
66     }
67     return configuration;
68   }
69
70   protected Configuration getConfiguration() {
71     return getConfigurationPrefix(WikiEditorPlugin.PREFIX_STORE);
72   }
73
74   /**
75    *  
76    */
77   public PostWikiFilesAction() {
78     super();
79   }
80
81   /**
82    * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
83    */
84   public void setActivePart(IAction action, IWorkbenchPart targetPart) {
85     workbenchPart = targetPart;
86   }
87
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()) {
93         case IResource.FILE:
94           if (resource.getFileExtension().equalsIgnoreCase(WikiEditorPlugin.WP_EXTENSION)) {
95             set.add(resource);
96           }
97           break;
98         }
99         return true;
100       }
101     };
102     try {
103       ISelectionProvider selectionProvider = null;
104       selectionProvider = workbenchPart.getSite().getSelectionProvider();
105
106       StructuredSelection selection = null;
107       selection = (StructuredSelection) selectionProvider.getSelection();
108
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();
119         // is it a resource
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:
125           case IResource.FILE:
126             resource.accept(visitor);
127             break;
128           }
129         }
130       }
131       if (set.size() > 0) {
132         IFile[] files = new IFile[set.size()];
133         set.toArray(files);
134         
135         for (int i = 0; i < files.length; i++) {
136           System.out.println(files[i].getLocation().toString());
137         }
138         
139         Job job = new PostJob(configuration, wikipediaProperties, configuration.getUser(), configuration.getPassword(), files);
140         //        job.setRule(modifyRule(files));
141         job.setRule(null);
142         job.setUser(true);
143         job.schedule();
144       }
145     } catch (CoreException e) {
146       //    TODO Auto-generated catch block
147       e.printStackTrace();
148     } catch (NoSuchMethodException e) {
149       // TODO Auto-generated catch block
150       e.printStackTrace();
151     } catch (IllegalAccessException e) {
152       // TODO Auto-generated catch block
153       e.printStackTrace();
154     } catch (ClassNotFoundException e) {
155       // TODO Auto-generated catch block
156       e.printStackTrace();
157     } catch (InvocationTargetException e) {
158       // TODO Auto-generated catch block
159       e.printStackTrace();
160     }
161   }
162
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);
170     }
171     return combinedRule;
172   }
173
174   /**
175    * @see IActionDelegate#selectionChanged(IAction, ISelection)
176    */
177   public void selectionChanged(IAction action, ISelection selection) {
178   }
179
180 }