155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project/*
255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *
455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Licensed under the Eclipse Public License, Version 1.0 (the "License");
555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * you may not use this file except in compliance with the License.
655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * You may obtain a copy of the License at
755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *
855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *      http://www.eclipse.org/org/documents/epl-v10.php
955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project *
1055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * See the License for the specific language governing permissions and
1455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project * limitations under the License.
1555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project */
1655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
17f2880494706ad8dfd43e21471096216be4ca7c69Xavier Ducrohetpackage com.android.ide.eclipse.adt.internal.wizards.actions;
1855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
19d6124a176326169bc87cb29823ca2dc906689680Tor Norbyeimport com.android.ide.eclipse.adt.internal.lint.EclipseLintRunner;
20f2880494706ad8dfd43e21471096216be4ca7c69Xavier Ducrohetimport com.android.ide.eclipse.adt.internal.project.ExportHelper;
21648e03eafbf9cac55142d1d6349e4d5cc8b4299dXavier Ducrohetimport com.android.ide.eclipse.adt.internal.sdk.ProjectState;
227a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohetimport com.android.ide.eclipse.adt.internal.sdk.Sdk;
2355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
2455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.resources.IProject;
2555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.core.runtime.IAdaptable;
2655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.action.IAction;
277a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohetimport org.eclipse.jface.dialogs.MessageDialog;
2855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.ISelection;
2955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.jface.viewers.IStructuredSelection;
307a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohetimport org.eclipse.swt.widgets.Shell;
3155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.IObjectActionDelegate;
3255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectimport org.eclipse.ui.IWorkbenchPart;
3355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
3455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Projectpublic class ExportAction implements IObjectActionDelegate {
3555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
3655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    private ISelection mSelection;
377a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohet    private Shell mShell;
3855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
3955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    /**
4055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
4155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project     */
42ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
4355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public void setActivePart(IAction action, IWorkbenchPart targetPart) {
447a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohet        mShell = targetPart.getSite().getShell();
4555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
4655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
47ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
4855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public void run(IAction action) {
4955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        if (mSelection instanceof IStructuredSelection) {
5055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            IStructuredSelection selection = (IStructuredSelection)mSelection;
5155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            // get the unique selected item.
5255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            if (selection.size() == 1) {
5355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                Object element = selection.getFirstElement();
5455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
5555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                // get the project object from it.
5655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                IProject project = null;
5755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                if (element instanceof IProject) {
5855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    project = (IProject) element;
5955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                } else if (element instanceof IAdaptable) {
6055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                    project = (IProject) ((IAdaptable) element).getAdapter(IProject.class);
6155a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                }
6255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
6355a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                // and finally do the action
6455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                if (project != null) {
65d6124a176326169bc87cb29823ca2dc906689680Tor Norbye                    if (!EclipseLintRunner.runLintOnExport(mShell, project)) {
66a85107f7d763276a5a040cf68e2046ac54202015Tor Norbye                        return;
67a85107f7d763276a5a040cf68e2046ac54202015Tor Norbye                    }
68a85107f7d763276a5a040cf68e2046ac54202015Tor Norbye
697a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohet                    ProjectState state = Sdk.getProjectState(project);
707a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohet                    if (state.isLibrary()) {
717a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohet                        MessageDialog.openError(mShell, "Android Export",
727a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohet                                "Android library projects cannot be exported.");
737a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohet                    } else {
743d3c3c3a3e4e05f7ae7a0dff440fe500f90b785cXavier Ducrohet                        ExportHelper.exportUnsignedReleaseApk(project);
757a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohet                    }
7655a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project                }
7755a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project            }
7855a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project        }
7955a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
8055a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project
81ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
8255a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    public void selectionChanged(IAction action, ISelection selection) {
837a3e56acaa9b3c3d4be46edde30d6dbbd69fe9b5Xavier Ducrohet        mSelection = selection;
8455a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project    }
8555a2c71f27d3e0b8344597c7f281e687cb7aeb1bThe Android Open Source Project}
86