gov.redhawk.ide.ui.wizard.RedhawkImportWizardPage2.java Source code

Java tutorial

Introduction

Here is the source code for gov.redhawk.ide.ui.wizard.RedhawkImportWizardPage2.java

Source

/*******************************************************************************
 * This file is protected by Copyright. 
 * Please refer to the COPYRIGHT file distributed with this source distribution.
 *
 * This file is part of REDHAWK IDE.
 *
 * All rights reserved.  This program and the accompanying materials are made available under 
 * the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at 
 * http://www.eclipse.org/legal/epl-v10.html
 *******************************************************************************/
package gov.redhawk.ide.ui.wizard;

import gov.redhawk.ide.codegen.ITemplateDesc;
import gov.redhawk.ide.codegen.internal.CodeGeneratorTemplatesRegistry;
import gov.redhawk.ide.ui.wizard.RedhawkImportWizardPage1.ProjectRecord;

import java.util.Arrays;

import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
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.swt.widgets.Tree;
import org.eclipse.ui.internal.wizards.datatransfer.DataTransferMessages;

/**
 * @since 9.1
 */
@SuppressWarnings("restriction")
public class RedhawkImportWizardPage2 extends WizardPage {
    private TreeViewer viewer;
    private ProjectRecord[] projects = null;

    public RedhawkImportWizardPage2() {
        this("redhawkImportWizard");
    }

    protected RedhawkImportWizardPage2(String pageName) {
        super(pageName);
        // Users are not required to make edits using this page
        setTitle("Import Projects");
        setDescription("Some projects are missing files and may require additional information");
        setPageComplete(true);
    }

    @Override
    public void createControl(Composite parent) {
        Composite workArea = new Composite(parent, SWT.NULL);
        workArea.setLayout(new GridLayout());
        workArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        Label projectLabel = new Label(workArea, SWT.NONE);
        projectLabel.setText("Project Details: ");
        createProjectsTable(workArea);

        setControl(workArea);
    }

    private void createProjectsTable(Composite workArea) {
        viewer = new TreeViewer(workArea,
                SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
        final Tree projectTree = viewer.getTree();
        projectTree.setHeaderVisible(true);
        projectTree.setLinesVisible(true);

        viewer.setContentProvider(new RedhawkImportContentProvider());
        viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        createColumns(workArea, viewer);
    }

    private void createColumns(Composite workArea, final TreeViewer viewer) {
        TreeViewerColumn nameColumn = new TreeViewerColumn(viewer, SWT.NONE);
        nameColumn.getColumn().setWidth(300);
        nameColumn.getColumn().setText("Project: ");
        nameColumn.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                if (element instanceof ProjectRecord) {
                    ProjectRecord project = (ProjectRecord) element;
                    String dir = project.projectSystemFile.getParentFile().getAbsolutePath();
                    return NLS.bind(DataTransferMessages.WizardProjectsImportPage_projectLabel,
                            project.getProjectName(), dir);
                }
                if (element instanceof ImplWrapper) {
                    ImplWrapper implWrapper = (ImplWrapper) element;
                    return implWrapper.getImpl().getId() + " (implementation)";
                }
                return "";
            }
        });

        // Get a String array of accepted template id's
        CodeGeneratorTemplatesRegistry reg = new CodeGeneratorTemplatesRegistry();
        ITemplateDesc[] templateDescriptions = reg.getTemplates();
        final String[] templates = new String[templateDescriptions.length];
        for (int i = 0; i < templateDescriptions.length; i++) {
            templates[i] = templateDescriptions[i].getId();
        }

        final TreeViewerColumn templateColumn = new TreeViewerColumn(viewer, SWT.NONE);
        templateColumn.getColumn().setWidth(500);
        templateColumn.getColumn().setText("Template: ");
        templateColumn.setLabelProvider(new ColumnLabelProvider() {

            @Override
            public String getText(Object element) {
                if (element instanceof ImplWrapper) {
                    ImplWrapper implWrapper = (ImplWrapper) element;
                    return implWrapper.getTemplate();
                } else {
                    return "";
                }
            }
        });
        templateColumn.setEditingSupport(new EditingSupport(viewer) {

            @Override
            protected boolean canEdit(Object element) {
                return true;
            }

            @Override
            protected CellEditor getCellEditor(Object element) {
                ComboBoxCellEditor cellEditor = new ComboBoxCellEditor(viewer.getTree(), templates, SWT.READ_ONLY);
                return cellEditor;
            }

            @Override
            protected Object getValue(Object element) {
                if (element instanceof ImplWrapper) {
                    ImplWrapper implWrapper = (ImplWrapper) element;
                    String templateID = implWrapper.getTemplate();
                    int index = Arrays.asList(templates).indexOf(templateID);
                    return index;
                } else {
                    return 0;
                }
            }

            @Override
            protected void setValue(Object element, Object value) {
                if (element instanceof ImplWrapper) {
                    ImplWrapper implWrapper = (ImplWrapper) element;
                    String template = templates[(Integer) value];
                    implWrapper.setTemplate(template);
                    viewer.update(element, null);
                }
            }
        });
    }

    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);

        // Get selected list of projects from the previous page
        RedhawkImportWizardPage1 previousPage = (RedhawkImportWizardPage1) getPreviousPage();
        projects = previousPage.getProjectRecords();
        viewer.setInput(projects);
    }
}