Skip to main content
summaryrefslogtreecommitdiffstats
blob: b1730e139d3407dfafcef019457220f6c312cdcb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package org.eclipse.osee.ote.ui.builder;

import java.util.Iterator;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandlerListener;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchSite;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;

public class ToggleNatureHandler extends AbstractHandler {

   @Override
   public void addHandlerListener(IHandlerListener handlerListener) {
      // TODO Auto-generated method stub

   }

   @Override
   public void dispose() {
      // TODO Auto-generated method stub

   }

   @SuppressWarnings("rawtypes")
   @Override
   public Object execute(ExecutionEvent event) throws ExecutionException {
      IStructuredSelection selection = getCurrentSelection();
      if (selection != null && selection instanceof IStructuredSelection) {
         for (Iterator it = ((IStructuredSelection) selection).iterator(); it.hasNext();) {
            Object element = it.next();
            IProject project = null;
            if (element instanceof IProject) {
               project = (IProject) element;
            } else if (element instanceof IAdaptable) {
               project = (IProject) ((IAdaptable) element).getAdapter(IProject.class);
            }
            if (project != null) {
               toggleNature(project);
            }
         }
      }
      return null;
   }
   
   private void toggleNature(IProject project) {
      try {
         IProjectDescription description = project.getDescription();
         String[] natures = description.getNatureIds();

         for (int i = 0; i < natures.length; ++i) {
            if (OTEPackagingNature.NATURE_ID.equals(natures[i])) {
               // Remove the nature
               String[] newNatures = new String[natures.length - 1];
               System.arraycopy(natures, 0, newNatures, 0, i);
               System.arraycopy(natures, i + 1, newNatures, i,
                     natures.length - i - 1);
               description.setNatureIds(newNatures);
               project.setDescription(description, null);
               return;
            }
         }

         // Add the nature
         String[] newNatures = new String[natures.length + 1];
         System.arraycopy(natures, 0, newNatures, 0, natures.length);
         newNatures[natures.length] = OTEPackagingNature.NATURE_ID;
         description.setNatureIds(newNatures);
         project.setDescription(description, null);
      } catch (CoreException e) {
      }
   }
   
   private IStructuredSelection getCurrentSelection() {
      IWorkbench workbench = PlatformUI.getWorkbench();
      if (!workbench.isStarting() && !workbench.isClosing()) {
         IWorkbenchPage page = getActivePage();
         if (page != null) {
            IWorkbenchPart part = page.getActivePart();
            if (part != null) {
               IWorkbenchSite site = part.getSite();
               if (site != null) {
                  ISelectionProvider selectionProvider = site.getSelectionProvider();
                  if(selectionProvider != null){
                     ISelection selection = selectionProvider.getSelection();
                     if (selection instanceof IStructuredSelection) {
                        return (IStructuredSelection) selection;
                     }
                  }
               }
            }
         }
      }
      return null;
   }

   @Override
   public boolean isEnabled() {
      return true;
   }

   @Override
   public boolean isHandled() {
      return true;
   }

   @Override
   public void removeHandlerListener(IHandlerListener handlerListener) {
      // TODO Auto-generated method stub

   }
   
   private IWorkbenchPage getActivePage() {
      IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
      return workbenchWindow != null ? workbenchWindow.getActivePage() : null;
   }

}

Back to the top