org.eclipse.osee.ats.navigate.NavigateView.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.osee.ats.navigate.NavigateView.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.ats.navigate;

import java.util.logging.Level;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IRegistryEventListener;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osee.ats.actions.MyFavoritesAction;
import org.eclipse.osee.ats.actions.MyWorldAction;
import org.eclipse.osee.ats.actions.NewAction;
import org.eclipse.osee.ats.actions.NewGoal;
import org.eclipse.osee.ats.actions.OpenChangeReportByIdAction;
import org.eclipse.osee.ats.actions.OpenWorkflowByIdAction;
import org.eclipse.osee.ats.actions.OpenWorldByIdAction;
import org.eclipse.osee.ats.core.client.config.AtsBulkLoad;
import org.eclipse.osee.ats.core.client.util.AtsUtilClient;
import org.eclipse.osee.ats.core.util.AtsUtilCore;
import org.eclipse.osee.ats.help.ui.AtsHelpContext;
import org.eclipse.osee.ats.internal.Activator;
import org.eclipse.osee.ats.internal.AtsClientService;
import org.eclipse.osee.ats.search.AtsQuickSearchComposite;
import org.eclipse.osee.framework.core.operation.OperationBuilder;
import org.eclipse.osee.framework.core.operation.Operations;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.ui.plugin.util.HelpUtil;
import org.eclipse.osee.framework.ui.plugin.xnavigate.IXNavigateEventListener;
import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateEventManager;
import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
import org.eclipse.osee.framework.ui.skynet.OseeStatusContributionItemFactory;
import org.eclipse.osee.framework.ui.skynet.action.CollapseAllAction;
import org.eclipse.osee.framework.ui.skynet.action.ExpandAllAction;
import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite;
import org.eclipse.osee.framework.ui.skynet.util.LoadingComposite;
import org.eclipse.osee.framework.ui.swt.Displays;
import org.eclipse.osee.framework.ui.swt.Widgets;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.progress.UIJob;

/**
 * @author Donald G. Dunne
 */
public class NavigateView extends ViewPart implements IXNavigateEventListener {

    public static final String VIEW_ID = "org.eclipse.osee.ats.navigate.NavigateView";
    private static final String INPUT = "filter";
    private static final String FILTER_STR = "filterStr";

    private String savedFilterStr;
    private AtsNavigateComposite xNavComp;
    private Composite parent;
    private LoadingComposite loadingComposite;

    @Override
    public void createPartControl(Composite parent) {
        this.parent = parent;
        if (DbConnectionExceptionComposite.dbConnectionIsOk(parent)) {
            loadingComposite = new LoadingComposite(parent);
            refreshData();
        }
    }

    public void refreshData() {
        OperationBuilder builder = Operations.createBuilder("Load ATS Navigator");
        builder.addAll(AtsBulkLoad.getConfigLoadingOperations());
        builder.addOp(new AtsNavigateViewItemsOperation());
        Operations.executeAsJob(builder.build(), false, Job.LONG, new ReloadJobChangeAdapter(this));
    }

    private final class ReloadJobChangeAdapter extends JobChangeAdapter {

        private final NavigateView navView;

        private ReloadJobChangeAdapter(NavigateView navView) {
            this.navView = navView;
        }

