org.eclipse.pde.internal.ui.nls.InternationalizeOperation.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.pde.internal.ui.nls.InternationalizeOperation.java

Source

/*******************************************************************************
 * Copyright (c) 2008, 2012 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.pde.internal.ui.nls;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.PluginRegistry;
import org.eclipse.pde.internal.core.WorkspaceModelManager;
import org.eclipse.pde.internal.ui.PDEUIMessages;

/**
 * InternationalizeOperation is responsible for populating a plug-in model table
 * containing the list of plug-ins (workspace and external) prior to running the
 * wizard. An instance of this class must be created before creating an
 * InternationlizeWizard instance.
 * 
 * @author Team Azure
 *
 */
public class InternationalizeOperation implements IRunnableWithProgress {

    private ISelection fSelection;
    private ArrayList<Object> fSelectedModels;
    private InternationalizeModelTable fModelPluginTable;
    private boolean fCanceled;

    /**
     * 
     * @param selection represents the preselected plug-in projects in the workbench
     */
    public InternationalizeOperation(ISelection selection) {
        fSelection = selection;
    }

    public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {

        if (fSelection instanceof IStructuredSelection) {

            Object[] elems = ((IStructuredSelection) fSelection).toArray();

            fSelectedModels = new ArrayList<Object>(elems.length);
            for (int i = 0; i < elems.length; i++) {
                //If a file was selected, get its parent project
                if (elems[i] instanceof IFile)
                    elems[i] = ((IFile) elems[i]).getProject();

                //Add the project to the preselected model list
                if (elems[i] instanceof IProject && WorkspaceModelManager.isPluginProject((IProject) elems[i])
                        && !WorkspaceModelManager.isBinaryProject((IProject) elems[i]))
                    fSelectedModels.add(elems[i]);
            }
        }

        //Get all models (workspace and external) excluding fragment models
        IPluginModelBase[] pluginModels = PluginRegistry.getAllModels(false);
        monitor.beginTask(PDEUIMessages.GetNonExternalizedStringsOperation_taskMessage, pluginModels.length);

        //Populate list to an InternationalizeModelTable
        fModelPluginTable = new InternationalizeModelTable();
        for (int i = 0; i < pluginModels.length; i++) {
            fModelPluginTable.addToModelTable(pluginModels[i],
                    pluginModels[i].getUnderlyingResource() != null
                            ? selected(pluginModels[i].getUnderlyingResource().getProject())
                            : false);
        }
    }

    /**
     * 
     * @return whether or not the operation was cancelled
     */
    public boolean wasCanceled() {
        return fCanceled;
    }

    /**
     * 
     * @param project
     * @return whether or not the project was preselected
     */
    public boolean selected(IProject project) {
        return fSelectedModels.contains(project);
    }

    /**
     * 
     * @return the InternationalizeModelTable containing the plug-ins
     */
    public InternationalizeModelTable getPluginTable() {
        return fModelPluginTable;
    }
}