Home | History | Annotate | Download | only in actions
      1 /*
      2  * Copyright (C) 2007 The Android Open Source Project
      3  *
      4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.eclipse.org/org/documents/epl-v10.php
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.ide.eclipse.adt.internal.actions;
     18 
     19 import com.android.annotations.NonNull;
     20 import com.android.ide.eclipse.adt.internal.project.AndroidNature;
     21 import com.android.ide.eclipse.adt.internal.project.ProjectHelper;
     22 
     23 import org.eclipse.core.resources.IProject;
     24 import org.eclipse.core.runtime.CoreException;
     25 import org.eclipse.core.runtime.IAdaptable;
     26 import org.eclipse.core.runtime.IProgressMonitor;
     27 import org.eclipse.core.runtime.IStatus;
     28 import org.eclipse.core.runtime.Status;
     29 import org.eclipse.core.runtime.jobs.Job;
     30 import org.eclipse.jdt.core.JavaModelException;
     31 import org.eclipse.jface.action.IAction;
     32 import org.eclipse.jface.viewers.ISelection;
     33 import org.eclipse.jface.viewers.IStructuredSelection;
     34 import org.eclipse.ui.IObjectActionDelegate;
     35 import org.eclipse.ui.IWorkbenchPart;
     36 import org.eclipse.ui.IWorkbenchWindow;
     37 import org.eclipse.ui.IWorkbenchWindowActionDelegate;
     38 
     39 import java.util.Iterator;
     40 
     41 /**
     42  * Action to fix the project properties:
     43  * <ul>
     44  * <li>Make sure the framework archive is present with the link to the java
     45  * doc</li>
     46  * </ul>
     47  */
     48 public class FixProjectAction implements IObjectActionDelegate {
     49 
     50     private ISelection mSelection;
     51 
     52     /**
     53      * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
     54      */
     55     @Override
     56     public void setActivePart(IAction action, IWorkbenchPart targetPart) {
     57     }
     58 
     59     @Override
     60     public void run(IAction action) {
     61         if (mSelection instanceof IStructuredSelection) {
     62 
     63             for (Iterator<?> it = ((IStructuredSelection) mSelection).iterator();
     64                     it.hasNext();) {
     65                 Object element = it.next();
     66                 IProject project = null;
     67                 if (element instanceof IProject) {
     68                     project = (IProject) element;
     69                 } else if (element instanceof IAdaptable) {
     70                     project = (IProject) ((IAdaptable) element)
     71                             .getAdapter(IProject.class);
     72                 }
     73                 if (project != null) {
     74                     fixProject(project);
     75                 }
     76             }
     77         }
     78     }
     79 
     80     @Override
     81     public void selectionChanged(IAction action, ISelection selection) {
     82         mSelection = selection;
     83     }
     84 
     85     private void fixProject(final IProject project) {
     86         createFixProjectJob(project).schedule();
     87     }
     88 
     89     /**
     90      * Creates a job to fix the project
     91      *
     92      * @param project the project to fix
     93      * @return a job to perform the fix (not yet scheduled)
     94      */
     95     @NonNull
     96     public static Job createFixProjectJob(@NonNull final IProject project) {
     97         return new Job("Fix Project Properties") {
     98 
     99             @Override
    100             protected IStatus run(IProgressMonitor monitor) {
    101                 try {
    102                     if (monitor != null) {
    103                         monitor.beginTask("Fix Project Properties", 6);
    104                     }
    105 
    106                     ProjectHelper.fixProject(project);
    107                     if (monitor != null) {
    108                         monitor.worked(1);
    109                     }
    110 
    111                     // fix the nature order to have the proper project icon
    112                     ProjectHelper.fixProjectNatureOrder(project);
    113                     if (monitor != null) {
    114                         monitor.worked(1);
    115                     }
    116 
    117                     // now we fix the builders
    118                     AndroidNature.configureResourceManagerBuilder(project);
    119                     if (monitor != null) {
    120                         monitor.worked(1);
    121                     }
    122 
    123                     AndroidNature.configurePreBuilder(project);
    124                     if (monitor != null) {
    125                         monitor.worked(1);
    126                     }
    127 
    128                     AndroidNature.configureApkBuilder(project);
    129                     if (monitor != null) {
    130                         monitor.worked(1);
    131                     }
    132 
    133                     return Status.OK_STATUS;
    134                 } catch (JavaModelException e) {
    135                     return e.getJavaModelStatus();
    136                 } catch (CoreException e) {
    137                     return e.getStatus();
    138                 } finally {
    139                     if (monitor != null) {
    140                         monitor.done();
    141                     }
    142                 }
    143             }
    144         };
    145     }
    146 
    147     /**
    148      * @see IWorkbenchWindowActionDelegate#init
    149      */
    150     public void init(IWorkbenchWindow window) {
    151         // pass
    152     }
    153 
    154 }
    155