testdev/ite/src/com.nokia.testfw.codegen.ui/src/com/nokia/testfw/codegen/ui/wizard/TestCasePreviewPage.java
author Johnson Ma <johnson.ma@nokia.com>
Tue, 30 Mar 2010 14:39:29 +0800
changeset 1 96906a986c3b
permissions -rw-r--r--
contribute ITE to symbian foundation

/*
 * 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 "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.testfw.codegen.ui.wizard;

import java.util.Map;

import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.IPageChangingListener;
import org.eclipse.jface.dialogs.PageChangedEvent;
import org.eclipse.jface.dialogs.PageChangingEvent;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.part.PageBook;

import com.nokia.testfw.codegen.ChangeFileContent;
import com.nokia.testfw.codegen.ui.util.PathNode;
import com.nokia.testfw.codegen.ui.util.PathNodeConverter;
import com.nokia.testfw.codegen.ui.util.PathNodeTreeContentLabelProvoder;
import com.nokia.testfw.codegen.ui.util.PathNodeTreeViewerComparator;
import com.nokia.testfw.codegen.ui.wizard.preview.ChangeElement;
import com.nokia.testfw.codegen.ui.wizard.preview.ComparePreviewer;

/**
 * Test Case Wizard page for reviewing changes
 * 
 */
public class TestCasePreviewPage extends WizardPage implements
		IPageChangedListener, IPageChangingListener {

	private PageBook previewContainer;
	private ComparePreviewer comparePreview;
	private TreeViewer iTreeViewer;

	private Map<String, ChangeFileContent> iResultMap;

	Composite container;

	/**
	 * @param pageName
	 */
	public TestCasePreviewPage() {
		super("SkeletonPreviewPage");
		setTitle("Preview changes");
		setDescription("Click finish to generate test case(s)");
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets
	 * .Composite)
	 */
	public void createControl(Composite parent) {
		container = new Composite(parent, SWT.NONE);
		container.setLayout(new GridLayout(1, true));

		// table to display all files that are going to be changed
		Label label1 = new Label(container, SWT.SINGLE);
		label1.setText("Files to be modified");

		iTreeViewer = new TreeViewer(container, SWT.BORDER | SWT.H_SCROLL
				| SWT.V_SCROLL);
		iTreeViewer.getTree().setLayoutData(
				new GridData(SWT.FILL, SWT.TOP, true, false));
		PathNodeTreeContentLabelProvoder provider = new PathNodeTreeContentLabelProvoder();
		iTreeViewer.setLabelProvider(provider);
		iTreeViewer.setContentProvider(provider);
		iTreeViewer.setComparator(new PathNodeTreeViewerComparator());
		iTreeViewer
				.addSelectionChangedListener(new ISelectionChangedListener() {
					public void selectionChanged(SelectionChangedEvent event) {
						ITreeSelection sel = (ITreeSelection) event
								.getSelection();
						if (sel != null) {
							PathNode node = (PathNode) sel.getFirstElement();
							if (node != null) {
								setSelectElement((ChangeElement) node.getData());
							}
						}
					}
				});

		// UI elements to show the CompareViewerSwitchingPane
		SashForm sashForm = new SashForm(container, SWT.VERTICAL);
		sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
		sashForm.setBackground(new Color(getShell().getDisplay(), 0, 0, 0));
		previewContainer = new PageBook(sashForm, SWT.NONE);
		comparePreview = new ComparePreviewer(previewContainer, false, false);

		setSelectElement(null);
		setControl(container);

		/**
		 * We want to be informed about pageChanged event in order to generate
		 * content.
		 */
		((WizardDialog) getContainer()).addPageChangedListener(this);
		((WizardDialog) getContainer()).addPageChangingListener(this);
	}

	private void update() {
		if (iResultMap != null) {
			PathNode root = new PathNode("");
			PathNode targetProject = new PathNode(
					((AbstractTemplateWizard) getWizard()).getProjectName());
			root.addChild(targetProject);
			for (String path : iResultMap.keySet()) {
				ChangeFileContent lChangeContent = iResultMap.get(path);
				if (lChangeContent.getNewContent().equals(
						lChangeContent.getOldContent())) {
					continue;
				}
				PathNode node = PathNodeConverter.pathToNode(targetProject,
						path);
				node.setData(new ChangeElement(lChangeContent));
			}
			iTreeViewer.setInput(root);
			iTreeViewer.expandAll();
		}
	}

	/**
	 * Sets input to compare preview (called from wizard when page is set to
	 * visible)
	 * 
	 * @param changeElement
	 *            to set to the preview
	 **/
	private void setSelectElement(ChangeElement changeElement) {
		comparePreview.setInput(changeElement);
		previewContainer.showPage(comparePreview.getControl());
	}

	public void pageChanged(PageChangedEvent event) {
		if (event.getSelectedPage() instanceof TestCasePreviewPage) {
			iResultMap = ((IPreviewResult) getWizard()).getPreviewResult();
			((IPreviewResult) getWizard()).setPreviewResult(iResultMap);
			update();
		}
	}

	public void handlePageChanging(PageChangingEvent event) {
		if (event.getCurrentPage() instanceof TestCasePreviewPage) {
			((IPreviewResult) getWizard()).setPreviewResult(null);
		}
	}
}