com.nokia.testfw.codegen.ui.wizard.TestCasePreviewPage.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.testfw.codegen.ui.wizard.TestCasePreviewPage.java

Source

/*
 * 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);
        }
    }
}