        @Override
        public void done(IJobChangeEvent event) {
            Job job = new UIJob("Load ATS Navigator") {

                private Label userLabel;

                @Override
                public IStatus runInUIThread(IProgressMonitor monitor) {
                    try {
                        showBusy(false);
                        if (Widgets.isAccessible(loadingComposite)) {
                            loadingComposite.dispose();
                        } else if (Widgets.isAccessible(xNavComp)) {
                            getViewSite().getActionBars().getToolBarManager().removeAll();
                            xNavComp.dispose();
                        }

                        if (DbConnectionExceptionComposite.dbConnectionIsOk(parent)) {

                            if (Widgets.isAccessible(parent)) {

                                xNavComp = new AtsNavigateComposite(AtsNavigateViewItems.getInstance(), parent,
                                        SWT.NONE, savedFilterStr);

                                XNavigateEventManager.register(navView);
                                HelpUtil.setHelp(xNavComp, AtsHelpContext.NAVIGATOR);
                                createToolBar();

                                new AtsQuickSearchComposite(xNavComp, SWT.NONE);

                                userLabel = new Label(xNavComp, SWT.None);
                                userLabel.addListener(SWT.MouseDoubleClick, new Listener() {
                                    @Override
                                    public void handleEvent(Event event) {
                                        ToggleAtsAdmin.run();
                                    }
                                });
                                refreshUserLabel();

                                GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, true, false);
                                gridData.heightHint = 15;
                                userLabel.setLayoutData(gridData);

                                xNavComp.refresh();

                                parent.getParent().layout(true);
                                parent.layout(true);

                                OseeStatusContributionItemFactory.addTo(navView, false);
                                addExtensionPointListenerBecauseOfWorkspaceLoading();
                            }
                        }
                    } catch (Exception ex) {
                        OseeLog.log(Activator.class, Level.SEVERE, ex);
                    }
                    return Status.OK_STATUS;
                }

                public void refreshUserLabel() {
                    String str = getWhoAmI();
                    if (AtsUtilClient.isAtsAdmin()) {
                        str += " - [Admin]";
                    }
                    if (!str.equals("")) {
                        if (AtsUtilClient.isAtsAdmin()) {
                            userLabel.setForeground(Displays.getSystemColor(SWT.COLOR_RED));
                        } else {
                            userLabel.setForeground(Displays.getSystemColor(SWT.COLOR_BLUE));
                        }
                    }
                    userLabel.setText(str);
                    userLabel.setToolTipText(str);
                }
            };
            Operations.scheduleJob(job, false, Job.SHORT, null);
        }
    }

    @Override
    public void refresh(XNavigateItem item) {
        if (xNavComp != null && Widgets.isAccessible(xNavComp.getFilteredTree())
                && Widgets.isAccessible(xNavComp.getFilteredTree().getViewer().getTree())) {
            xNavComp.getFilteredTree().getViewer().refresh(item);
        }
    }

    private void addExtensionPointListenerBecauseOfWorkspaceLoading() {
        IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
        extensionRegistry.addListener(new IRegistryEventListener() {
            @Override
            public void added(IExtension[] extensions) {
                refreshNavComp();
            }

            @Override
            public void added(IExtensionPoint[] extensionPoints) {
                refreshNavComp();
            }

            @Override
            public void removed(IExtension[] extensions) {
                refreshNavComp();
            }

            @Override
            public void removed(IExtensionPoint[] extensionPoints) {
                refreshNavComp();
            }
        }, "org.eclipse.osee.framework.ui.skynet.BlamOperation");
    }

    private void refreshNavComp() {
        Displays.ensureInDisplayThread(new Runnable() {

            @Override
            public void run() {
                xNavComp.refresh();
            }
        });
    }

    private String getWhoAmI() {
        try {
            String userName = AtsClientService.get().getUserService().getCurrentUser().getName();
            return String.format("[%s] - [%s]", AtsUtilCore.getAtsConfigName(), userName);
        } catch (Exception ex) {
            OseeLog.log(Activator.class, Level.SEVERE, ex);
            return "Exception: " + ex.getLocalizedMessage();
        }
    }

    protected void createToolBar() {
        IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
        toolbarManager.add(new MyWorldAction());
        toolbarManager.add(new MyFavoritesAction());
        toolbarManager.add(new CollapseAllAction(xNavComp.getFilteredTree().getViewer()));
        toolbarManager.add(new ExpandAllAction(xNavComp.getFilteredTree().getViewer()));
        toolbarManager.add(new OpenChangeReportByIdAction());
        toolbarManager.add(new OpenWorldByIdAction());
        toolbarManager.add(new OpenWorkflowByIdAction());
        toolbarManager.add(new NewAction());
        getViewSite().getActionBars().updateActionBars();

        IActionBars bars = getViewSite().getActionBars();
        IMenuManager mm = bars.getMenuManager();
        mm.add(new NewAction());
        mm.add(new NewGoal());

        toolbarManager.update(true);
    }

    public static NavigateView getNavigateView() {
        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        try {
            return (NavigateView) page.showView(NavigateView.VIEW_ID);
        } catch (PartInitException e1) {
            MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                    "Launch Error", "Couldn't Launch OSEE ATS NavigateView " + e1.getMessage());
        }
        return null;
    }

    @Override
    public void saveState(IMemento memento) {
        super.saveState(memento);
        if (DbConnectionExceptionComposite.dbConnectionIsOk()) {
            memento = memento.createChild(INPUT);

            if (xNavComp != null && xNavComp.getFilteredTree().getFilterControl() != null
                    && !xNavComp.getFilteredTree().isDisposed()) {
                String filterStr = xNavComp.getFilteredTree().getFilterControl().getText();
                memento.putString(FILTER_STR, filterStr);
            }
        }
    }

    @Override
    public void init(IViewSite site, IMemento memento) throws PartInitException {
        super.init(site, memento);
        if (DbConnectionExceptionComposite.dbConnectionIsOk()) {

            try {
                if (memento != null) {
                    memento = memento.getChild(INPUT);
                    if (memento != null) {
                        savedFilterStr = memento.getString(FILTER_STR);
                    }
                }
            } catch (Exception ex) {
                OseeLog.log(Activator.class, Level.WARNING, "NavigateView error on init", ex);
            }
        }
    }

    @Override
    public void setFocus() {
        if (loadingComposite != null && !loadingComposite.isDisposed()) {
            loadingComposite.setFocus();
        }
    }

}