sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.wizards/src/com/nokia/carbide/cpp/internal/pi/wizards/ui/NewPIWizardPageInputTask.java
author Toni Pulkkinen <ext-toni.p.pulkkinen@nokia.com>
Wed, 23 Jun 2010 15:05:09 +0300
changeset 12 ae255c9aa552
parent 5 844b047e260d
permissions -rw-r--r--
Performance Investigator Carbide extension 2.4.0

/*
 * Copyright (c) 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.
 *
 * Contributors:
 *
 * Description: 
 *
 */

package com.nokia.carbide.cpp.internal.pi.wizards.ui;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;

import com.nokia.carbide.cpp.internal.pi.wizards.ui.util.CarbidePiWizardHelpIds;
import com.nokia.carbide.cpp.pi.PiPlugin;

public class NewPIWizardPageInputTask extends NewPIWizardPage implements
		INewPIWizardSettings {
	private FileSelectionGroup fileSelectionGroup;
	private ProfilerActivatorGroup profilerActivatorGroup;
	private Button fileRadioButton;
	private Button deviceRadioButton;
	
	/**
	 *  TraceViewers ID com.nokia.traceviewer.view.TraceViewerView
	 */
	private static final String TRACE_VIEWER_VIEW_ID = "com.nokia.traceviewer.view.TraceViewerView"; //$NON-NLS-1$
	

	protected NewPIWizardPageInputTask(final NewPIWizard wizard) {
		super(Messages.getString("NewPIWizardPageSampleFile.title")); //$NON-NLS-1$
		super.setWizard(wizard);
		setTitle(Messages.getString("NewPIWizardPageSampleFile.title")); //$NON-NLS-1$
	    setDescription(Messages.getString("NewPIWizardPageSampleFile.description")); //$NON-NLS-1$
	}

	public void createControl(Composite parent) {
		super.createControl(parent);
		Composite container = new Composite(parent, SWT.NULL);
		GridLayout layout = new GridLayout();
		container.setLayout(layout);
		layout.numColumns = 1;

		createRadioButtonGroup(container);
		fileSelectionGroup = new FileSelectionGroup(container, this);	
		if(PiPlugin.isTraceProviderAvailable()){
			profilerActivatorGroup = new ProfilerActivatorGroup(container, this, this, getContainer());
			fileSelectionGroup.setVisible(profilerActivatorGroup);
		}
		
		setControl(container);
		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
				CarbidePiWizardHelpIds.PI_IMPORT_WIZARD_INPUT);
	}
	
	
	/* (non-Javadoc)
	 * @see org.eclipse.jface.dialogs.DialogPage#performHelp()
	 */
	@Override
	public void performHelp() {
		WizardDialog wizardDialog = (WizardDialog)getContainer();			
		if(wizardDialog.buttonBar != null){			
			PlatformUI.getWorkbench().getHelpSystem().setHelp(wizardDialog.buttonBar,
					CarbidePiWizardHelpIds.PI_IMPORT_WIZARD_INPUT);
		}
	
	}

	private void createRadioButtonGroup(Composite parent) {
		// Radio button group
		GridLayout radioButtonGroupGridLayout = new GridLayout();
		Group radioButtonGroup = new Group(parent, SWT.NONE);
		radioButtonGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		radioButtonGroup.setText(Messages.getString("NewPIWizardPageInputTask.profilerDataSourceGroupTitle")); //$NON-NLS-1$
		radioButtonGroup.setLayout(radioButtonGroupGridLayout);
		GridData radioButtonGridData = new GridData(GridData.FILL_HORIZONTAL);
		radioButtonGridData.horizontalSpan = 2;

		// File radio button
		fileRadioButton = new Button(radioButtonGroup, SWT.RADIO);
		fileRadioButton.setText(Messages.getString("NewPIWizardPageInputTask.fromFileSystem")); //$NON-NLS-1$
		fileRadioButton.setLayoutData(radioButtonGridData);
		fileRadioButton.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {					
				if(e.widget == fileRadioButton){
					if(!fileSelectionGroup.isVisible()){
						setErrorMessage(null);
						NewPIWizardSettings.getInstance().profilerActivator = false;
						fileSelectionGroup.setVisible(profilerActivatorGroup);
					}
				}
			}
		});
		fileRadioButton.setSelection(true);

		// From Device via TraceViewer radio button
		deviceRadioButton = new Button(radioButtonGroup, SWT.RADIO);
		deviceRadioButton
				.setText(Messages.getString("NewPIWizardPageInputTask.fromDevice")); //$NON-NLS-1$
		deviceRadioButton.setLayoutData(radioButtonGridData);
		deviceRadioButton.addSelectionListener(new SelectionAdapter() {

			public void widgetSelected(SelectionEvent e) {			
				if(e.widget == deviceRadioButton){
					if(!profilerActivatorGroup.isVisible()){
						setErrorMessage(null);
						
						NewPIWizardSettings.getInstance().profilerActivator = true;
						profilerActivatorGroup.setVisible(fileSelectionGroup);
					}
				}
			}
		});
		deviceRadioButton.setSelection(false);
		
		// In case trace plugin is not available, disabling profiler activator part
		if(!PiPlugin.isTraceProviderAvailable()){
			deviceRadioButton.setEnabled(false);
		}
	}

	public void validatePage(){
		IStatus status = null;

		if(fileRadioButton.getSelection()){
			status = fileSelectionGroup.validateContent((NewPIWizard)getWizard());		
		}else{
			status = profilerActivatorGroup.validateContent((NewPIWizard)getWizard());
		}	
		setErrorMessage(null);
		if(status.getSeverity() == Status.OK){
			updateStatus(null);		
		}else if(status.getSeverity() == Status.INFO){		
			setMessage(status.getMessage());
			setPageComplete(false);			
		}else if(status.getSeverity() == Status.WARNING){
			setMessage(status.getMessage());			
			setPageComplete(true);		
		}else{
			updateStatus(status.getMessage());		
		}

		

	}

	private void updateStatus(String message) {
		// need to enable finish, setPageComplete eventually check global states
		setErrorMessage(message);
		setPageComplete(message == null);
	}

	public void setVisible(boolean visable) {
		super.setVisible(visable);
		if (visable) {
			showTraceViewer();
			validatePage();
		}
	}

	public void setupPageFromFromNewPIWizardSettings() {		
		// do nothing
	}

	/**
	 * Shows trace viewer plugin's view
	 */
	public void showTraceViewer() {
    	try {
    		IWorkbenchWindow workbenchWindow = PiPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
    		if (workbenchWindow == null)
    			return;
    		IWorkbenchPage page = workbenchWindow.getActivePage();
    		// Checking if view is already open
    		IViewReference[] viewRefs = page.getViewReferences();
    		for (int i = 0; i < viewRefs.length; i++) {
				IViewReference reference = viewRefs[i];
				String id = reference.getId();
				if(id.equalsIgnoreCase(TRACE_VIEWER_VIEW_ID)){
					// Found, restoring the view
					IViewPart viewPart = reference.getView(true);
					page.activate(viewPart);
					return;
				}
			}
    		
    		// View was not found, opening it up as a new view.
    		page.showView(TRACE_VIEWER_VIEW_ID);
    	} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.wizard.WizardPage#getNextPage()
	 */
	@Override
	public IWizardPage getNextPage() {
		if(PiPlugin.isTraceProviderAvailable() && PiPlugin.getTraceProvider().isListening()){
			((NewPIWizard)getWizard()).showInformationDialog();
			return this;
		}
		return super.getNextPage();
	}

	/* (non-Javadoc)
	 * @see org.eclipse.jface.wizard.WizardPage#getPreviousPage()
	 */
	@Override
	public IWizardPage getPreviousPage() {
		if(PiPlugin.isTraceProviderAvailable() && PiPlugin.getTraceProvider().isListening()){
			((NewPIWizard)getWizard()).showInformationDialog();
			return this;
		}
		return super.getPreviousPage();
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.swt.widgets.Widget#dispose()
	 */
	@Override
	public void dispose() {	
		if(!getWizard().canFinish()){
			handleTemporaryProfilerDataFiles(false);
		}else if(!NewPIWizardSettings.getInstance().profilerActivator){
			handleTemporaryProfilerDataFiles(true);
		}
		
	
		super.dispose();
	}	
		
	public void setButtonGroupEnabled(boolean enabled){
		deviceRadioButton.setEnabled(enabled);
		fileRadioButton.setEnabled(enabled);
	}	
	
	public void handleTemporaryProfilerDataFiles(boolean forceRemove){
		if(PiPlugin.isTraceProviderAvailable()){
			profilerActivatorGroup.handleTemporaryProfilerDataFiles(forceRemove);
		}
	}
}