core/com.nokia.carbide.cpp.leavescan/src/com/nokia/carbide/cpp/internal/leavescan/popup/actions/LeavescanAction.java
branchC3_BUILDER_WORK
changeset 1657 03f5f8bf29b4
parent 1656 d1edeecb12af
parent 1655 e17ab99b8f30
child 1659 48d0d704d5e6
--- a/core/com.nokia.carbide.cpp.leavescan/src/com/nokia/carbide/cpp/internal/leavescan/popup/actions/LeavescanAction.java	Wed Jul 21 11:37:56 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-/*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-*/
-package com.nokia.carbide.cpp.internal.leavescan.popup.actions;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.IActionDelegate;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-
-import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
-import com.nokia.carbide.cdt.builder.EpocEngineHelper;
-import com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder;
-import com.nokia.carbide.cdt.builder.builder.CarbideCommandLauncher;
-import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
-import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
-import com.nokia.carbide.cpp.internal.leavescan.LeavescanPlugin;
-import com.nokia.carbide.cpp.internal.leavescan.ui.LeavescanPreferenceConstants;
-import com.nokia.cpp.internal.api.utils.core.HostOS;
-
-public class LeavescanAction implements IObjectActionDelegate {
-	
-	private ISelection selection;
-	
-	// id definied from plugin.xml
-	public static final String LEAVE_SCAN_ACTION_POP_UP_ID = "com.nokia.carbide.cpp.leavescan.leaveScanAction";
-	public static final String LEAVE_SCAN_ACTION_MMP_POP_UP_ID = "com.nokia.carbide.cpp.leavescan.leaveScanActionOnMMP";
-
-	
-	/**
-	 * Constructor for Action1.
-	 */
-	public LeavescanAction() {
-		super();
-	}
-
-	/**
-	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
-	 */
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-	}
-
-	/**
-	 * @see IActionDelegate#run(IAction)
-	 */
-	public void run(IAction action) {
-		if (action.getId().equals(LEAVE_SCAN_ACTION_POP_UP_ID)){
-			// scan the selected source file(s)
-			handleLeaveScanAction(action);
-		} else if (action.getId().equals(LEAVE_SCAN_ACTION_MMP_POP_UP_ID)){
-			// scan the selected source file(s)
-			handleLeaveScanActionOnMMP(action);
-		}
-	}
-
-	/**
-	 * @see IActionDelegate#selectionChanged(IAction, ISelection)
-	 */
-	public void selectionChanged(IAction action, ISelection selection) {
-		this.selection = selection;
-	}
-	
-	/**
-	 * Run leavescan on source file selection(s)
-	 * @param action
-	 */
-	private void handleLeaveScanAction(IAction action){
-		// get the project each file belongs to...
-		HashMap<IProject, List<IPath>> projectSourceMap = new HashMap<IProject, List<IPath>>();
-		if (selection != null && selection instanceof IStructuredSelection) {
-			Iterator iter = ((IStructuredSelection)selection).iterator();
-			while (iter.hasNext()) {
-				Object selItem = iter.next();
-				if (selItem instanceof IFile) {
-					IProject currProject = ((IResource)selItem).getProject();
-					if (projectSourceMap.get(currProject) == null){
-						// project is not a key, create a new key/value entry
-						List<IPath> pathList = new ArrayList<IPath>();
-						pathList.add(((IResource)selItem).getLocation());
-						projectSourceMap.put(currProject, pathList);
-
-					} else {
-						// this key already exists, update the source list
-						List<IPath> pathList  = projectSourceMap.get(currProject);
-						pathList.add(((IResource)selItem).getLocation());
-						projectSourceMap.put(currProject, pathList);  // 2+ paths exist for this project
-					}
-				}
-			}
-		}
-		
-		// Get the leavescan preferences...
-		IPreferenceStore store = LeavescanPlugin.getLeaveScanPrefsStore();
-		final boolean noisyOutput =  store.getBoolean(LeavescanPreferenceConstants.LEAVESCAN_NOISY_OUTPUT);
-		final String leaveScanFolder = store.getString(LeavescanPreferenceConstants.LEAVESCAN_FOLDER);
-		
-		for (final IProject project : projectSourceMap.keySet()){
-			final List<IPath> finalPathList = projectSourceMap.get(project);	
-			// Run a job on each project. The arguments for leavescan is:
-			// leavescan [-h|-n|-v|-N] <iFilename.cpp> [<iFilename.cpp> ...]
-			//
-			//            -h: This help.
-			//            -n: Noisy output - provides diagnostics (if available).
-			//            -N: Very noisy output - provides diagnostics (if available).
-			//            -v: Displays version (for build & automation systems).
-			Job buildJob = new Job("Running Leave Scan on Project: " + project.getName()) { //$NON-NLS-1$
-				protected IStatus run(IProgressMonitor monitor){
-					
-					final String[] leaveScanParserIds = new String[] {
-				        "com.nokia.carbide.cpp.leavescan.LeaveScanErrorParser"
-				        };
-					
-			        ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager().getProjectInfo(project);
-			        try {
-			        	CarbideCPPBuilder.removeAllMarkers(project);
-			        } catch (CoreException e){
-			        	e.printStackTrace();
-			        }
-			        IPath workingDir = cpi.getINFWorkingDirectory();
-					CarbideCommandLauncher cmdLauncher = new CarbideCommandLauncher(project, monitor, leaveScanParserIds, workingDir);
-					cmdLauncher.startTimingStats();
-					int fileCount = 1;
-					int listSize = finalPathList.size();
-					for (IPath currPath : finalPathList){
-						
-						//System.out.print("\nProject: " + project.getName() + " | Source File: " + currPath.toOSString()); // Debug
-						
-						ICarbideBuildConfiguration defaultConfig = cpi.getDefaultConfiguration();
-						monitor.beginTask("Running leavescan.", 100);
-						
-						double dWorked = ((double)fileCount / (double)listSize) * 100;
-						monitor.worked((int)dWorked);
-						String taskName = "Running leavescan on file \"" + currPath.toOSString() + "\" for project \"" + project.getName() + ".";
-						monitor.setTaskName(taskName);
-						cmdLauncher.writeToConsole("\n***" + taskName + "\n");
-						// Construct the leavescan arguments
-						List<String> leaveScanArgList = new ArrayList<String>();
-						leaveScanArgList.add("/c");
-						
-						if (leaveScanFolder.length() > 0){
-							leaveScanArgList.add(leaveScanFolder + "leavescan" + HostOS.EXE_EXT);
-						} else {
-							leaveScanArgList.add("leavescan" + HostOS.EXE_EXT);
-						}
-
-						if (noisyOutput) {
-							leaveScanArgList.add("-N");
-						} else {
-							leaveScanArgList.add("-n");
-						}
-						
-						leaveScanArgList.add(currPath.toOSString());
-						String[] args = new String[leaveScanArgList.size()];
-						leaveScanArgList.toArray(args);
-						cmdLauncher.showCommand(true);
-						
-						// executeCommand, a special extension to the regular execute which will handle
-						// writing the console output, error parsing, and creating error markers.
-						cmdLauncher.executeCommand(CarbideCommandLauncher.getCmdExeLocation(), args, CarbideCPPBuilder.getResolvedEnvVars(defaultConfig), workingDir);
-						
-						fileCount++;
-					}
-					cmdLauncher.writeToConsole(cmdLauncher.getTimingStats());
-					return new Status(IStatus.OK, LeavescanPlugin.PLUGIN_ID, IStatus.OK, "LeaveScan Complete", null); 
-				}
-			};
-			
-			buildJob.setPriority(Job.BUILD);
-			buildJob.schedule();
-		}
-	}
-	
-	/**
-	 * Run leavescan on all the sources in the current project MMP file.
-	 * The sources files will be build configuration specifc (i.e. MMP is preprocessed) to return
-	 * platform specific source list.
-	 * @param action - The IAction interface from the eclipse core
-	 */
-	private void handleLeaveScanActionOnMMP(IAction action){
-		// get the project each file belongs to...
-		IProject project = null;
-		IPath mmpFile = null;
-		if (selection != null && selection instanceof IStructuredSelection) {
-			Iterator iter = ((IStructuredSelection)selection).iterator();
-			while (iter.hasNext()) {
-				Object selItem = iter.next();
-				if (selItem instanceof IFile) {
-					project = ((IResource)selItem).getProject();
-					mmpFile = ((IResource)selItem).getLocation();
-					//System.out.print("\nMMP File Selected: " + ((IResource)selItem).getLocation());
-				}
-			}
-		}
-		
-		if (project == null){
-			return;
-		}
-		
-		// Get the leavescan preferences...
-		IPreferenceStore store = LeavescanPlugin.getLeaveScanPrefsStore();
-		final boolean noisyOutput =  store.getBoolean(LeavescanPreferenceConstants.LEAVESCAN_NOISY_OUTPUT);
-		final String leaveScanFolder = store.getString(LeavescanPreferenceConstants.LEAVESCAN_FOLDER);
-		
-		ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager().getProjectInfo(project);
-		if (cpi.getDefaultConfiguration() == null)
-        	return;
-		
-		List<IPath> sourceFileList = new ArrayList<IPath>();
-		// Get the list of source files for the default configuration this MMP is associated with.
-		sourceFileList = EpocEngineHelper.getSourceFilesForConfiguration(cpi.getDefaultConfiguration(), mmpFile);
-		
-		final List<IPath> finalPathList = new ArrayList<IPath>(sourceFileList);	
-		final IProject finalProject = project;
-		final Path finalMMPPath = new Path(mmpFile.toOSString());
-		Job buildJob = new Job("Running Leave Scan on MMP: " + mmpFile.toOSString()) { //$NON-NLS-1$
-			protected IStatus run(IProgressMonitor monitor){
-				
-				final String[] leaveScanParserIds = new String[] {
-			        "com.nokia.carbide.cpp.leavescan.LeaveScanErrorParser"
-			        };
-				
-		        ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager().getProjectInfo(finalProject);
-		        try {
-		        	CarbideCPPBuilder.removeAllMarkers(finalProject);
-		        } catch (CoreException e){
-		        	e.printStackTrace();
-		        }
-		        IPath workingDir = cpi.getINFWorkingDirectory();
-				CarbideCommandLauncher cmdLauncher = new CarbideCommandLauncher(finalProject, monitor, leaveScanParserIds, workingDir);
-				cmdLauncher.startTimingStats();
-				int fileCount = 1;
-				int listSize = finalPathList.size();
-				for (IPath currPath : finalPathList){
-					
-					//System.out.print("\nMMP Project: " + finalMMPPath.lastSegment() + " | Source File: " + currPath.toOSString()); // Debug
-					
-					ICarbideBuildConfiguration defaultConfig = cpi.getDefaultConfiguration();
-					monitor.beginTask("Running leavescan.", 100);
-					
-					double dWorked = ((double)fileCount / (double)listSize) * 100;
-					monitor.worked((int)dWorked);
-					String taskName = "Running leavescan on file \"" + currPath.toOSString() + "\" for MMP \"" + finalMMPPath.lastSegment() + ".";
-					monitor.setTaskName(taskName);
-					cmdLauncher.writeToConsole("\n***" + taskName + "\n");
-					// Construct the leavescan arguments
-					List<String> leaveScanArgList = new ArrayList<String>();
-					leaveScanArgList.add("/c");
-					
-					if (leaveScanFolder.length() > 0){
-						leaveScanArgList.add(leaveScanFolder + "leavescan" + HostOS.EXE_EXT);
-					} else {
-						leaveScanArgList.add("leavescan" + HostOS.EXE_EXT);
-					}
-
-					if (noisyOutput) {
-						leaveScanArgList.add("-N");
-					} else {
-						leaveScanArgList.add("-n");
-					}
-					
-					leaveScanArgList.add(currPath.toOSString());
-					String[] args = new String[leaveScanArgList.size()];
-					leaveScanArgList.toArray(args);
-					cmdLauncher.showCommand(true);
-					
-					// executeCommand, a special extension to the regular execute which will handle
-					// writing the console output, error parsing, and creating error markers.
-					cmdLauncher.executeCommand(CarbideCommandLauncher.getCmdExeLocation(), args, CarbideCPPBuilder.getResolvedEnvVars(defaultConfig), workingDir);
-					
-					fileCount++;
-				}
-				cmdLauncher.writeToConsole(cmdLauncher.getTimingStats());
-				return new Status(IStatus.OK, LeavescanPlugin.PLUGIN_ID, IStatus.OK, "LeaveScan Complete", null); 
-			}
-		};
-		
-		buildJob.setPriority(Job.BUILD);
-		buildJob.schedule();
-		
-	}
-
-}