Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[patch1 - moving Outline View] RE: [bpel-dev] separating core and view functionality inBPELEditor (was: RE: Our Dom Facading Knowlegde)

Hi Simon,

Please find the first patch attached.
Outline view related code is moved from BPELEditor.java to BPELMultipageEditorPart.java.

Please let me know if it looks OK.

Thanks,
	Vitaly.

>-----Original Message-----
>From: Tishkov, Vitaly V
>Sent: Thursday, May 31, 2007 9:34 PM
>To: 'BPEL Designer project developer discussions.'
>Cc: bpel-dev-bounces@xxxxxxxxxxx
>Subject: RE: [bpel-dev] separating core and view functionality inBPELEditor
>(was: RE: Our Dom Facading Knowlegde)
>
>Hi Simon,
>
>Yeah, I will :)
>Thanks for revising the list and creating the branch.
>
>Thanks,
>	Vitaly.
>
>
>
>>-----Original Message-----
>>From: bpel-dev-bounces@xxxxxxxxxxx [mailto:bpel-dev-bounces@xxxxxxxxxxx] On
>>Behalf Of Simon D Moser
>>Sent: Thursday, May 31, 2007 6:06 PM
>>To: BPEL Designer project developer discussions.
>>Cc: bpel-dev-bounces@xxxxxxxxxxx
>>Subject: Re: [bpel-dev] separating core and view functionality inBPELEditor
>>(was: RE: Our Dom Facading Knowlegde)
>>
>>Hey Vitaly,
>>
>>I browsed through the list also and I think this is a good start. Why don't
>>you go ahead and start creating a patch for this based on our new fancy "
>>MultiTab-DomFacade" branch ?
>>
>>Cheers
>>Simon
>>
>>Simon Moser, M.Eng.
>>
>>
>>
>> Websphere Integration       Mail:           IBM Deutschland Entwicklung
>> Developer Development       smoser@xxxxxx.  GmbH
>> Team Lead BPEL Editor       com             Vorsitzender des
>> Dept. 4722, Bldg.           Phone:          Aufsichtsrats: Martin Jetter
>> 71032-01, Room 086          +49-7031-16-43  Geschäftsführung: Herbert
>> Websphere Solutions and     04              Kircher
>> Services                    Fax:            Sitz der Gesellschaft:
>> IBM Deutschland             +49-7031-16-48  Böblingen
>> Entwicklung GmbH            90              Registergericht: Amtsgericht
>> Schönaicherstr. 220, D –                    Stuttgart, HRB 243294
>> 71032 Boeblingen
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>             "Tishkov, Vitaly
>>             V"
>>             <vitaly.v.tishkov                                          To
>>             @intel.com>               Simon D Moser/Germany/IBM@IBMDE,
>>             Sent by:                  "BPEL Designer project developer
>>             bpel-dev-bounces@         discussions."
>>             eclipse.org               <bpel-dev@xxxxxxxxxxx>
>>                                                                        cc
>>                                       Michael Illiger2/Germany/IBM@IBMDE
>>             05/30/2007 03:28                                      Subject
>>             PM                        [bpel-dev] separating core and view
>>                                       functionality in BPELEditor   (was:
>>                                       RE: Our Dom Facading Knowlegde)
>>             Please respond to
>>              "BPEL Designer
>>             project developer
>>               discussions."
>>             <bpel-dev@eclipse
>>                   .org>
>>
>>
>>
>>
>>
>>
>>Hello,
>>
>>I tried to separate the "core" and "view" functionality of BPELEditor. The
>>"core" functionality is for model loading, "common" events handling (like
>>outline page selections, etc.), while "view" functionality is a set of
>>fields/methods specific to displaying/editing graphical representation of
>>BPEL files.
>>
>>Please flick through the list below and let me know if there are big
>>mistakes there. I'm sure that the list will have to be revised during
>>refactoring itself but I need to understand if I'm generally correct before
>>starting any code changes. (Simon and I think that this will be done in a
>>separate branch though).
>>
>>"V" before a field/method name means that it's from "view" functionality
>>and should stay in BPELEditor.
>>"C" means that this is from core functionality and should be moved out of
>>BPELEditor. Most of it will appear in BPELMultiPageEditorPart (it's a
>>sub-class of org.eclipse.ui.part.MultiPageEditorPart which is designed for
>>creating multi-tab editors; see
>>http://dev.eclipse.org/mhonarc/lists/bpel-dev/msg00417.html for some more
>>details).
>>
>>Thanks,
>>             Vitaly.
>>
>>C org.eclipse.bpel.ui.BPELEditor.process
>>C org.eclipse.bpel.ui.BPELEditor.editModelClient
>>C org.eclipse.bpel.ui.BPELEditor.modelListenerAdapter
>>С org.eclipse.bpel.ui.BPELEditor.editorAdapter
>>V org.eclipse.bpel.ui.BPELEditor.transferBuffer
>>C org.eclipse.bpel.ui.BPELEditor.extensionsResource
>>C org.eclipse.bpel.ui.BPELEditor.extensionMap
>>C org.eclipse.bpel.ui.BPELEditor.modelAutoUndoRecorder
>>C org.eclipse.bpel.ui.BPELEditor.fileChangeListener
>>C org.eclipse.bpel.ui.BPELEditor.outlinePage
>>C org.eclipse.bpel.ui.BPELEditor.keyHandler
>>C org.eclipse.bpel.ui.BPELEditor.selectionChangeListener
>>C org.eclipse.bpel.ui.BPELEditor.traySelectionChangeListener
>>V org.eclipse.bpel.ui.BPELEditor.lastSelectedEditPart
>>V org.eclipse.bpel.ui.BPELEditor.adaptingSelectionProvider
>>V org.eclipse.bpel.ui.BPELEditor.weakMultiViewerSelectionProvider
>>V org.eclipse.bpel.ui.BPELEditor.filteredEditPartSelectionProvider
>>V org.eclipse.bpel.ui.BPELEditor.dropTarget
>>V org.eclipse.bpel.ui.BPELEditor.dropTargetListener
>>V org.eclipse.bpel.ui.BPELEditor.postBuildRefactoringListener
>>V org.eclipse.bpel.ui.BPELEditor.switchEntry
>>V org.eclipse.bpel.ui.BPELEditor.flowEntry
>>V org.eclipse.bpel.ui.BPELEditor.sequenceEntry
>>V org.eclipse.bpel.ui.BPELEditor.controlCategory
>>V org.eclipse.bpel.ui.BPELEditor.appendNewActions
>>V org.eclipse.bpel.ui.BPELEditor.insertNewActions
>>V org.eclipse.bpel.ui.BPELEditor.changeTypeActions
>>C org.eclipse.bpel.ui.BPELEditor.currentPropertySheetPage
>>? org.eclipse.bpel.ui.BPELEditor.contributorID
>>C org.eclipse.bpel.ui.BPELEditor.commandFramework
>>V org.eclipse.bpel.ui.BPELEditor.BPELEditor()
>>V org.eclipse.bpel.ui.BPELEditor.BPELEditorAdapter
>>V org.eclipse.bpel.ui.BPELEditor.getBPELEditor(ResourceSet)
>>C org.eclipse.bpel.ui.BPELEditor.getEditModelClient()
>>C org.eclipse.bpel.ui.BPELEditor.getResourceSet()
>>C org.eclipse.bpel.ui.BPELEditor.getResource()
>>C org.eclipse.bpel.ui.BPELEditor.getModelAutoUndoRecorder()
>>V org.eclipse.bpel.ui.BPELEditor.getTransferBuffer()
>>V org.eclipse.bpel.ui.BPELEditor.getAppendNewActions()
>>V org.eclipse.bpel.ui.BPELEditor.getInsertNewActions()
>>V org.eclipse.bpel.ui.BPELEditor.getChangeTypeActions()
>>C org.eclipse.bpel.ui.BPELEditor.OutlinePage
>>V org.eclipse.bpel.ui.BPELEditor.configureGraphicalViewer()
>>V org.eclipse.bpel.ui.BPELEditor.createBPELPaletteEntries(PaletteContainer)
>>V
>>org.eclipse.bpel.ui.BPELEditor.createTopControlPaletteEntries(PaletteRoot)
>>C org.eclipse.bpel.ui.BPELEditor.dispose()
>>C org.eclipse.bpel.ui.BPELEditor.doRevertToSaved(IProgressMonitor)
>>C org.eclipse.bpel.ui.BPELEditor.doSave(IProgressMonitor)
>>C org.eclipse.bpel.ui.BPELEditor.isSaveAsAllowed()
>>C org.eclipse.bpel.ui.BPELEditor.doSaveAs()
>>C org.eclipse.bpel.ui.BPELEditor.performSaveAs()
>>V org.eclipse.bpel.ui.BPELEditor.createPaletteRoot()
>>C org.eclipse.bpel.ui.BPELEditor.gotoMarker(IMarker)
>>C org.eclipse.bpel.ui.BPELEditor.gotoMarker(IMarker, EObject)
>>C org.eclipse.bpel.ui.BPELEditor.showPropertiesView()
>>C org.eclipse.bpel.ui.BPELEditor.isDirty()
>>C org.eclipse.bpel.ui.BPELEditor.getExtensionMap()
>>V org.eclipse.bpel.ui.BPELEditor.initializeGraphicalViewer()
>>V org.eclipse.bpel.ui.BPELEditor.arrangeEditParts(GraphicalViewer)
>>C org.eclipse.bpel.ui.BPELEditor.initializeFileChangeListener()
>>C org.eclipse.bpel.ui.BPELEditor.commandStackChanged(EventObject)
>>C org.eclipse.bpel.ui.BPELEditor.getKeyHandler()
>>C org.eclipse.bpel.ui.BPELEditor.getEditorKeyHandler()
>>C org.eclipse.bpel.ui.BPELEditor.getAdapter(Class)
>>C org.eclipse.bpel.ui.BPELEditor.createBPELTabbedPropertySheetPage()
>>C org.eclipse.bpel.ui.BPELEditor.replaceSelectionAction(ActionRegistry,
>>IAction)
>>C org.eclipse.bpel.ui.BPELEditor.createActions()
>>V org.eclipse.bpel.ui.BPELEditor.createPaletteDependentActions()
>>V org.eclipse.bpel.ui.BPELEditor.makeSelectionActionBPELOnlyEP(IAction)
>>V org.eclipse.bpel.ui.BPELEditor.makeSelectionActionBPELOnly(IAction)
>>C org.eclipse.bpel.ui.BPELEditor.getProcess()
>>V org.eclipse.bpel.ui.BPELEditor.getCommandStack()
>>V org.eclipse.bpel.ui.BPELEditor.setAutoFlowLayout(boolean)
>>V org.eclipse.bpel.ui.BPELEditor.getAutoFlowLayout()
>>V
>>org.eclipse.bpel.ui.BPELEditor.createBottomControlPaletteEntries(PaletteContai
>n
>>er)
>>
>>V org.eclipse.bpel.ui.BPELEditor.createGraphicalViewer(Composite)
>>V org.eclipse.bpel.ui.BPELEditor.hookGraphicalViewer()
>>V org.eclipse.bpel.ui.BPELEditor.setGraphicalViewer(GraphicalViewer)
>>V org.eclipse.bpel.ui.BPELEditor.createPaletteViewer(Composite)
>>V org.eclipse.bpel.ui.BPELEditor.refreshGraphicalViewer()
>>V org.eclipse.bpel.ui.BPELEditor.selectModelObject(Object)
>>V org.eclipse.bpel.ui.BPELEditor.getSelection()
>>V org.eclipse.bpel.ui.BPELEditor.getAdaptingSelectionProvider()
>>V org.eclipse.bpel.ui.BPELEditor.getMultiViewerSelectionProvider()
>>V org.eclipse.bpel.ui.BPELEditor.getFilteredEditPartSelectionProvider()
>>V org.eclipse.bpel.ui.BPELEditor.getGraphicalViewer()
>>V org.eclipse.bpel.ui.BPELEditor.refreshHoverHelp(EObject)
>>V org.eclipse.bpel.ui.BPELEditor.initializeRefactoringListeners()
>>V org.eclipse.bpel.ui.BPELEditor.createPartControl(Composite)
>>C org.eclipse.bpel.ui.BPELEditor.getFileInput()
>>C org.eclipse.bpel.ui.BPELEditor.init(IEditorSite, IEditorInput)
>>C org.eclipse.bpel.ui.BPELEditor.loadModel()
>>C org.eclipse.bpel.ui.BPELEditor.loadModelWithoutEditModel()
>>C org.eclipse.bpel.ui.BPELEditor.getCommandFramework()
>>V org.eclipse.bpel.ui.BPELEditor.getActionRegistry()
>>V org.eclipse.bpel.ui.BPELEditor.initializeTrayViewer()
>>V org.eclipse.bpel.ui.BPELEditor.registerViewer(EditPartViewer)
>>C org.eclipse.bpel.ui.BPELEditor.modelDeleted(ResourceInfo)
>>C org.eclipse.bpel.ui.BPELEditor.modelDirtyStateChanged(ResourceInfo)
>>C org.eclipse.bpel.ui.BPELEditor.modelLocationChanged(ResourceInfo, IFile)
>>C org.eclipse.bpel.ui.BPELEditor.modelReloaded(ResourceInfo)
>>C org.eclipse.bpel.ui.BPELEditor.updateInputFile(IPath)
>>C org.eclipse.bpel.ui.BPELEditor.updateTitle()
>>C org.eclipse.bpel.ui.BPELEditor.removeUnusedExtensions()
>>C org.eclipse.bpel.ui.BPELEditor.getArtifactsDefinition()
>>V org.eclipse.bpel.ui.BPELEditor.getPaletteAdditionsContributorId()
>>
>>
>>
>>
>>>-----Original Message-----
>>>From: Simon D Moser [mailto:SMOSER@xxxxxxxxxx]
>>>Sent: Wednesday, May 30, 2007 3:51 PM
>>>To: BPEL Designer project developer discussions.
>>>Cc: Tishkov, Vitaly V; Michael Illiger2
>>>Subject: RE: Our Dom Facading Knowlegde
>>>
>>>Hi Vitaly,
>>>
>>>first I moved the discussion to the list - not even sure why this was
>>>started in private ;-)
>>>
>>>>OK, let's start from there.
>>>
>>>>In the future I see the following 3 easy steps of 'binding' source view
>>>(structuredTextEditor) and the DOM model:
>>>>            1) create DOM model;
>>>>            2) initialize the source view;
>>>>            3) set the source view model to the DOM model created above.
>>>>At the moment StructuredTextEditor doesn't allow changing it's model (the
>>>only method that changes the value of the fStructuredModel field is
>>>>deprecated private setModel(). So, we'll probably have to extend
>>>StructuredTextEditor for our needs.
>>>
>>>I am OK with the approach. However, the thing is that we probably must use
>>>StructuredSourceEditor or StructuredXMLEditor or something.
>>>
>>>> Yes, your assumption is correct. Sorry for being not clear.
>>>> I'll send my proposal for separating "core" and "view" in another
>>message
>>>
>>>Ok, cool. I'm waiting for that one then.
>>>
>>>>OK, I see.
>>>>It seems to me that we'll need a branch for our work, am I correct?
>>>
>>>Generally yes. I would think that a branch is the better solution here.
>>Let
>>>me find out how to create one (we can apply the source tab patch on the
>>>branch right away).
>>>Michal, do you know how this works by any chance?
>>
>>-- cut --
>>_______________________________________________
>>bpel-dev mailing list
>>bpel-dev@xxxxxxxxxxx
>>https://dev.eclipse.org/mailman/listinfo/bpel-dev
### Eclipse Workspace Patch 1.0
#P org.eclipse.bpel.ui
Index: src/org/eclipse/bpel/ui/BPELEditor.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.bpel/plugins/org.eclipse.bpel.ui/src/org/eclipse/bpel/ui/BPELEditor.java,v
retrieving revision 1.16
diff -u -r1.16 BPELEditor.java
--- src/org/eclipse/bpel/ui/BPELEditor.java	16 May 2007 16:15:09 -0000	1.16
+++ src/org/eclipse/bpel/ui/BPELEditor.java	5 Jun 2007 12:42:10 -0000
@@ -108,6 +108,7 @@
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.gef.ContextMenuProvider;
+import org.eclipse.gef.DefaultEditDomain;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPartViewer;
 import org.eclipse.gef.GraphicalViewer;
@@ -125,7 +126,6 @@
 import org.eclipse.gef.ui.actions.SelectionAction;
 import org.eclipse.gef.ui.actions.ZoomInAction;
 import org.eclipse.gef.ui.actions.ZoomOutAction;
-import org.eclipse.gef.ui.parts.ContentOutlinePage;
 import org.eclipse.gef.ui.parts.TreeViewer;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
@@ -162,7 +162,6 @@
 import org.eclipse.ui.part.FileEditorInput;
 import org.eclipse.ui.part.IPageSite;
 import org.eclipse.ui.part.PageBook;
-import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 import org.eclipse.ui.views.properties.IPropertySheetPage;
 import org.eclipse.ui.views.properties.tabbed.ISection;
 import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
@@ -198,8 +197,6 @@
 	// reacts to changes on the BPEL file (e.g. move, rename)
 	private IFileChangeListener fileChangeListener;
 	
-	private OutlinePage outlinePage;
-	
 	// Cached key handler used by both the graphical editor and outline view
 	private KeyHandler keyHandler;	
 	
@@ -270,6 +267,11 @@
 	    return null;
 	}
 
