1 package net.sourceforge.phpeclipse.wiki.builder;
3 import java.io.ByteArrayInputStream;
4 import java.io.InputStream;
5 import java.util.Iterator;
7 import net.sourceforge.phpeclipse.wiki.preferences.Util;
9 import org.eclipse.core.resources.ICommand;
10 import org.eclipse.core.resources.IContainer;
11 import org.eclipse.core.resources.IFile;
12 import org.eclipse.core.resources.IFolder;
13 import org.eclipse.core.resources.IProject;
14 import org.eclipse.core.resources.IProjectDescription;
15 import org.eclipse.core.resources.IResource;
16 import org.eclipse.core.runtime.CoreException;
17 import org.eclipse.core.runtime.Path;
18 import org.eclipse.jface.action.IAction;
19 import org.eclipse.jface.viewers.ISelection;
20 import org.eclipse.jface.viewers.ISelectionProvider;
21 import org.eclipse.jface.viewers.StructuredSelection;
22 import org.eclipse.ui.IActionDelegate;
23 import org.eclipse.ui.IObjectActionDelegate;
24 import org.eclipse.ui.IWorkbenchPart;
26 public class AddBuilderAction implements IObjectActionDelegate {
27 private IWorkbenchPart workbenchPart;
32 public AddBuilderAction() {
37 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
39 public void setActivePart(IAction action, IWorkbenchPart targetPart) {
40 workbenchPart = targetPart;
43 public void run(IAction action) {
44 ISelectionProvider selectionProvider = null;
45 selectionProvider = workbenchPart.getSite().getSelectionProvider();
47 StructuredSelection selection = null;
48 selection = (StructuredSelection) selectionProvider.getSelection();
51 Iterator iterator = null;
52 iterator = selection.iterator();
53 while (iterator.hasNext()) {
54 // obj => selected object in the view
55 Object obj = iterator.next();
58 if (obj instanceof IResource) {
59 IResource resource = (IResource) obj;
61 // check if it's a project resource
62 switch (resource.getType()) {
64 case IResource.PROJECT:
65 addBuilder((IProject) resource);
72 * @see IActionDelegate#selectionChanged(IAction, ISelection)
74 public void selectionChanged(IAction action, ISelection selection) {
77 private void addBuilder(IProject project) {
78 IProjectDescription desc;
80 desc = project.getDescription();
82 ICommand[] commands = desc.getBuildSpec();
83 boolean found = false;
85 for (int i = 0; i < commands.length; ++i) {
86 if (commands[i].getBuilderName().equals(WikiBuilder.BUILDER_ID)) {
92 //add builder to project
93 ICommand command = desc.newCommand();
94 command.setBuilderName(WikiBuilder.BUILDER_ID);
95 ICommand[] newCommands = new ICommand[commands.length + 1];
97 // Add it before other builders.
98 System.arraycopy(commands, 0, newCommands, 1, commands.length);
99 newCommands[0] = command;
100 desc.setBuildSpec(newCommands);
101 project.setDescription(desc, null);
102 // add some default wiki project settings
103 Util.setWikiBuilderPreferences(project);
105 createVelocityFile(project, "main.vm");
106 createVelocityFile(project, "export.vm");
107 createVelocityFile(project, "main.css");
109 } catch (CoreException e) {
114 private void createVelocityFile(IProject project, String filename) throws CoreException {
115 InputStream is = AddBuilderAction.class.getResourceAsStream(filename);
116 final IFile file = project.getFile(new Path("wpsrc/" + filename));
117 if (!file.exists()) {
118 file.create(is, true, null);