debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/AbstractUnifiedLaunchOptionsPage.java
author dadubrow
Mon, 18 Oct 2010 16:58:49 -0500
changeset 2160 3a82092877ea
child 2163 f0a9f2d04d4a
permissions -rw-r--r--
initial commit for PS wizard
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2160
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
     1
/*
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
     3
* All rights reserved.
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
     4
* This component and the accompanying materials are made available
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
     6
* which accompanies this distribution, and is available
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
     8
*
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
     9
* Initial Contributors:
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    11
*
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    12
* Contributors:
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    13
*
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    14
* Description: 
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    15
*
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    16
*/
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    17
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    18
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    19
package com.nokia.cdt.internal.debug.launch.newwizard;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    20
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    21
import java.text.MessageFormat;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    22
import java.util.ArrayList;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    23
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    24
import org.eclipse.core.runtime.IStatus;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    25
import org.eclipse.core.runtime.Status;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    26
import org.eclipse.jface.layout.GridDataFactory;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    27
import org.eclipse.jface.layout.GridLayoutFactory;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    28
import org.eclipse.jface.wizard.WizardPage;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    29
import org.eclipse.swt.SWT;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    30
import org.eclipse.swt.widgets.Composite;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    31
import org.eclipse.swt.widgets.Control;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    32
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    33
import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    34
import com.nokia.cdt.internal.debug.launch.newwizard.IWizardSection.ISectionChangeListener;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    35
import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    36
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    37
public abstract class AbstractUnifiedLaunchOptionsPage extends WizardPage implements ISectionChangeListener {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    38
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    39
	protected LaunchWizardData data;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    40
	protected ArrayList<IWizardSection> sections;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    41
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    42
	protected AbstractUnifiedLaunchOptionsPage(String pageName, LaunchWizardData data) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    43
		super(pageName);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    44
		this.data = data;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    45
		this.sections = new ArrayList<IWizardSection>();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    46
	}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    47
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    48
	protected void addSection(IWizardSection section) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    49
		sections.add(section);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    50
	}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    51
	
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    52
	public void createControl(Composite parent) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    53
		Composite composite = new Composite(parent, SWT.NONE);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    54
		
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    55
		GridLayoutFactory.fillDefaults().applyTo(composite);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    56
		
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    57
		setPageComplete(false);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    58
		
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    59
		for (IWizardSection section : sections) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    60
			section.createControl(composite);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    61
			section.setChangeListener(this);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    62
			GridDataFactory.fillDefaults().grab(true, true).applyTo(section.getControl());
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    63
		}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    64
		
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    65
		WorkbenchUtils.setHelpContextId(composite, LaunchWizardHelpIds.WIZARD_DIALOG_LAUNCH_OPTIONS_PAGE);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    66
		
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    67
		setControl(composite);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    68
	}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    69
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    70
	public void initializeSettings() {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    71
		for (IWizardSection section : sections) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    72
			section.initializeSettings();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    73
		}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    74
		validatePage();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    75
	}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    76
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    77
	public void validatePage() {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    78
		setMessage(null, INFORMATION);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    79
		setErrorMessage(null);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    80
		setPageComplete(true);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    81
		
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    82
		IStatus pageStatus = null;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    83
		
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    84
		// validate the subsections
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    85
		StringBuilder builder = new StringBuilder();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    86
		int severity = IStatus.OK;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    87
		for (IWizardSection section : sections) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    88
			IStatus status = section.getStatus();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    89
			if (status.isOK())
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    90
				continue;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    91
			if (builder.length() > 0)
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    92
				builder.append("\n"); //$NON-NLS-1$
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    93
			
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    94
			builder.append(MessageFormat.format("{0}: {1}", //$NON-NLS-1$
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    95
					section.getSectionName(), 
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    96
					status.getMessage()));
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    97
			severity = Math.max(severity, status.getSeverity());
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    98
		}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
    99
		if (severity == IStatus.OK) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   100
			IStatus status = getStatus();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   101
			if (!status.isOK()) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   102
				builder.append(status.getMessage());
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   103
				severity = status.getSeverity();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   104
			}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   105
		}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   106
		if (severity != 0 || builder.length() > 0) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   107
			// error from one or more sections
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   108
			pageStatus = new Status(severity, LaunchPlugin.PLUGIN_ID, builder.toString());
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   109
		} else {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   110
			// sections are good; validate the page as a whole
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   111
			pageStatus = data.validate();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   112
		}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   113
		
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   114
		setTitle(Messages.getString("UnifiedLaunchOptionsPage.TitleText")); //$NON-NLS-1$
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   115
		
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   116
		if (pageStatus != null && !pageStatus.isOK()) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   117
			setMessage(pageStatus.getMessage(), severityToMsgType(pageStatus.getSeverity()));
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   118
			setPageComplete(pageStatus.getSeverity() < IStatus.ERROR);
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   119
		}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   120
	}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   121
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   122
	private int severityToMsgType(int severity) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   123
		switch (severity) {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   124
		case IStatus.OK:
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   125
		case IStatus.INFO:
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   126
			return INFORMATION;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   127
		case IStatus.WARNING:
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   128
			return WARNING;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   129
		case IStatus.ERROR:
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   130
		default:
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   131
			return ERROR;
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   132
		}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   133
	}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   134
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   135
	protected abstract IStatus getStatus();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   136
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   137
	public void changed() {
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   138
		validatePage();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   139
		Control control = getControl();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   140
		if (control != null && !control.isDisposed())
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   141
			getWizard().getContainer().getShell().pack();
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   142
	}
3a82092877ea initial commit for PS wizard
dadubrow
parents:
diff changeset
   143
}