blob: 64300f96047df0c9ffe3c901c56c2ba05b93a58e [file] [log] [blame]
/*******************************************************************************
* 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.framework.ui.skynet.user.perspective;
import java.util.ArrayList;
import java.util.List;
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.IToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osee.framework.core.client.ClientSessionManager;
import org.eclipse.osee.framework.core.operation.CompositeOperation;
import org.eclipse.osee.framework.core.operation.IOperation;
import org.eclipse.osee.framework.core.operation.Operations;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.skynet.core.SystemGroup;
import org.eclipse.osee.framework.skynet.core.UserManager;
import org.eclipse.osee.framework.ui.plugin.xnavigate.IXNavigateEventListener;
import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateComposite;
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.internal.Activator;
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.Label;
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 UserNavigateView extends ViewPart implements IXNavigateEventListener {
public static final String VIEW_ID = "org.eclipse.osee.framework.ui.skynet.UserNavigateView";
private static final String INPUT = "filter";
private static final String FILTER_STR = "filterStr";
private String savedFilterStr;
private XNavigateComposite xNavComp;
private Composite parent;
private LoadingComposite loadingComposite;
@Override
public void createPartControl(Composite parent) {
this.parent = parent;
loadingComposite = new LoadingComposite(parent);
refreshData();
}
@Override
public void refresh(XNavigateItem item) {
if (xNavComp != null && Widgets.isAccessible(xNavComp.getFilteredTree()) && Widgets.isAccessible(xNavComp.getFilteredTree().getViewer().getTree())) {
xNavComp.getFilteredTree().getViewer().refresh(item);
}
}
public void refreshData() {
List<IOperation> ops = new ArrayList<IOperation>();
ops.add(new UserNavigateViewItemsOperation());
IOperation operation = new CompositeOperation("Load User Navigator", Activator.PLUGIN_ID, ops);
Operations.executeAsJob(operation, false, Job.LONG, new ReloadJobChangeAdapter(this));
}
private final class ReloadJobChangeAdapter extends JobChangeAdapter {
private final UserNavigateView navView;
private ReloadJobChangeAdapter(UserNavigateView navView) {
this.navView = navView;
}
@Override
public void done(IJobChangeEvent event) {
Job job = new UIJob("Load Review Navigator") {
@Override
public IStatus runInUIThread(IProgressMonitor monitor) {
try {
showBusy(false);
if (Widgets.isAccessible(loadingComposite)) {
loadingComposite.dispose();
}
if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Navigate View - !dbConnectionIsOk");
}
xNavComp = new XNavigateComposite(UserNavigateViewItems.getInstance(), parent, SWT.NONE);
createToolBar();
Label label = new Label(xNavComp, SWT.None);
String str = getWhoAmI();
if (SystemGroup.OseeAdmin.isCurrentUserMember()) {
str += " - Admin";
}
if (!str.equals("")) {
if (SystemGroup.OseeAdmin.isCurrentUserMember()) {
label.setForeground(Displays.getSystemColor(SWT.COLOR_RED));
} else {
label.setForeground(Displays.getSystemColor(SWT.COLOR_BLUE));
}
}
label.setText(str);
label.setToolTipText(str);
GridData gridData = new GridData(SWT.CENTER, SWT.CENTER, true, false);
gridData.heightHint = 15;
label.setLayoutData(gridData);
if (savedFilterStr != null) {
xNavComp.getFilteredTree().getFilterControl().setText(savedFilterStr);
}
xNavComp.refresh();
xNavComp.getFilteredTree().getFilterControl().setFocus();
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;
}
};
Operations.scheduleJob(job, false, Job.SHORT, null);
}
}
private void addExtensionPointListenerBecauseOfWorkspaceLoading() {
IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
extensionRegistry.addListener(new IRegistryEventListener() {
@Override
public void added(IExtension[] extensions) {
xNavComp.refresh();
}
@Override
public void added(IExtensionPoint[] extensionPoints) {
xNavComp.refresh();
}
@Override
public void removed(IExtension[] extensions) {
xNavComp.refresh();
}
@Override
public void removed(IExtensionPoint[] extensionPoints) {
xNavComp.refresh();
}
}, "org.eclipse.osee.framework.ui.skynet.BlamOperation");
}
private String getWhoAmI() {
try {
String userName = UserManager.getUser().getName();
return String.format("%s - %s:%s", userName, ClientSessionManager.getDataStoreName(),
ClientSessionManager.getDataStoreLoginName());
} 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 CollapseAllAction(xNavComp.getFilteredTree().getViewer()));
toolbarManager.add(new ExpandAllAction(xNavComp.getFilteredTree().getViewer()));
getViewSite().getActionBars().updateActionBars();
toolbarManager.update(true);
}
public static UserNavigateView getNavigateView() {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try {
return (UserNavigateView) page.showView(UserNavigateView.VIEW_ID);
} catch (PartInitException e1) {
MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Launch Error",
"Couldn't Launch OSEE User NavigateView " + e1.getMessage());
}
return null;
}
@Override
public void saveState(IMemento memento) {
super.saveState(memento);
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);
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();
}
}
}