+	//increasing visibility
+	public DefaultEditDomain getEditDomain() {
+		return super.getEditDomain();
+	}
+	
 	public BPELEditModelClient getEditModelClient() {	return editModelClient; }
 	
 	public ResourceSet getResourceSet() {
@@ -284,125 +286,6 @@
 	public Set getInsertNewActions() { return insertNewActions; }
 	public Set getChangeTypeActions() { return changeTypeActions; }
 	
-	class OutlinePage extends ContentOutlinePage {
-		private PageBook pageBook;
-		private Control outline;
-		private Canvas overview;
-		private IAction showOutlineAction, showOverviewAction;
-		static final int ID_OUTLINE  = 0;
-		static final int ID_OVERVIEW = 1;
-		private Thumbnail thumbnail;
-
-		public OutlinePage(EditPartViewer viewer) {
-			super(viewer);
-		}
-
-		// increase visibility.
-		public EditPartViewer getViewer() {
-			return super.getViewer();
-		}
-
-		private void configureOutlineViewer() {
-			getViewer().setEditDomain(getEditDomain());
-			getViewer().setEditPartFactory(new OutlineTreePartFactory());
-			registerViewer(getViewer());
-			ContextMenuProvider provider = new ProcessContextMenuProvider(getViewer(), getActionRegistry());
-			getViewer().setContextMenu(provider);
-			getSite().registerContextMenu("org.eclipse.bpel.outline.contextmenu", //$NON-NLS-1$
-				provider, 
-				getSite().getSelectionProvider());
-			getViewer().setKeyHandler(getKeyHandler());
-			// TODO: Drag and drop support goes here
-			// getViewer().addDropTargetListener(new BPELTemplateTransferDropTargetListener(getViewer()));
-			IToolBarManager tbm = getSite().getActionBars().getToolBarManager();
-			showOutlineAction = new Action() {
-				public void run() {
-					showPage(ID_OUTLINE);
-				}
-                
-                public String getToolTipText() {
-                    return Messages.OutlinePage_showOutlineView;
-                }
-			};
-			showOutlineAction.setImageDescriptor(BPELUIPlugin.getPlugin().getImageDescriptor(IBPELUIConstants.ICON_OUTLINE_16)); 
-			tbm.add(showOutlineAction);
-			showOverviewAction = new Action() {
-				public void run() {
-					showPage(ID_OVERVIEW);
-				}
-                
-                public String getToolTipText() {
-                    return Messages.OutlinePage_showOverviewView;
-                }
-			};
-			showOverviewAction.setImageDescriptor(BPELUIPlugin.getPlugin().getImageDescriptor(IBPELUIConstants.ICON_OVERVIEW_16)); 	
-			tbm.add(showOverviewAction);
-			showPage(ID_OUTLINE);
-		}
-
-		public Control getControl() {
-			return pageBook;
-		}
-
-		public void createControl(Composite parent) {
-			pageBook = new PageBook(parent, SWT.NONE);
-			outline = getViewer().createControl(pageBook);
-			overview = new Canvas(pageBook, SWT.NONE);
-			pageBook.showPage(outline);
-			configureOutlineViewer();
-			// TODO: Add to the adapting selection provider
-			//getSelectionSynchronizer().addViewer(getViewer());
-			getViewer().setContents(process);
-		}
-
-		private void initializeOverview() {
-			LightweightSystem lws = new LightweightSystem(overview);
-			RootEditPart rep = getGraphicalViewer().getRootEditPart();
-			if (rep instanceof GraphicalBPELRootEditPart) {
-				GraphicalBPELRootEditPart root = (GraphicalBPELRootEditPart)rep;
-				thumbnail = new ScrollableThumbnail((Viewport)root.getFigure());
-				thumbnail.setSource(root.getLayer(LayerConstants.PRINTABLE_LAYERS));
-				lws.setContents(thumbnail);
-			}
-		}
-
-		private void showPage(int id) {
-			if (id == ID_OUTLINE) {
-				showOutlineAction.setChecked(true);
-				showOverviewAction.setChecked(false);
-				pageBook.showPage(outline);
-				if (thumbnail != null)
-					thumbnail.setVisible(false);
-			} else if (id == ID_OVERVIEW) {
-				initializeOverview();
-				showOutlineAction.setChecked(false);
-				showOverviewAction.setChecked(true);
-				pageBook.showPage(overview);
-				thumbnail.setVisible(true);
-			}
-		}
-
-		public void dispose() {
-			super.dispose();
-		}
-		
-		public void init(IPageSite pageSite) {
-			super.init(pageSite);
-			ActionRegistry registry = getActionRegistry();
-			IActionBars bars = pageSite.getActionBars();
-			String id = ActionFactory.UNDO.getId();
-			bars.setGlobalActionHandler(id, registry.getAction(id));
-			id = ActionFactory.REDO.getId();
-			bars.setGlobalActionHandler(id, registry.getAction(id));
-			id = ActionFactory.DELETE.getId();
-			bars.setGlobalActionHandler(id, registry.getAction(id));
-			id = ActionFactory.REVERT.getId();
-			bars.setGlobalActionHandler(id, registry.getAction(id));
-			bars.updateActionBars();
-		}
-
-	}
-
 	/**
 	 * @see org.eclipse.gef.ui.parts.GraphicalEditor#configureGraphicalViewer()
 	 */
@@ -580,9 +463,7 @@
 		if (getPaletteViewer() != null) {
 			getPaletteViewer().setContents(null);
 		}
-		if (outlinePage != null && outlinePage.getViewer() != null) {
-			outlinePage.getViewer().setContents(null);
-		}
+		
 		lastSelectedEditPart = null;
 
 		super.dispose();
@@ -627,7 +508,6 @@
 //		if (extensionMap != null) extensionMap.clear();
 //		extensionMap = null;
 		modelAutoUndoRecorder = null;
-		outlinePage = null;
 
 		if (getSelectionActions() != null) {
 			getSelectionActions().clear();
@@ -1211,12 +1091,6 @@
 	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
 	 */
 	public Object getAdapter(Class type) {
-		if (type == IContentOutlinePage.class) {
-			if (outlinePage == null) {
-				outlinePage = new OutlinePage(new TreeViewer());
-			}
-			return outlinePage;
-		}
 		if (type == IPropertySheetPage.class) {
 			// We can't cache this object because the properties framework needs a new instance
 			// every time it calls this method. 
Index: src/org/eclipse/bpel/ui/BPELMultipageEditorPart.java
===================================================================
RCS file: /cvsroot/technology/org.eclipse.bpel/plugins/org.eclipse.bpel.ui/src/org/eclipse/bpel/ui/Attic/BPELMultipageEditorPart.java,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 BPELMultipageEditorPart.java
--- src/org/eclipse/bpel/ui/BPELMultipageEditorPart.java	31 May 2007 13:47:10 -0000	1.1.2.1
+++ src/org/eclipse/bpel/ui/BPELMultipageEditorPart.java	5 Jun 2007 12:42:10 -0000
@@ -13,28 +13,189 @@
 package org.eclipse.bpel.ui;
 
 import org.eclipse.bpel.model.ExtensibleElement;
+import org.eclipse.bpel.ui.editparts.util.OutlineTreePartFactory;
 import org.eclipse.bpel.ui.uiextensionmodel.StartNode;
 
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.LightweightSystem;
+import org.eclipse.draw2d.Viewport;
+import org.eclipse.draw2d.parts.ScrollableThumbnail;
+import org.eclipse.draw2d.parts.Thumbnail;
+import org.eclipse.gef.ContextMenuProvider;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPartViewer;
+import org.eclipse.gef.GraphicalEditPart;
+import org.eclipse.gef.GraphicalViewer;
+import org.eclipse.gef.LayerConstants;
+import org.eclipse.gef.RootEditPart;
+import org.eclipse.gef.editparts.ZoomManager;
+import org.eclipse.gef.ui.actions.ActionRegistry;
+import org.eclipse.gef.ui.parts.ContentOutlinePage;
+import org.eclipse.gef.ui.parts.TreeViewer;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.text.TextSelection;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.part.IPageSite;
 import org.eclipse.ui.part.MultiPageEditorPart;
+import org.eclipse.ui.part.PageBook;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 import org.eclipse.wst.sse.ui.StructuredTextEditor;
 
 import org.w3c.dom.Element;
 
 public class BPELMultipageEditorPart extends MultiPageEditorPart {
 
+	class OutlinePage extends ContentOutlinePage {
+		private PageBook pageBook;
+		private Control outline;
+		private Canvas overview;
+		private IAction showOutlineAction, showOverviewAction;
+		static final int ID_OUTLINE  = 0;
+		static final int ID_OVERVIEW = 1;
+		private Thumbnail thumbnail;
+
+		public OutlinePage(EditPartViewer viewer) {
+			super(viewer);
+		}
+
+		// increase visibility.
+		public EditPartViewer getViewer() {
+			return super.getViewer();
+		}
+
+		private void configureOutlineViewer() {
+			getViewer().setEditDomain(fDesignViewer.getEditDomain());
+			getViewer().setEditPartFactory(new OutlineTreePartFactory());
+
+			fDesignViewer.registerViewer(getViewer());
+
+			//FIXME should we add the same for src tab?
+			ContextMenuProvider provider = new ProcessContextMenuProvider(getViewer(), fDesignViewer.getActionRegistry());
+
+			getViewer().setContextMenu(provider);
+			getSite().registerContextMenu("org.eclipse.bpel.outline.contextmenu", //$NON-NLS-1$
+				provider, 
+				getSite().getSelectionProvider());
+			getViewer().setKeyHandler(fDesignViewer.getKeyHandler());
+			// TODO: Drag and drop support goes here
+			// getViewer().addDropTargetListener(new BPELTemplateTransferDropTargetListener(getViewer()));
+			IToolBarManager tbm = getSite().getActionBars().getToolBarManager();
+			showOutlineAction = new Action() {
+				public void run() {
+					showPage(ID_OUTLINE);
+				}
+                
+                public String getToolTipText() {
+                    return Messages.OutlinePage_showOutlineView;
+                }
+			};
+			showOutlineAction.setImageDescriptor(BPELUIPlugin.getPlugin().getImageDescriptor(IBPELUIConstants.ICON_OUTLINE_16)); 
+			tbm.add(showOutlineAction);
+			showOverviewAction = new Action() {
+				public void run() {
+					showPage(ID_OVERVIEW);
+				}
+                
+                public String getToolTipText() {
+                    return Messages.OutlinePage_showOverviewView;
+                }
+			};
+			showOverviewAction.setImageDescriptor(BPELUIPlugin.getPlugin().getImageDescriptor(IBPELUIConstants.ICON_OVERVIEW_16)); 	
+			tbm.add(showOverviewAction);
+			showPage(ID_OUTLINE);
+		}
+
+		public Control getControl() {
+			return pageBook;
+		}
+
+		public void createControl(Composite parent) {
+			pageBook = new PageBook(parent, SWT.NONE);
+			outline = getViewer().createControl(pageBook);
+			overview = new Canvas(pageBook, SWT.NONE);
+			pageBook.showPage(outline);
+			configureOutlineViewer();
+			// TODO: Add to the adapting selection provider
+			//getSelectionSynchronizer().addViewer(getViewer());
+
+			//FIXME move process to this class
+			getViewer().setContents(fDesignViewer.getProcess());
+		}
+
+		private void initializeOverview() {
+			LightweightSystem lws = new LightweightSystem(overview);
+			RootEditPart rep = fDesignViewer.getGraphicalViewer().getRootEditPart();
+			if (rep instanceof GraphicalBPELRootEditPart) {
+				GraphicalBPELRootEditPart root = (GraphicalBPELRootEditPart)rep;
+				thumbnail = new ScrollableThumbnail((Viewport)root.getFigure());
+				thumbnail.setSource(root.getLayer(LayerConstants.PRINTABLE_LAYERS));
+				lws.setContents(thumbnail);
+			}
+		}
+
+		private void showPage(int id) {
+			if (id == ID_OUTLINE) {
+				showOutlineAction.setChecked(true);
+				showOverviewAction.setChecked(false);
+				pageBook.showPage(outline);
+				if (thumbnail != null)
+					thumbnail.setVisible(false);
+			} else if (id == ID_OVERVIEW) {
+				initializeOverview();
+				showOutlineAction.setChecked(false);
+				showOverviewAction.setChecked(true);
+				pageBook.showPage(overview);
+				thumbnail.setVisible(true);
+			}
+		}
+
+		public void dispose() {
+			super.dispose();
+		}
+		
+		public void init(IPageSite pageSite) {
+			super.init(pageSite);
+			//should ActionRegistry be here too? 
+			ActionRegistry registry = fDesignViewer.getActionRegistry();
+			IActionBars bars = pageSite.getActionBars();
+			String id = ActionFactory.UNDO.getId();
+			bars.setGlobalActionHandler(id, registry.getAction(id));
+			id = ActionFactory.REDO.getId();
+			bars.setGlobalActionHandler(id, registry.getAction(id));
+			id = ActionFactory.DELETE.getId();
+			bars.setGlobalActionHandler(id, registry.getAction(id));
+			id = ActionFactory.REVERT.getId();
+			bars.setGlobalActionHandler(id, registry.getAction(id));
+			bars.updateActionBars();
+		}
+	}
+
+	
 	private StructuredTextEditor fTextEditor = null;
 	private BPELEditor fDesignViewer = null;
 	
+	private OutlinePage outlinePage;
+	
 	private static int DESIGN_PAGE_INDEX = 0;
 	private static int SOURCE_PAGE_INDEX = 1;
 	
@@ -142,6 +303,15 @@
 	}
 
 
+	public void dispose() {
+		if (outlinePage != null && outlinePage.getViewer() != null) {
+			outlinePage.getViewer().setContents(null);
+		}
+		outlinePage = null;
+		fDesignViewer.dispose();
+		fTextEditor.dispose();
+	}
+	
 	/**
 	 * @see org.eclipse.ui.IEditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
 	 */
@@ -159,6 +329,16 @@
 		//saveAs is not allowed; do nothing
 	}
 	
+	public Object getAdapter(Class type) {
+		if (type == IContentOutlinePage.class) {
+			if (outlinePage == null) {
+				outlinePage = new OutlinePage(new TreeViewer());
+			}
+			return outlinePage;
+		}
+	    return super.getAdapter(type);
+	  }
+
 	StructuredTextEditor getTextEditor() {
 		return fTextEditor;
 	}

Back to the top