| //------------------------------------------------------------------------------ |
| // 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.io.File; |
| import java.util.Collection; |
| |
| import org.eclipse.epf.authoring.gef.viewer.ActivityDiagramService; |
| import org.eclipse.epf.authoring.ui.AuthoringUIImages; |
| import org.eclipse.epf.authoring.ui.AuthoringUIPlugin; |
| import org.eclipse.epf.authoring.ui.AuthoringUIResources; |
| import org.eclipse.epf.authoring.ui.BrowsingPerspective; |
| import org.eclipse.epf.authoring.ui.UIActionDispatcher; |
| import org.eclipse.epf.common.ui.util.PerspectiveUtil; |
| import org.eclipse.epf.diagram.ui.service.DiagramImageService; |
| import org.eclipse.epf.library.ILibraryManager; |
| import org.eclipse.epf.library.ILibraryServiceListener; |
| import org.eclipse.epf.library.LibraryService; |
| import org.eclipse.epf.library.events.ILibraryChangeListener; |
| import org.eclipse.epf.library.layout.ElementLayoutManager; |
| import org.eclipse.epf.library.layout.HtmlBuilder; |
| import org.eclipse.epf.library.ui.preferences.LibraryUIPreferences; |
| import org.eclipse.epf.library.util.LibraryUtil; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.MethodLibrary; |
| import org.eclipse.jface.action.Action; |
| import org.eclipse.jface.action.IToolBarManager; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.browser.Browser; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.ui.IActionBars; |
| import org.eclipse.ui.IPartListener; |
| import org.eclipse.ui.IPerspectiveDescriptor; |
| import org.eclipse.ui.IPerspectiveListener; |
| import org.eclipse.ui.ISharedImages; |
| import org.eclipse.ui.IViewPart; |
| import org.eclipse.ui.IWorkbenchPage; |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.part.ViewPart; |
| |
| /** |
| * The Content view. |
| * <p> |
| * Displays the HTML representation of a Method element. |
| * |
| * @author Jinhua Xi |
| * @author Kelvin Low |
| * @since 1.0 |
| */ |
| public class ContentView extends ViewPart { |
| |
| /** |
| * The view ID. |
| */ |
| public static final String VIEW_ID = ContentView.class.getName(); |
| |
| private ElementHTMLViewer contentViewer; |
| |
| private Object displayedElement; |
| |
| private IPartListener partListener = new IPartListener() { |
| public void partActivated(IWorkbenchPart part) { |
| if (part instanceof ContentView && part == ContentView.this) { |
| handleSelection(UIActionDispatcher.getInstance().getSelectionSource(), UIActionDispatcher.getInstance() |
| .getSelection()); |
| } |
| } |
| |
| public void partBroughtToTop(IWorkbenchPart part) { |
| } |
| |
| public void partClosed(IWorkbenchPart part) { |
| } |
| |
| public void partDeactivated(IWorkbenchPart part) { |
| } |
| |
| public void partOpened(IWorkbenchPart part) { |
| } |
| }; |
| |
| private ISelectionChangedListener selectionChangeListener = new ISelectionChangedListener() { |
| public void selectionChanged(SelectionChangedEvent event) { |
| handleSelection(event.getSource(), event.getSelection()); |
| } |
| }; |
| |
| private ILibraryChangeListener libraryChangeListener = new ILibraryChangeListener() { |
| public void libraryChanged(int option, Collection changedItems) { |
| // if (option == ILibraryChangeListener.OPTION_LOADED |
| // || option == ILibraryChangeListener.OPTION_CREATED) { |
| // if (contentViewer != null) { |
| // contentViewer.setHtmlBuilder(new HtmlBuilder()); |
| // contentViewer.getBrowser().redraw(); |
| // } |
| // } |
| |
| if (changedItems != null && displayedElement != null) { |
| if (changedItems.contains(displayedElement)) { |
| displayedElement = null; |
| } |
| } |
| } |
| }; |
| |
| private ILibraryServiceListener libSvcListener = new ILibraryServiceListener() { |
| |
| public void configurationSet(MethodConfiguration config) { |
| contentViewer.getBrowser().setUrl("about:blank"); //$NON-NLS-1$ |
| displayedElement = null; |
| } |
| |
| public void libraryClosed(MethodLibrary library) { |
| } |
| |
| public void libraryCreated(MethodLibrary library) { |
| cleanup(); |
| } |
| |
| public void libraryOpened(MethodLibrary library) { |
| cleanup(); |
| } |
| |
| public void libraryReopened(MethodLibrary library) { |
| cleanup(); |
| } |
| |
| public void librarySet(MethodLibrary library) { |
| } |
| |
| private void cleanup() { |
| if (contentViewer != null) { |
| contentViewer.setHtmlBuilder(new HtmlBuilder()); |
| contentViewer.getBrowser().redraw(); |
| } |
| } |
| }; |
| |
| // Page navigation actions. |
| private Action backAction; |
| |
| private Action forwardAction; |
| |
| private Action stopAction; |
| |
| private Action refreshAction; |
| |
| private Action printAction; |
| |
| // A hidden composite to hold the diagram viewer for diagram image |
| // generation. |
| private Composite diagramViewerHolder; |
| |
| /** |
| * Creates a new instance. |
| */ |
| public ContentView() { |
| } |
| |
| /** |
| * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(Composite) |
| */ |
| public void createPartControl(Composite parent) { |
| try { |
| GridLayout layout = new GridLayout(); |
| layout.marginWidth = 0; |
| layout.marginHeight = 0; |
| layout.horizontalSpacing = 0; |
| layout.verticalSpacing = 0; |
| parent.setLayout(layout); |
| parent.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| |
| contentViewer = new ElementHTMLViewer(parent); |
| diagramViewerHolder = new Composite(parent, SWT.NONE); |
| diagramViewerHolder.setLayoutData(new GridData(1, 1)); // size |
| // can't be |
| // 0,0 |
| // otherwise |
| // the |
| // diagram |
| // will not |
| // be |
| // painted |
| diagramViewerHolder.setLayout(new GridLayout()); |
| diagramViewerHolder.setVisible(false); |
| |
| // Create the page navigation tool buttons. |
| createActions(); |
| |
| // Add a part listener to monitor part activation and update this |
| // view |
| // as and when needed. |
| getSite().getWorkbenchWindow().getPartService().addPartListener( |
| partListener); |
| |
| getSite().getWorkbenchWindow().addPerspectiveListener( |
| new IPerspectiveListener() { |
| public void perspectiveActivated(IWorkbenchPage page, |
| IPerspectiveDescriptor desc) { |
| } |
| |
| public void perspectiveChanged(IWorkbenchPage page, |
| IPerspectiveDescriptor desc, String id) { |
| if (desc.getId().equals( |
| BrowsingPerspective.PERSPECTIVE_ID)) { |
| if (id |
| .equals(IWorkbenchPage.CHANGE_EDITOR_AREA_SHOW)) { |
| page.setEditorAreaVisible(false); |
| AuthoringUIPlugin |
| .getDefault() |
| .getMsgDialog() |
| .displayWarning( |
| AuthoringUIResources.warningDialog_title, |
| AuthoringUIResources.addEditorToPerspectiveWarning_msg); |
| } |
| } |
| } |
| }); |
| |
| // Add selection change listener to update this view as and when |
| // needed. |
| UIActionDispatcher.getInstance().addSelectionChangedListener( |
| selectionChangeListener); |
| |
| LibraryService.getInstance().addListener(libSvcListener); |
| |
| ILibraryManager manager = LibraryService.getInstance().getCurrentLibraryManager(); |
| if (manager != null) { |
| manager.addListener(libraryChangeListener); |
| } |
| } catch (Exception e) { |
| // TODO: Display an error dialog. |
| e.printStackTrace(); |
| } |
| } |
| |
| /** |
| * @see org.eclipse.ui.part.WorkbenchPart#setFocus |
| */ |
| public void setFocus() { |
| contentViewer.setFocus(); |
| } |
| |
| /** |
| * @see org.eclipse.ui.part.WorkbenchPart#dispose |
| */ |
| public void dispose() { |
| LibraryService.getInstance().removeListener(libSvcListener); |
| |
| ILibraryManager manager = LibraryService.getInstance().getCurrentLibraryManager(); |
| if (manager != null) { |
| manager.removeListener(libraryChangeListener); |
| } |
| UIActionDispatcher.getInstance().removeSelectionChangedListener( |
| selectionChangeListener); |
| getSite().getWorkbenchWindow().getPartService().removePartListener( |
| partListener); |
| } |
| |
| /** |
| * Creates the actions for this view. |
| */ |
| protected void createActions() { |
| backAction = new Action() { |
| public void run() { |
| Browser browser = contentViewer.getBrowser(); |
| if (browser != null) { |
| browser.back(); |
| } |
| } |
| }; |
| backAction.setText(AuthoringUIResources.back_text); |
| backAction.setToolTipText(AuthoringUIResources.back_text); |
| backAction.setImageDescriptor(PlatformUI.getWorkbench() |
| .getSharedImages().getImageDescriptor( |
| ISharedImages.IMG_TOOL_BACK)); |
| |
| forwardAction = new Action() { |
| public void run() { |
| Browser browser = contentViewer.getBrowser(); |
| if (browser != null) { |
| browser.forward(); |
| } |
| } |
| }; |
| forwardAction.setText(AuthoringUIResources.forward_text); |
| forwardAction.setToolTipText(AuthoringUIResources.forward_text); |
| forwardAction.setImageDescriptor(PlatformUI.getWorkbench() |
| .getSharedImages().getImageDescriptor( |
| ISharedImages.IMG_TOOL_FORWARD)); |
| |
| stopAction = new Action() { |
| public void run() { |
| Browser browser = contentViewer.getBrowser(); |
| if (browser != null) { |
| browser.stop(); |
| } |
| } |
| }; |
| stopAction.setText(AuthoringUIResources.stop_text); |
| stopAction.setToolTipText(AuthoringUIResources.stop_text); |
| stopAction.setImageDescriptor(AuthoringUIImages.IMG_DESC_STOP); |
| |
| refreshAction = new Action() { |
| public void run() { |
| // Browser browser = contentViewer.getBrowser(); |
| // if (browser != null) { |
| // browser.refresh(); |
| // } |
| |
| // need to regenerate the content |
| contentViewer.refresh(); |
| } |
| }; |
| refreshAction.setText(AuthoringUIResources.refresh_text); |
| refreshAction.setToolTipText(AuthoringUIResources.refresh_text); |
| refreshAction.setImageDescriptor(AuthoringUIImages.IMG_DESC_REFRESH); |
| |
| printAction = new Action() { |
| public void run() { |
| contentViewer.print(); |
| } |
| }; |
| printAction.setText(AuthoringUIResources.print_text); |
| printAction.setToolTipText(AuthoringUIResources.print_text); |
| printAction.setImageDescriptor(AuthoringUIImages.IMG_DESC_PRINT); |
| |
| IActionBars bars = getViewSite().getActionBars(); |
| IToolBarManager manager = bars.getToolBarManager(); |
| manager.add(backAction); |
| manager.add(forwardAction); |
| manager.add(stopAction); |
| manager.add(refreshAction); |
| manager.add(printAction); |
| } |
| |
| protected boolean isViewVisible() { |
| IWorkbenchPage activePage = getSite().getWorkbenchWindow() |
| .getActivePage(); |
| if (activePage == null) { |
| return false; |
| } |
| |
| IViewPart view = activePage.findView(getViewId()); |
| if (view == null) { |
| return false; |
| } |
| |
| return true; |
| } |
| |
| /** |
| * Handles the given selection. |
| * |
| * @param source |
| * The Library or Configuration view. |
| * @param selection |
| * The selection in the Library or Configuration view. |
| */ |
| protected void handleSelection(Object source, ISelection selection) { |
| if (selection == null || !isViewVisible() ) { |
| return; |
| } |
| |
| if (selection instanceof IStructuredSelection) { |
| IStructuredSelection sel = (IStructuredSelection) selection; |
| Object[] selectedElements = sel.toArray(); |
| if (selectedElements != null && selectedElements.length > 0) { |
| Object element = selectedElements[0]; |
| |
| // don't unwrap the object. |
| // For activity, we need to wrapped item provider to get the suppress status. |
| // Object element = LibraryUtil.unwrap(selectedElement); |
| if (displayedElement != null && displayedElement == element) { |
| displayedElement = null; |
| return; |
| } |
| if (displayContentPage(source, element)) { |
| displayedElement = element; |
| } |
| }else{ |
| contentViewer.getBrowser().setUrl("about:blank"); //$NON-NLS-1$ |
| displayedElement = null; |
| } |
| } |
| } |
| |
| protected boolean isConfigSource(Object source) { |
| return (source != null) && (source instanceof ConfigurationView); |
| } |
| |
| protected ElementLayoutManager getLayoutMgr() { |
| return LibraryService.getInstance() |
| .getCurrentConfigurationManager().getElementLayoutManager(); |
| } |
| |
| protected String getViewId() { |
| return VIEW_ID; |
| } |
| |
| /** |
| * Displays the content page for the given ContentElement. |
| * |
| * @param source |
| * The Library or Configuration view. |
| * @param element |
| * The selected Method element. |
| * @return <code>true</code> if the content page is displayed |
| * successfully. |
| */ |
| protected boolean displayContentPage(Object source, Object raw_element) { |
| Object element = LibraryUtil.unwrap(raw_element); |
| element = ViewHelper.handleDangling(element); |
| if (element == null) { |
| return false; |
| } |
| |
| ElementLayoutManager layoutMgr = null; |
| boolean isBrowsing = PerspectiveUtil |
| .isActivePerspective(BrowsingPerspective.PERSPECTIVE_ID); |
| boolean isConfigSource = isConfigSource(source); |
| |
| // if in browsing but the source is not from configruation view |
| // ignore it |
| if (isBrowsing && !isConfigSource) { |
| return false; |
| } |
| |
| if (isConfigSource) { |
| // Get the Element Layout Manager for the current configuration. |
| layoutMgr = getLayoutMgr(); |
| if ( layoutMgr == null ) { |
| return false; |
| } |
| |
| // Add the activity diagram service to generate diagram images. |
| |
| String newDiagrams = AuthoringUIPlugin.getDefault().getPreferenceStore().getString("PUBLISH_NEW_DIAGRAM"); //$NON-NLS-1$ |
| Boolean newDiagram = new Boolean(true); |
| if(newDiagrams != null && newDiagrams.length() > 0){ |
| newDiagram = new Boolean(newDiagrams); |
| } |
| if(newDiagram.booleanValue()){ |
| DiagramImageService diagramService = (DiagramImageService) layoutMgr |
| .getActivityDiagramService(); |
| if (diagramService == null) { |
| diagramService = new DiagramImageService( |
| diagramViewerHolder, |
| new File(layoutMgr.getPublishDir())); |
| diagramService.setConfig(layoutMgr.getConfiguration()); |
| layoutMgr.setActivityDiagramService(diagramService); |
| } |
| // For Activity Detail Diagram |
| boolean option = LibraryUIPreferences.getPublishUnopenActivitydd(); |
| diagramService.setPublishedUnCreatedADD(option); |
| |
| // For Activity Diagram |
| option = LibraryUIPreferences.getPublishADForActivityExtension(); |
| diagramService.setPublishADForActivityExtension(option); |
| }else{ |
| // Add the activity diagram service to generate diagram images. |
| ActivityDiagramService diagramService = (ActivityDiagramService) layoutMgr |
| .getActivityDiagramService(); |
| if (diagramService == null) { |
| diagramService = new ActivityDiagramService( |
| diagramViewerHolder, |
| new File(layoutMgr.getPublishDir())); |
| layoutMgr.setActivityDiagramService(diagramService); |
| } |
| |
| // For Activity Detail Diagram |
| boolean option = LibraryUIPreferences.getPublishUnopenActivitydd(); |
| diagramService.setPublishedUnCreatedADD(option); |
| |
| // For Activity Diagram |
| option = LibraryUIPreferences.getPublishADForActivityExtension(); |
| diagramService.setPublishADForActivityExtension(option); |
| } |
| |
| |
| |
| } |
| |
| contentViewer.setLayoutManager(layoutMgr); |
| contentViewer.showElementContent(raw_element); |
| |
| return true; |
| } |
| |
| /** |
| * Displays the HTML content page for a Method element. |
| * |
| * @param element |
| * A Method element. |
| * @return <code>true</code> if the HTML content page is displayed |
| * successfully. |
| */ |
| public boolean displayHTMLContentPage(Object element) { |
| element = LibraryUtil.unwrap(element); |
| element = ViewHelper.handleDangling(element); |
| if (element != null) { |
| contentViewer.setLayoutManager(null); |
| contentViewer.showElementContent(element); |
| return true; |
| } |
| return false; |
| } |
| |
| } |