org.eclipse.osee.ote.ui.define.importer.OutfileImportPage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.osee.ote.ui.define.importer.OutfileImportPage.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2007 Boeing.
 * 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
 *
 * Contributors:
 *     Boeing - initial API and implementation
 *******************************************************************************/
package org.eclipse.osee.ote.ui.define.importer;

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.osee.framework.core.data.IOseeBranch;
import org.eclipse.osee.framework.core.data.TestRunStorageKey;
import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
import org.eclipse.osee.framework.ui.skynet.widgets.XBranchSelectWidget;
import org.eclipse.osee.ote.ui.define.OteUiDefinePlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer;
import org.eclipse.ui.dialogs.WizardDataTransferPage;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;

/**
 * @author Roberto E. Escobar
 */
public class OutfileImportPage extends WizardDataTransferPage {
    private static final String PAGE_NAME = "Outfile Import";

    private CheckboxTreeViewer treeViewer;
    private final IStructuredSelection startingResourceSelection;
    private final boolean treeSelectionMode;
    private final ITreeContentProvider contentProvider;
    private final ILabelProvider labelProvider;
    private final List<ViewerFilter> filters;
    private final Object treeInput;
    private XBranchSelectWidget branchSelect;

    protected OutfileImportPage(IStructuredSelection selection) {
        super(PAGE_NAME);
        this.treeInput = ResourcesPlugin.getWorkspace().getRoot();
        this.treeSelectionMode = true;
        this.contentProvider = new WorkbenchContentProvider();
        this.labelProvider = new WorkbenchLabelProvider();
        this.filters = new ArrayList<ViewerFilter>();
        //      this.filters.add(new FileFilter());
        this.startingResourceSelection = selection;
    }

    @Override
    protected boolean allowNewContainerName() {
        return false;
    }

    @Override
    public void handleEvent(Event event) {
        updateWidgetEnablements();
    }

    @Override
    public void createControl(Composite parent) {
        initializeDialogUnits(parent);

        Composite composite = new Composite(parent, SWT.NULL);
        composite.setLayout(new GridLayout());
        composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
        composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
        composite.setFont(parent.getFont());

        Group group = new Group(composite, SWT.NONE);
        group.setLayout(new GridLayout());
        group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        group.setText("Select a Branch to import files into");
        group.setToolTipText("Opens the branch selection dialog");
        branchSelect = new XBranchSelectWidget("branch");
        branchSelect.createWidgets(group, SWT.BORDER | SWT.READ_ONLY);

        createFileSelectArea(composite);

        restoreWidgetValues();
        updateWidgetEnablements();
        setErrorMessage(null); // should not initially have error message
        setControl(composite);
    }

