blob: 18312192447f1b895e7f3021f7a97168352b77a1 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation and others.
// 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.authoring.ui.views;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.epf.authoring.ui.AuthoringUIResources;
import org.eclipse.epf.authoring.ui.editors.ConfigurationEditor;
import org.eclipse.epf.library.configuration.ConfigurationClosure;
import org.eclipse.epf.library.configuration.ElementDependencyError;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
/**
* The Message view.
* <p>
* Displays the Method Library error and warning messages
*
* @author Jinhua Xi
* @since 1.0
*/
public class MessageView extends ViewPart implements ISelectionProvider,
IPartListener {
/**
* The view ID.
*/
public static final String VIEW_ID = MessageView.class.getName();
public static final int ERROR_MESSAGE_COLUMN = 0;
public static final int ERROR_ELEMENT_COLUMN = 1;
public static final int CAUSE_ELEMENT_COLUMN = 2;
protected MessageViewer tableViewer;
protected Collection selectionChangedListeners = new ArrayList();
private ISelectionChangedListener selectionChangedListener = null;
protected ISelection currentSelection = StructuredSelection.EMPTY;
private ConfigurationClosure closure = null;
public MessageView() {
}
/**
* updates View when configurationFactory changes
* @param closure
*/
public void configurationFactoryChanged(ConfigurationClosure closure) {
this.closure = closure;
ComposedAdapterFactory adapterFactory = null;
if (closure != null) {
adapterFactory = (ComposedAdapterFactory) closure
.getConfigurationManager().getAdapterFactory();
tableViewer.setLabelProvider(new MessageLabelProvider(
adapterFactory));
}
tableViewer.setContentProvider(new MessageContentProvider(closure));
updateMessage();
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
*/
public void addSelectionChangedListener(ISelectionChangedListener listener) {
selectionChangedListeners.add(listener);
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ISelectionProvider#removeSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
*/
public void removeSelectionChangedListener(
ISelectionChangedListener listener) {
selectionChangedListeners.remove(listener);
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
*/
public ISelection getSelection() {
return currentSelection;
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
*/
public void setSelection(ISelection selection) {
currentSelection = selection;
for (Iterator listeners = new ArrayList(selectionChangedListeners)
.iterator(); listeners.hasNext();) {
ISelectionChangedListener listener = (ISelectionChangedListener) listeners
.next();
listener
.selectionChanged(new SelectionChangedEvent(this, selection));
}
}
private void createViewer(Composite composite) {
tableViewer = new MessageViewer(composite);
IViewSite site = (IViewSite) this.getSite();
site.setSelectionProvider(this);
if (selectionChangedListener == null) {
// Create the listener
selectionChangedListener = new ISelectionChangedListener() {
// This just notifies those things that are affected by the
// section.
public void selectionChanged(SelectionChangedEvent event) {
// System.out
// .println(AuthoringUIResources.MessageView_selected_text + event.getSelection()); //$NON-NLS-1$
setSelection(event.getSelection());
}
};
tableViewer.addSelectionChangedListener(selectionChangedListener);
}
// Set column info.
setColumns();
}
private void setColumns() {
Tree table = tableViewer.getTree();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TreeColumn column;
column = new TreeColumn(table, SWT.NONE, ERROR_MESSAGE_COLUMN);
column.setText(AuthoringUIResources.MessageView_errmsg_text);
column.setWidth(450);
column = new TreeColumn(table, SWT.NONE, ERROR_ELEMENT_COLUMN);
column.setText(AuthoringUIResources.MessageView_errelement_text);
column.setWidth(200);
column = new TreeColumn(table, SWT.NONE, CAUSE_ELEMENT_COLUMN);
column.setText(AuthoringUIResources.MessageView_refelement_text);
column.setWidth(200);
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
public void createPartControl(Composite parent) {
createViewer(parent);
IWorkbenchWindow workbenchWindow = getSite().getWorkbenchWindow();
workbenchWindow.getPartService().addPartListener(this);
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#setFocus()
*/
public void setFocus() {
}
/**
* @return the MessageView object
*/
public static MessageView getView() {
try {
IWorkbenchPage activePage = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
if (activePage != null) {
IViewPart view = activePage.findView(VIEW_ID);
if (view == null) {
view = activePage.showView(VIEW_ID);
}
return (MessageView) view;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
/**
* update Message View according to the configuration closure state
*
*/
public void updateMessage() {
if (closure != null) {
tableViewer.setInput(closure);
} else {
tableViewer.setInput(new Object());
}
}
/**
* @return if viewer has input
*/
public boolean isDisposed() {
return (closure == null);
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#dispose()
*/
public void dispose() {
super.dispose();
IWorkbenchWindow workbenchWindow = getSite().getWorkbenchWindow();
workbenchWindow.getPartService().removePartListener(this);
selectionChangedListeners.clear();
closure = null;
}
/**
* Show the error for the element.
*/
public void showError(Object e) {
ElementDependencyError error = closure.getError(e);
if (error != null) {
tableViewer.setSelection(error);
}
}
/**
* The Viewer class underlying this view
*
*/
public class MessageViewer extends TreeViewer {
public MessageViewer(Composite parent) {
this(parent, SWT.FULL_SELECTION);
}
public MessageViewer(Composite parent, int style) {
super(parent, style);
Tree tree = getTree();
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
}
public void setSelection(Object element) {
super.expandToLevel(element, 1);
Widget ctrl = super.findItem(element);
if (ctrl != null) {
List items = new ArrayList();
items.add(ctrl);
super.setSelection(items);
}
}
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partActivated(org.eclipse.ui.IWorkbenchPart)
*/
public void partActivated(IWorkbenchPart part) {
if (part instanceof ConfigurationEditor) {
ConfigurationClosure c = ((ConfigurationEditor) part).getClosure();
if (c != closure) {
configurationFactoryChanged(c);
}
}
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart)
*/
public void partBroughtToTop(IWorkbenchPart part) {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart)
*/
public void partClosed(IWorkbenchPart part) {
if (part instanceof ConfigurationEditor) {
ConfigurationClosure c = ((ConfigurationEditor) part).getClosure();
if (c == closure) {
configurationFactoryChanged(null);
}
}
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart)
*/
public void partDeactivated(IWorkbenchPart part) {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart)
*/
public void partOpened(IWorkbenchPart part) {
}
}