    private void createFileSelectArea(Composite parent) {
        Group group = new Group(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
        layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
        layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
        layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
        group.setLayout(layout);
        group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        group.setText("Select Files");
        group.setToolTipText("Select files to import");

        Composite composite = new Composite(group, SWT.NULL);
        composite.setLayout(new GridLayout());
        composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
        composite.setFont(parent.getFont());

        if (treeSelectionMode) {
            treeViewer = new ContainerCheckedTreeViewer(composite, SWT.BORDER);
        } else {
            treeViewer = new CheckboxTreeViewer(composite, SWT.BORDER);
        }

        treeViewer.setContentProvider(contentProvider);
        treeViewer.setLabelProvider(labelProvider);
        treeViewer.addCheckStateListener(new ICheckStateListener() {
            @Override
            public void checkStateChanged(CheckStateChangedEvent event) {
                setPageComplete(determinePageCompletion());
            }
        });
        if (filters != null) {
            for (int i = 0; i != filters.size(); i++) {
                treeViewer.addFilter(filters.get(i));
            }
        }
        treeViewer.setInput(treeInput);

        Tree treeWidget = treeViewer.getTree();
        GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
        data.widthHint = convertWidthInCharsToPixels(80);
        data.heightHint = convertHeightInCharsToPixels(16);
        treeWidget.setLayout(new GridLayout());
        treeWidget.setLayoutData(data);
        treeWidget.setFont(composite.getFont());
        treeWidget.setEnabled(true);

        createSelectionButtons(composite);
    }

    private Button createButton(Composite parent, int id, String label, boolean defaultButton) {
        // increment the number of columns in the button bar
        ((GridLayout) parent.getLayout()).numColumns++;
        Button button = new Button(parent, SWT.PUSH);
        button.setText(label);
        button.setFont(JFaceResources.getDialogFont());
        button.setData(new Integer(id));
        setButtonLayoutData(button);
        return button;
    }

    private Composite createSelectionButtons(Composite composite) {
        Composite buttonComposite = new Composite(composite, SWT.RIGHT);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        buttonComposite.setLayout(layout);
        buttonComposite.setFont(composite.getFont());
        GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);
        data.grabExcessHorizontalSpace = true;
        composite.setData(data);
        Button selectButton = createButton(buttonComposite, IDialogConstants.SELECT_ALL_ID, "Select All", false);
        SelectionListener listener = new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                Object[] viewerElements = contentProvider.getElements(treeInput);
                if (treeSelectionMode) {
                    treeViewer.setCheckedElements(viewerElements);
                } else {
                    for (int i = 0; i < viewerElements.length; i++) {
                        treeViewer.setSubtreeChecked(viewerElements[i], true);
                    }
                }
                updateWidgetEnablements();
            }
        };
        selectButton.addSelectionListener(listener);
        Button deselectButton = createButton(buttonComposite, IDialogConstants.DESELECT_ALL_ID, "Deselect All",
                false);
        listener = new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                treeViewer.setCheckedElements(new Object[0]);
                updateWidgetEnablements();
            }
        };
        deselectButton.addSelectionListener(listener);
        return buttonComposite;
    }

    @Override
    protected void restoreWidgetValues() {
        IDialogSettings settings = getDialogSettings();
        if (settings != null) {
            String lastSelected = settings.get(TestRunStorageKey.SELECTED_BRANCH_ID);
            try {
                branchSelect.setSelection(BranchManager.getBranch(Long.parseLong(lastSelected)));
            } catch (Exception ex) {
                OseeLog.log(OteUiDefinePlugin.class, Level.SEVERE, ex);
            }
        }
        onStartSelectedResource();
    }

    private void onStartSelectedResource() {
        if (startingResourceSelection != null) {
            if (startingResourceSelection.size() > 0) {
                for (Object firstElement : startingResourceSelection.toArray()) {
                    if (firstElement instanceof IAdaptable) {
                        Object resource = ((IAdaptable) firstElement).getAdapter(IResource.class);
                        if (resource != null) {
                            IResource currentResource = (IResource) resource;
                            if (currentResource.getType() == IResource.FILE) {
                                IResource parentResource = currentResource.getParent();
                                if (parentResource != null && parentResource.isAccessible() != false) {
                                    treeViewer.expandToLevel(parentResource, IResource.DEPTH_ONE);
                                    treeViewer.setChecked(currentResource, true);
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    @Override
    protected boolean validateSourceGroup() {
        boolean toReturn = super.validateSourceGroup();
        URI[] selectedResources = getSelectedResources();
        if (selectedResources.length == 0) {
            setMessage(null);
            setErrorMessage("There are no resources currently selected for import.");
            toReturn &= false;
        }
        return toReturn;
    }

    @Override
    protected boolean validateDestinationGroup() {
        boolean toReturn = super.validateDestinationGroup();
        IOseeBranch branch = branchSelect.getData();
        if (branch == null) {
            setMessage(null);
            setErrorMessage("Please select a working branch. Cannot import into a null branch.");
            toReturn &= false;
        } else {
            try {
                if (!BranchManager.getBranch(branch).hasParentBranch()) {
                    setMessage(null);
                    setErrorMessage("Please select a working branch. Cannot import into a top-level branch.");
                    toReturn &= false;
                }
            } catch (OseeCoreException ex) {
                OseeLog.log(OteUiDefinePlugin.class, Level.SEVERE, ex);
            }
        }
        return toReturn;
    }

    @Override
    protected void updateWidgetEnablements() {
        boolean pageComplete = determinePageCompletion();
        setPageComplete(pageComplete);
        if (pageComplete) {
            setMessage(null);
        }
        super.updateWidgetEnablements();
    }

    @Override
    protected void saveWidgetValues() {
        IDialogSettings settings = getDialogSettings();
        if (settings != null) {
            // update source names history
            String[] branchUuids = settings.getArray(TestRunStorageKey.BRANCH_IDS);
            if (branchUuids == null) {
                branchUuids = new String[0];
            }

            IOseeBranch branch = branchSelect.getData();
            try {
                if (branch != null && BranchManager.getBranch(branch).hasParentBranch()) {
                    String lastBranchSelected = Long.toString(branch.getUuid());
                    branchUuids = addToHistory(branchUuids, lastBranchSelected);

                    settings.put(TestRunStorageKey.BRANCH_IDS, branchUuids);
                    settings.put(TestRunStorageKey.SELECTED_BRANCH_ID, lastBranchSelected);
                    try {
                        settings.save(this.getClass().getName());
                    } catch (IOException ex) {
                        OseeLog.log(OteUiDefinePlugin.class, Level.SEVERE, ex);
                    }
                }
            } catch (OseeCoreException ex) {
                OseeLog.log(OteUiDefinePlugin.class, Level.SEVERE, ex);
            }
        }
    }

    private URI[] getSelectedResources() {
        Object[] selected = treeViewer.getCheckedElements();
        List<URI> selectedResources = new ArrayList<URI>();
        for (Object object : selected) {
            if (object instanceof IFile) {
                IFile iFile = (IFile) object;
                selectedResources.add(iFile.getLocationURI());
            }
        }
        return selectedResources.toArray(new URI[selectedResources.size()]);
    }

    public boolean finish() {
        saveWidgetValues();
        return new ImportOutfileUIOperation(branchSelect.getData(), getSelectedResources()).execute();
    }
}