KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > emf > mapping > ecore2xml > presentation > Ecore2XMLEditor


1 /**
2  * <copyright>
3  *
4  * Copyright (c) 2005 IBM Corporation and others.
5  * All rights reserved. This program and the accompanying materials
6  * are made available under the terms of the Eclipse Public License v1.0
7  * which accompanies this distribution, and is available at
8  * http://www.eclipse.org/legal/epl-v10.html
9  *
10  * Contributors:
11  * IBM - Initial API and implementation
12  *
13  * </copyright>
14  *
15  * $Id: Ecore2XMLEditor.java,v 1.4 2005/06/21 16:16:58 khussey Exp $
16  */

17 package org.eclipse.emf.mapping.ecore2xml.presentation;
18
19
20 import org.eclipse.emf.common.command.BasicCommandStack;
21 import org.eclipse.emf.common.command.Command;
22 import org.eclipse.emf.common.command.CommandStack;
23 import org.eclipse.emf.common.command.CommandStackListener;
24
25 import org.eclipse.emf.common.notify.AdapterFactory;
26
27 import org.eclipse.emf.common.ui.ViewerPane;
28
29 import org.eclipse.emf.common.ui.viewer.IViewerProvider;
30
31 import org.eclipse.emf.common.util.URI;
32
33 import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
34 import org.eclipse.emf.edit.domain.EditingDomain;
35 import org.eclipse.emf.edit.domain.IEditingDomainProvider;
36
37 import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
38 import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
39 import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
40
41 import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
42
43 import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
44
45 import org.eclipse.emf.edit.ui.celleditor.AdapterFactoryTreeEditor;
46
47 import org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter;
48 import org.eclipse.emf.edit.ui.dnd.LocalTransfer;
49 import org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter;
50
51 import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
52 import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
53
54 import org.eclipse.emf.ecore.EObject;
55 import org.eclipse.emf.ecore.EValidator;
56
57 import org.eclipse.emf.ecore.resource.Resource;
58 import org.eclipse.emf.ecore.resource.ResourceSet;
59
60 import java.io.IOException JavaDoc;
61
62 import java.util.ArrayList JavaDoc;
63 import java.util.Collection JavaDoc;
64 import java.util.Collections JavaDoc;
65 import java.util.EventObject JavaDoc;
66 import java.util.Iterator JavaDoc;
67 import java.util.List JavaDoc;
68
69 import org.eclipse.core.resources.IFile;
70 import org.eclipse.core.resources.IMarker;
71 import org.eclipse.core.resources.IResource;
72 import org.eclipse.core.resources.IResourceChangeListener;
73 import org.eclipse.core.resources.IResourceChangeEvent;
74 import org.eclipse.core.resources.IResourceDelta;
75 import org.eclipse.core.resources.IResourceDeltaVisitor;
76 import org.eclipse.core.resources.ResourcesPlugin;
77
78 import org.eclipse.core.runtime.CoreException;
79 import org.eclipse.core.runtime.IPath;
80 import org.eclipse.core.runtime.IProgressMonitor;
81
82 import org.eclipse.jface.action.IMenuListener;
83 import org.eclipse.jface.action.IMenuManager;
84 import org.eclipse.jface.action.IStatusLineManager;
85 import org.eclipse.jface.action.IToolBarManager;
86 import org.eclipse.jface.action.MenuManager;
87 import org.eclipse.jface.action.Separator;
88
89 import org.eclipse.jface.dialogs.MessageDialog;
90 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
91
92 import org.eclipse.jface.viewers.ColumnWeightData;
93 import org.eclipse.jface.viewers.ISelection;
94 import org.eclipse.jface.viewers.ISelectionChangedListener;
95 import org.eclipse.jface.viewers.ISelectionProvider;
96 import org.eclipse.jface.viewers.IStructuredSelection;
97 import org.eclipse.jface.viewers.ListViewer;
98 import org.eclipse.jface.viewers.SelectionChangedEvent;
99 import org.eclipse.jface.viewers.StructuredSelection;
100 import org.eclipse.jface.viewers.StructuredViewer;
101 import org.eclipse.jface.viewers.TableLayout;
102 import org.eclipse.jface.viewers.TableViewer;
103 import org.eclipse.jface.viewers.TreeViewer;
104 import org.eclipse.jface.viewers.Viewer;
105
106 import org.eclipse.swt.SWT;
107
108 import org.eclipse.swt.custom.CTabFolder;
109
110 import org.eclipse.swt.dnd.DND;
111 import org.eclipse.swt.dnd.Transfer;
112
113 import org.eclipse.swt.events.ControlAdapter;
114 import org.eclipse.swt.events.ControlEvent;
115
116 import org.eclipse.swt.graphics.Point;
117
118 import org.eclipse.swt.layout.FillLayout;
119
120 import org.eclipse.swt.widgets.Composite;
121 import org.eclipse.swt.widgets.Control;
122 import org.eclipse.swt.widgets.Menu;
123 import org.eclipse.swt.widgets.Table;
124 import org.eclipse.swt.widgets.TableColumn;
125 import org.eclipse.swt.widgets.Tree;
126
127 import org.eclipse.swt.widgets.TreeColumn;
128
129 import org.eclipse.ui.IActionBars;
130 import org.eclipse.ui.IEditorInput;
131 import org.eclipse.ui.IEditorPart;
132 import org.eclipse.ui.IEditorSite;
133 import org.eclipse.ui.IFileEditorInput;
134 import org.eclipse.ui.IPartListener;
135 import org.eclipse.ui.IWorkbenchPart;
136
137 import org.eclipse.ui.dialogs.SaveAsDialog;
138
139 import org.eclipse.ui.ide.IGotoMarker;
140
141 import org.eclipse.ui.part.FileEditorInput;
142 import org.eclipse.ui.part.MultiPageEditorPart;
143
144 import org.eclipse.ui.views.contentoutline.ContentOutline;
145 import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
146 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
147
148 import org.eclipse.ui.views.properties.IPropertySheetPage;
149 import org.eclipse.ui.views.properties.PropertySheet;
150 import org.eclipse.ui.views.properties.PropertySheetPage;
151
152 import org.eclipse.emf.mapping.ecore2xml.provider.Ecore2XMLItemProviderAdapterFactory;
153
154
155 import java.util.HashMap JavaDoc;
156
157 import org.eclipse.core.runtime.NullProgressMonitor;
158
159 import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
160
161 import org.eclipse.emf.mapping.ecore2xml.ui.Ecore2XMLUIPlugin;
162
163 import org.eclipse.ui.actions.WorkspaceModifyOperation;
164
165
166 /**
167  * This is an example of a Ecore2XML model editor.
168  * <!-- begin-user-doc -->
169  * <!-- end-user-doc -->
170  * @generated
171  */

172 public class Ecore2XMLEditor
173   extends MultiPageEditorPart
174   implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker
175 {
176   /**
177    * This keeps track of the editing domain that is used to track all changes to the model.
178    * <!-- begin-user-doc -->
179    * <!-- end-user-doc -->
180    * @generated
181    */

182   protected AdapterFactoryEditingDomain editingDomain;
183
184   /**
185    * This is the one adapter factory used for providing views of the model.
186    * <!-- begin-user-doc -->
187    * <!-- end-user-doc -->
188    * @generated
189    */

190   protected ComposedAdapterFactory adapterFactory;
191
192   /**
193    * This is the content outline page.
194    * <!-- begin-user-doc -->
195    * <!-- end-user-doc -->
196    * @generated
197    */

198   protected IContentOutlinePage contentOutlinePage;
199
200   /**
201    * This is a kludge...
202    * <!-- begin-user-doc -->
203    * <!-- end-user-doc -->
204    * @generated
205    */

206   protected IStatusLineManager contentOutlineStatusLineManager;
207
208   /**
209    * This is the content outline page's viewer.
210    * <!-- begin-user-doc -->
211    * <!-- end-user-doc -->
212    * @generated
213    */

214   protected TreeViewer contentOutlineViewer;
215
216   /**
217    * This is the property sheet page.
218    * <!-- begin-user-doc -->
219    * <!-- end-user-doc -->
220    * @generated
221    */

222   protected PropertySheetPage propertySheetPage;
223
224   /**
225    * This is the viewer that shadows the selection in the content outline.
226    * The parent relation must be correctly defined for this to work.
227    * <!-- begin-user-doc -->
228    * <!-- end-user-doc -->
229    * @generated
230    */

231   protected TreeViewer selectionViewer;
232
233   /**
234    * This inverts the roll of parent and child in the content provider and show parents as a tree.
235    * <!-- begin-user-doc -->
236    * <!-- end-user-doc -->
237    * @generated
238    */

239   protected TreeViewer parentViewer;
240
241   /**
242    * This shows how a tree view works.
243    * <!-- begin-user-doc -->
244    * <!-- end-user-doc -->
245    * @generated
246    */

247   protected TreeViewer treeViewer;
248
249   /**
250    * This shows how a list view works.
251    * A list viewer doesn't support icons.
252    * <!-- begin-user-doc -->
253    * <!-- end-user-doc -->
254    * @generated
255    */

256   protected ListViewer listViewer;
257
258   /**
259    * This shows how a table view works.
260    * A table can be used as a list with icons.
261    * <!-- begin-user-doc -->
262    * <!-- end-user-doc -->
263    * @generated
264    */

265   protected TableViewer tableViewer;
266
267   /**
268    * This shows how a tree view with columns works.
269    * <!-- begin-user-doc -->
270    * <!-- end-user-doc -->
271    * @generated
272    */

273   protected TreeViewer treeViewerWithColumns;
274
275   /**
276    * This keeps track of the active viewer pane, in the book.
277    * <!-- begin-user-doc -->
278    * <!-- end-user-doc -->
279    * @generated
280    */

281   protected ViewerPane currentViewerPane;
282
283   /**
284    * This keeps track of the active content viewer, which may be either one of the viewers in the pages or the content outline viewer.
285    * <!-- begin-user-doc -->
286    * <!-- end-user-doc -->
287    * @generated
288    */

289   protected Viewer currentViewer;
290
291   /**
292    * This listens to which ever viewer is active.
293    * <!-- begin-user-doc -->
294    * <!-- end-user-doc -->
295    * @generated
296    */

297   protected ISelectionChangedListener selectionChangedListener;
298
299   /**
300    * This keeps track of all the {@link org.eclipse.jface.viewers.ISelectionChangedListener}s that are listening to this editor.
301    * <!-- begin-user-doc -->
302    * <!-- end-user-doc -->
303    * @generated
304    */

305   protected Collection JavaDoc selectionChangedListeners = new ArrayList JavaDoc();
306
307   /**
308    * This keeps track of the selection of the editor as a whole.
309    * <!-- begin-user-doc -->
310    * <!-- end-user-doc -->
311    * @generated
312    */

313   protected ISelection editorSelection = StructuredSelection.EMPTY;
314
315   /**
316    * This listens for when the outline becomes active
317    * <!-- begin-user-doc -->
318    * <!-- end-user-doc -->
319    * @generated
320    */

321   protected IPartListener partListener =
322     new IPartListener()
323     {
324       public void partActivated(IWorkbenchPart p)
325       {
326         if (p instanceof ContentOutline)
327         {
328           if (((ContentOutline)p).getCurrentPage() == contentOutlinePage)
329           {
330             getActionBarContributor().setActiveEditor(Ecore2XMLEditor.this);
331
332             setCurrentViewer(contentOutlineViewer);
333           }
334         }
335         else if (p instanceof PropertySheet)
336         {
337           if (((PropertySheet)p).getCurrentPage() == propertySheetPage)
338           {
339             getActionBarContributor().setActiveEditor(Ecore2XMLEditor.this);
340             handleActivate();
341           }
342         }
343         else if (p == Ecore2XMLEditor.this)
344         {
345           handleActivate();
346         }
347       }
348       public void partBroughtToTop(IWorkbenchPart p)
349       {
350       }
351       public void partClosed(IWorkbenchPart p)
352       {
353       }
354       public void partDeactivated(IWorkbenchPart p)
355       {
356       }
357       public void partOpened(IWorkbenchPart p)
358       {
359       }
360     };
361
362   /**
363    * Resources that have been removed since last activation.
364    * @generated
365    */

366   Collection JavaDoc removedResources = new ArrayList JavaDoc();
367
368   /**
369    * Resources that have been changed since last activation.
370    * @generated
371    */

372   Collection JavaDoc changedResources = new ArrayList JavaDoc();
373
374   /**
375    * Resources that have been saved.
376    * @generated
377    */

378   Collection JavaDoc savedResources = new ArrayList JavaDoc();
379
380   /**
381    * This listens for workspace changes.
382    * <!-- begin-user-doc -->
383    * <!-- end-user-doc -->
384    * @generated
385    */

386   protected IResourceChangeListener resourceChangeListener =
387     new IResourceChangeListener()
388     {
389       public void resourceChanged(IResourceChangeEvent event)
390       {
391         // Only listening to these.
392
// if (event.getType() == IResourceDelta.POST_CHANGE)
393
{
394           IResourceDelta delta = event.getDelta();
395           try
396           {
397             class ResourceDeltaVisitor implements IResourceDeltaVisitor
398             {
399               protected ResourceSet resourceSet = editingDomain.getResourceSet();
400               protected Collection JavaDoc changedResources = new ArrayList JavaDoc();
401               protected Collection JavaDoc removedResources = new ArrayList JavaDoc();
402
403               public boolean visit(IResourceDelta delta)
404               {
405                 if (delta.getFlags() != IResourceDelta.MARKERS &&
406                       delta.getResource().getType() == IResource.FILE)
407                 {
408                   if ((delta.getKind() & (IResourceDelta.CHANGED | IResourceDelta.REMOVED)) != 0)
409                   {
410                     Resource resource = resourceSet.getResource(URI.createURI(delta.getFullPath().toString()), false);
411                     if (resource != null)
412                     {
413                       if ((delta.getKind() & IResourceDelta.REMOVED) != 0)
414                       {
415                         removedResources.add(resource);
416                       }
417                       else
418                       {
419                         changedResources.add(resource);
420                       }
421                     }
422                   }
423                 }
424
425                 return true;
426               }
427
428               public Collection JavaDoc getChangedResources()
429               {
430                 return changedResources;
431               }
432
433               public Collection JavaDoc getRemovedResources()
434               {
435                 return removedResources;
436               }
437             }
438
439             ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
440             delta.accept(visitor);
441
442             if (!visitor.getRemovedResources().isEmpty())
443             {
444               removedResources.addAll(visitor.getRemovedResources());
445               if (!isDirty())
446               {
447                 getSite().getShell().getDisplay().asyncExec
448                   (new Runnable JavaDoc()
449                    {
450                      public void run()
451                      {
452                        getSite().getPage().closeEditor(Ecore2XMLEditor.this, false);
453                        Ecore2XMLEditor.this.dispose();
454                      }
455                    });
456               }
457             }
458
459             if (!visitor.getChangedResources().isEmpty())
460             {
461               changedResources.addAll(visitor.getChangedResources());
462             }
463           }
464           catch (CoreException exception)
465           {
466             Ecore2XMLUIPlugin.INSTANCE.log(exception);
467           }
468         }
469       }
470     };
471
472   /**
473    * Handles activation of the editor or it's associated views.
474    * @generated
475    */

476   protected void handleActivate()
477   {
478     // Recompute the read only state.
479
//
480
if (editingDomain.getResourceToReadOnlyMap() != null)
481     {
482       editingDomain.getResourceToReadOnlyMap().clear();
483
484       // Refresh any actions that may become enabled or disabled.
485
//
486
setSelection(getSelection());
487     }
488
489     if (!removedResources.isEmpty())
490     {
491       if (handleDirtyConflict())
492       {
493         getSite().getPage().closeEditor(Ecore2XMLEditor.this, false);
494         Ecore2XMLEditor.this.dispose();
495       }
496       else
497       {
498         removedResources.clear();
499         changedResources.clear();
500         savedResources.clear();
501       }
502     }
503     else if (!changedResources.isEmpty())
504     {
505       changedResources.removeAll(savedResources);
506       handleChangedResources();
507       changedResources.clear();
508       savedResources.clear();
509     }
510   }
511
512
513   /**
514    * Handles what to do with changed resources on activation.
515    * @generated
516    */

517   protected void handleChangedResources()
518   {
519     if (!changedResources.isEmpty() && (!isDirty() || handleDirtyConflict()))
520     {
521       editingDomain.getCommandStack().flush();
522
523       for (Iterator JavaDoc i = changedResources.iterator(); i.hasNext(); )
524       {
525         Resource resource = (Resource)i.next();
526         if (resource.isLoaded())
527         {
528           resource.unload();
529           try
530           {
531             resource.load(Collections.EMPTY_MAP);
532           }
533           catch (IOException JavaDoc exception)
534           {
535             Ecore2XMLUIPlugin.INSTANCE.log(exception);
536           }
537         }
538       }
539     }
540   }
541
542   /**
543    * Shows a dialog that asks if conflicting changes should be discarded.
544    * @generated
545    */

546   protected boolean handleDirtyConflict()
547   {
548     return
549       MessageDialog.openQuestion
550         (getSite().getShell(),
551          getString("_UI_FileConflict_label"), //$NON-NLS-1$
552
getString("_WARN_FileConflict")); //$NON-NLS-1$
553
}
554
555   /**
556    * This creates a model editor.
557    * <!-- begin-user-doc -->
558    * <!-- end-user-doc -->
559    * @generated
560    */

561   public Ecore2XMLEditor()
562   {
563     super();
564
565     // Create an adapter factory that yields item providers.
566
//
567
List JavaDoc factories = new ArrayList JavaDoc();
568     factories.add(new ResourceItemProviderAdapterFactory());
569     factories.add(new Ecore2XMLItemProviderAdapterFactory());
570     factories.add(new EcoreItemProviderAdapterFactory());
571     factories.add(new ReflectiveItemProviderAdapterFactory());
572
573     adapterFactory = new ComposedAdapterFactory(factories);
574
575     // Create the command stack that will notify this editor as commands are executed.
576
//
577
BasicCommandStack commandStack = new BasicCommandStack();
578
579     // Add a listener to set the most recent command's affected objects to be the selection of the viewer with focus.
580
//
581
commandStack.addCommandStackListener
582       (new CommandStackListener()
583        {
584          public void commandStackChanged(final EventObject JavaDoc event)
585          {
586            getContainer().getDisplay().asyncExec
587              (new Runnable JavaDoc()
588               {
589                 public void run()
590                 {
591                   firePropertyChange(IEditorPart.PROP_DIRTY);
592
593                   // Try to select the affected objects.
594
//
595
Command mostRecentCommand = ((CommandStack)event.getSource()).getMostRecentCommand();
596                   if (mostRecentCommand != null)
597                   {
598                     setSelectionToViewer(mostRecentCommand.getAffectedObjects());
599                   }
600                   if (propertySheetPage != null)
601                   {
602                     propertySheetPage.refresh();
603                   }
604                 }
605               });
606          }
607        });
608
609     // Create the editing domain with a special command stack.
610
//
611
editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap JavaDoc());
612   }
613
614   /**
615    * This is here for the listener to be able to call it.
616    * <!-- begin-user-doc -->
617    * <!-- end-user-doc -->
618    * @generated
619    */

620   protected void firePropertyChange(int action)
621   {
622     super.firePropertyChange(action);
623   }
624
625   /**
626    * This sets the selection into whichever viewer is active.
627    * <!-- begin-user-doc -->
628    * <!-- end-user-doc -->
629    * @generated
630    */

631   public void setSelectionToViewer(Collection JavaDoc collection)
632   {
633     final Collection JavaDoc theSelection = collection;
634     // Make sure it's okay.
635
//
636
if (theSelection != null && !theSelection.isEmpty())
637     {
638       // I don't know if this should be run this deferred
639
// because we might have to give the editor a chance to process the viewer update events
640
// and hence to update the views first.
641
//
642
//
643
Runnable JavaDoc runnable =
644         new Runnable JavaDoc()
645         {
646           public void run()
647           {
648             // Try to select the items in the current content viewer of the editor.
649
//
650
if (currentViewer != null)
651             {
652               currentViewer.setSelection(new StructuredSelection(theSelection.toArray()), true);
653             }
654           }
655         };
656       runnable.run();
657     }
658   }
659
660   /**
661    * This returns the editing domain as required by the {@link IEditingDomainProvider} interface.
662    * This is important for implementing the static methods of {@link AdapterFactoryEditingDomain}
663    * and for supporting {@link org.eclipse.emf.edit.ui.action.CommandAction}.
664    * <!-- begin-user-doc -->
665    * <!-- end-user-doc -->
666    * @generated
667    */

668   public EditingDomain getEditingDomain()
669   {
670     return editingDomain;
671   }
672
673   /**
674    * <!-- begin-user-doc -->
675    * <!-- end-user-doc -->
676    * @generated
677    */

678   public class ReverseAdapterFactoryContentProvider extends AdapterFactoryContentProvider
679   {
680     public ReverseAdapterFactoryContentProvider(AdapterFactory adapterFactory)
681     {
682       super(adapterFactory);
683     }
684
685     public Object JavaDoc [] getElements(Object JavaDoc object)
686     {
687       Object JavaDoc parent = super.getParent(object);
688       return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
689     }
690
691     public Object JavaDoc [] getChildren(Object JavaDoc object)
692     {
693       Object JavaDoc parent = super.getParent(object);
694       return (parent == null ? Collections.EMPTY_SET : Collections.singleton(parent)).toArray();
695     }
696
697     public boolean hasChildren(Object JavaDoc object)
698     {
699       Object JavaDoc parent = super.getParent(object);
700       return parent != null;
701     }
702
703     public Object JavaDoc getParent(Object JavaDoc object)
704     {
705       return null;
706     }
707   }
708
709   /**
710    * <!-- begin-user-doc -->
711    * <!-- end-user-doc -->
712    * @generated
713    */

714   public void setCurrentViewerPane(ViewerPane viewerPane)
715   {
716     if (currentViewerPane != viewerPane)
717     {
718       if (currentViewerPane != null)
719       {
720         currentViewerPane.showFocus(false);
721       }
722       currentViewerPane = viewerPane;
723     }
724     setCurrentViewer(currentViewerPane.getViewer());
725   }
726
727   /**
728    * This makes sure that one content viewer, either for the current page or the outline view, if it has focus,
729    * is the current one.
730    * <!-- begin-user-doc -->
731    * <!-- end-user-doc -->
732    * @generated
733    */

734   public void setCurrentViewer(Viewer viewer)
735   {
736     // If it is changing...
737
//
738
if (currentViewer != viewer)
739     {
740       if (selectionChangedListener == null)
741       {
742         // Create the listener on demand.
743
//
744
selectionChangedListener =
745           new ISelectionChangedListener()
746           {
747             // This just notifies those things that are affected by the section.
748
//
749
public void selectionChanged(SelectionChangedEvent selectionChangedEvent)
750             {
751               setSelection(selectionChangedEvent.getSelection());
752             }
753           };
754       }
755
756       // Stop listening to the old one.
757
//
758
if (currentViewer != null)
759       {
760         currentViewer.removeSelectionChangedListener(selectionChangedListener);
761       }
762
763       // Start listening to the new one.
764
//
765
if (viewer != null)
766       {
767         viewer.addSelectionChangedListener(selectionChangedListener);
768       }
769
770       // Remember it.
771
//
772
currentViewer = viewer;
773
774       // Set the editors selection based on the current viewer's selection.
775
//
776
setSelection(currentViewer == null ? StructuredSelection.EMPTY : currentViewer.getSelection());
777     }
778   }
779
780   /**
781    * This returns the viewer as required by the {@link IViewerProvider} interface.
782    * <!-- begin-user-doc -->
783    * <!-- end-user-doc -->
784    * @generated
785    */

786   public Viewer getViewer()
787   {
788     return currentViewer;
789   }
790
791   /**
792    * This creates a context menu for the viewer and adds a listener as well registering the menu for extension.
793    * <!-- begin-user-doc -->
794    * <!-- end-user-doc -->
795    * @generated
796    */

797   protected void createContextMenuFor(StructuredViewer viewer)
798   {
799     MenuManager contextMenu = new MenuManager("#PopUp"); //$NON-NLS-1$
800
contextMenu.add(new Separator("additions")); //$NON-NLS-1$
801
contextMenu.setRemoveAllWhenShown(true);
802     contextMenu.addMenuListener(this);
803     Menu menu= contextMenu.createContextMenu(viewer.getControl());
804     viewer.getControl().setMenu(menu);
805     getSite().registerContextMenu(contextMenu, viewer);
806
807     int dndOperations = DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
808     Transfer[] transfers = new Transfer[] { LocalTransfer.getInstance() };
809     viewer.addDragSupport(dndOperations, transfers, new ViewerDragAdapter(viewer));
810     viewer.addDropSupport(dndOperations, transfers, new EditingDomainViewerDropAdapter(editingDomain, viewer));
811   }
812
813   /**
814    * This is the method called to load a resource into the editing domain's resource set based on the editor's input.
815    * <!-- begin-user-doc -->
816    * <!-- end-user-doc -->
817    * @generated
818    */

819   public void createModel()
820   {
821     // I assume that the input is a file object.
822
//
823
IFileEditorInput modelFile = (IFileEditorInput)getEditorInput();
824
825     try
826     {
827       // Load the resource through the editing domain.
828
//
829
editingDomain.loadResource(URI.createPlatformResourceURI(modelFile.getFile().getFullPath().toString()).toString());
830     }
831     catch (Exception JavaDoc exception)
832     {
833       Ecore2XMLUIPlugin.INSTANCE.log(exception);
834     }
835   }
836
837   /**
838    * This is the method used by the framework to install your own controls.
839    * <!-- begin-user-doc -->
840    * <!-- end-user-doc -->
841    * @generated
842    */

843   public void createPages()
844   {
845     // Creates the model from the editor input
846
//
847
createModel();
848
849     // Create a page for the selection tree view.
850
//
851
{
852       ViewerPane viewerPane =
853         new ViewerPane(getSite().getPage(), Ecore2XMLEditor.this)
854         {
855           public Viewer createViewer(Composite composite)
856           {
857             Tree tree = new Tree(composite, SWT.MULTI);
858             TreeViewer newTreeViewer = new TreeViewer(tree);
859             return newTreeViewer;
860           }
861           public void requestActivation()
862           {
863             super.requestActivation();
864             setCurrentViewerPane(this);
865           }
866         };
867       viewerPane.createControl(getContainer());
868
869       selectionViewer = (TreeViewer)viewerPane.getViewer();
870       selectionViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
871
872       selectionViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
873       selectionViewer.setInput(editingDomain.getResourceSet());
874       viewerPane.setTitle(editingDomain.getResourceSet());
875
876       new AdapterFactoryTreeEditor(selectionViewer.getTree(), adapterFactory);
877
878       createContextMenuFor(selectionViewer);
879       int pageIndex = addPage(viewerPane.getControl());
880       setPageText(pageIndex, getString("_UI_SelectionPage_label")); //$NON-NLS-1$
881
}
882
883     // Create a page for the parent tree view.
884
//
885
{
886       ViewerPane viewerPane =
887         new ViewerPane(getSite().getPage(), Ecore2XMLEditor.this)
888         {
889           public Viewer createViewer(Composite composite)
890           {
891             Tree tree = new Tree(composite, SWT.MULTI);
892             TreeViewer newTreeViewer = new TreeViewer(tree);
893             return newTreeViewer;
894           }
895           public void requestActivation()
896           {
897             super.requestActivation();
898             setCurrentViewerPane(this);
899           }
900         };
901       viewerPane.createControl(getContainer());
902
903       parentViewer = (TreeViewer)viewerPane.getViewer();
904       parentViewer.setAutoExpandLevel(30);
905       parentViewer.setContentProvider(new ReverseAdapterFactoryContentProvider(adapterFactory));
906       parentViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
907
908       createContextMenuFor(parentViewer);
909       int pageIndex = addPage(viewerPane.getControl());
910       setPageText(pageIndex, getString("_UI_ParentPage_label")); //$NON-NLS-1$
911
}
912
913     // This is the page for the list viewer
914
//
915
{
916       ViewerPane viewerPane =
917         new ViewerPane(getSite().getPage(), Ecore2XMLEditor.this)
918         {
919           public Viewer createViewer(Composite composite)
920           {
921             return new ListViewer(composite);
922           }
923           public void requestActivation()
924           {
925             super.requestActivation();
926             setCurrentViewerPane(this);
927           }
928         };
929       viewerPane.createControl(getContainer());
930       listViewer = (ListViewer)viewerPane.getViewer();
931       listViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
932       listViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
933
934       createContextMenuFor(listViewer);
935       int pageIndex = addPage(viewerPane.getControl());
936       setPageText(pageIndex, getString("_UI_ListPage_label")); //$NON-NLS-1$
937
}
938
939     // This is the page for the tree viewer
940
//
941
{
942       ViewerPane viewerPane =
943         new ViewerPane(getSite().getPage(), Ecore2XMLEditor.this)
944         {
945           public Viewer createViewer(Composite composite)
946           {
947             return new TreeViewer(composite);
948           }
949           public void requestActivation()
950           {
951             super.requestActivation();
952             setCurrentViewerPane(this);
953           }
954         };
955       viewerPane.createControl(getContainer());
956       treeViewer = (TreeViewer)viewerPane.getViewer();
957       treeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
958       treeViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
959
960       new AdapterFactoryTreeEditor(treeViewer.getTree(), adapterFactory);
961
962       createContextMenuFor(treeViewer);
963       int pageIndex = addPage(viewerPane.getControl());
964       setPageText(pageIndex, getString("_UI_TreePage_label")); //$NON-NLS-1$
965
}
966
967     // This is the page for the table viewer.
968
//
969
{
970       ViewerPane viewerPane =
971         new ViewerPane(getSite().getPage(), Ecore2XMLEditor.this)
972         {
973           public Viewer createViewer(Composite composite)
974           {
975             return new TableViewer(composite);
976           }
977           public void requestActivation()
978           {
979             super.requestActivation();
980             setCurrentViewerPane(this);
981           }
982         };
983       viewerPane.createControl(getContainer());
984       tableViewer = (TableViewer)viewerPane.getViewer();
985
986       Table table = tableViewer.getTable();
987       TableLayout layout = new TableLayout();
988       table.setLayout(layout);
989       table.setHeaderVisible(true);
990       table.setLinesVisible(true);
991
992       TableColumn objectColumn = new TableColumn(table, SWT.NONE);
993       layout.addColumnData(new ColumnWeightData(3, 100, true));
994       objectColumn.setText(getString("_UI_ObjectColumn_label")); //$NON-NLS-1$
995
objectColumn.setResizable(true);
996
997       TableColumn selfColumn = new TableColumn(table, SWT.NONE);
998       layout.addColumnData(new ColumnWeightData(2, 100, true));
999       selfColumn.setText(getString("_UI_SelfColumn_label")); //$NON-NLS-1$
1000
selfColumn.setResizable(true);
1001
1002      tableViewer.setColumnProperties(new String JavaDoc [] {"a", "b"}); //$NON-NLS-1$ //$NON-NLS-2$
1003
tableViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
1004      tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
1005
1006      createContextMenuFor(tableViewer);
1007      int pageIndex = addPage(viewerPane.getControl());
1008      setPageText(pageIndex, getString("_UI_TablePage_label")); //$NON-NLS-1$
1009
}
1010
1011    // This is the page for the table tree viewer.
1012
//
1013
{
1014      ViewerPane viewerPane =
1015        new ViewerPane(getSite().getPage(), Ecore2XMLEditor.this)
1016        {
1017          public Viewer createViewer(Composite composite)
1018          {
1019            return new TreeViewer(composite);
1020          }
1021          public void requestActivation()
1022          {
1023            super.requestActivation();
1024            setCurrentViewerPane(this);
1025          }
1026        };
1027      viewerPane.createControl(getContainer());
1028
1029      treeViewerWithColumns = (TreeViewer)viewerPane.getViewer();
1030
1031      Tree tree = treeViewerWithColumns.getTree();
1032      tree.setLayoutData(new FillLayout());
1033      tree.setHeaderVisible(true);
1034      tree.setLinesVisible(true);
1035
1036      TreeColumn objectColumn = new TreeColumn(tree, SWT.NONE);
1037      objectColumn.setText(getString("_UI_ObjectColumn_label")); //$NON-NLS-1$
1038
objectColumn.setResizable(true);
1039      objectColumn.setWidth(250);
1040
1041      TreeColumn selfColumn = new TreeColumn(tree, SWT.NONE);
1042      selfColumn.setText(getString("_UI_SelfColumn_label")); //$NON-NLS-1$
1043
selfColumn.setResizable(true);
1044      selfColumn.setWidth(200);
1045
1046      treeViewerWithColumns.setColumnProperties(new String JavaDoc [] {"a", "b"}); //$NON-NLS-1$ //$NON-NLS-2$
1047
treeViewerWithColumns.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
1048      treeViewerWithColumns.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
1049
1050      createContextMenuFor(treeViewerWithColumns);
1051      int pageIndex = addPage(viewerPane.getControl());
1052      setPageText(pageIndex, getString("_UI_TreeWithColumnsPage_label")); //$NON-NLS-1$
1053
}
1054
1055    setActivePage(0);
1056
1057    getContainer().addControlListener
1058      (new ControlAdapter()
1059       {
1060        boolean guard = false;
1061        public void controlResized(ControlEvent event)
1062        {
1063          if (!guard)
1064          {
1065            guard = true;
1066            hideTabs();
1067            guard = false;
1068          }
1069        }
1070       });
1071  }
1072
1073  /**
1074   * If there is just one page in the multi-page editor part, this hides
1075   * the single tab at the bottom.
1076   * <!-- begin-user-doc -->
1077   * <!-- end-user-doc -->
1078   * @generated
1079   */

1080  protected void hideTabs()
1081  {
1082    if (getPageCount() <= 1)
1083    {
1084      setPageText(0, ""); //$NON-NLS-1$
1085
if (getContainer() instanceof CTabFolder)
1086      {
1087        ((CTabFolder)getContainer()).setTabHeight(1);
1088        Point point = getContainer().getSize();
1089        getContainer().setSize(point.x, point.y + 6);
1090      }
1091    }
1092  }
1093
1094  /**
1095   * This is used to track the active viewer.
1096   * <!-- begin-user-doc -->
1097   * <!-- end-user-doc -->
1098   * @generated
1099   */

1100  protected void pageChange(int pageIndex)
1101  {
1102    super.pageChange(pageIndex);
1103
1104    // This is a temporary workaround... EATM
1105
//
1106
Control control = getControl(pageIndex);
1107    if (control != null)
1108    {
1109      control.setVisible(true);
1110      control.setFocus();
1111    }
1112
1113    if (contentOutlinePage != null)
1114    {
1115      handleContentOutlineSelection(contentOutlinePage.getSelection());
1116    }
1117  }
1118
1119  /**
1120   * This is how the framework determines which interfaces we implement.
1121   * <!-- begin-user-doc -->
1122   * <!-- end-user-doc -->
1123   * @generated
1124   */

1125  public Object JavaDoc getAdapter(Class JavaDoc key)
1126  {
1127    if (key.equals(IContentOutlinePage.class))
1128    {
1129      return getContentOutlinePage();
1130    }
1131    else if (key.equals(IPropertySheetPage.class))
1132    {
1133      return getPropertySheetPage();
1134    }
1135    else if (key.equals(IGotoMarker.class))
1136    {
1137      return this;
1138    }
1139    else
1140    {
1141      return super.getAdapter(key);
1142    }
1143  }
1144
1145  /**
1146   * This accesses a cached version of the content outliner.
1147   * <!-- begin-user-doc -->
1148   * <!-- end-user-doc -->
1149   * @generated
1150   */

1151  public IContentOutlinePage getContentOutlinePage()
1152  {
1153    if (contentOutlinePage == null)
1154    {
1155      // The content outline is just a tree.
1156
//
1157
class MyContentOutlinePage extends ContentOutlinePage
1158      {
1159        public void createControl(Composite parent)
1160        {
1161          super.createControl(parent);
1162          contentOutlineViewer = getTreeViewer();
1163          contentOutlineViewer.addSelectionChangedListener(this);
1164
1165          // Set up the tree viewer.
1166
//
1167
contentOutlineViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory));
1168          contentOutlineViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
1169          contentOutlineViewer.setInput(editingDomain.getResourceSet());
1170
1171          // Make sure our popups work.
1172
//
1173
createContextMenuFor(contentOutlineViewer);
1174
1175          if (!editingDomain.getResourceSet().getResources().isEmpty())
1176          {
1177            // Select the root object in the view.
1178
//
1179
ArrayList JavaDoc selection = new ArrayList JavaDoc();
1180            selection.add(editingDomain.getResourceSet().getResources().get(0));
1181            contentOutlineViewer.setSelection(new StructuredSelection(selection), true);
1182          }
1183        }
1184
1185        public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager)
1186        {
1187          super.makeContributions(menuManager, toolBarManager, statusLineManager);
1188          contentOutlineStatusLineManager = statusLineManager;
1189        }
1190
1191        public void setActionBars(IActionBars actionBars)
1192        {
1193          super.setActionBars(actionBars);
1194          getActionBarContributor().shareGlobalActions(this, actionBars);
1195        }
1196      }
1197
1198      contentOutlinePage = new MyContentOutlinePage();
1199
1200      // Listen to selection so that we can handle it is a special way.
1201
//
1202
contentOutlinePage.addSelectionChangedListener
1203        (new ISelectionChangedListener()
1204         {
1205           // This ensures that we handle selections correctly.
1206
//
1207
public void selectionChanged(SelectionChangedEvent event)
1208           {
1209             handleContentOutlineSelection(event.getSelection());
1210           }
1211         });
1212    }
1213
1214    return contentOutlinePage;
1215  }
1216
1217  /**
1218   * This accesses a cached version of the property sheet.
1219   * <!-- begin-user-doc -->
1220   * <!-- end-user-doc -->
1221   * @generated
1222   */

1223  public IPropertySheetPage getPropertySheetPage()
1224  {
1225    if (propertySheetPage == null)
1226    {
1227      propertySheetPage =
1228        new PropertySheetPage()
1229        {
1230          public void makeContributions(IMenuManager menuManager, IToolBarManager toolBarManager, IStatusLineManager statusLineManager)
1231          {
1232            super.makeContributions(menuManager, toolBarManager, statusLineManager);
1233          }
1234
1235          public void setActionBars(IActionBars actionBars)
1236          {
1237            super.setActionBars(actionBars);
1238            getActionBarContributor().shareGlobalActions(this, actionBars);
1239          }
1240        };
1241      propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(adapterFactory));
1242    }
1243
1244    return propertySheetPage;
1245  }
1246
1247  /**
1248   * This deals with how we want selection in the outliner to affect the other views.
1249   * <!-- begin-user-doc -->
1250   * <!-- end-user-doc -->
1251   * @generated
1252   */

1253  public void handleContentOutlineSelection(ISelection selection)
1254  {
1255    if (currentViewerPane != null && !selection.isEmpty() && selection instanceof IStructuredSelection)
1256    {
1257      Iterator JavaDoc selectedElements = ((IStructuredSelection)selection).iterator();
1258      if (selectedElements.hasNext())
1259      {
1260        // Get the first selected element.
1261
//
1262
Object JavaDoc selectedElement = selectedElements.next();
1263
1264        // If it's the selection viewer, then we want it to select the same selection as this selection.
1265
//
1266
if (currentViewerPane.getViewer() == selectionViewer)
1267        {
1268          ArrayList JavaDoc selectionList = new ArrayList JavaDoc();
1269          selectionList.add(selectedElement);
1270          while (selectedElements.hasNext())
1271          {
1272            selectionList.add(selectedElements.next());
1273          }
1274
1275          // Set the selection to the widget.
1276
//
1277
selectionViewer.setSelection(new StructuredSelection(selectionList));
1278        }
1279        else
1280        {
1281          // Set the input to the widget.
1282
//
1283
if (currentViewerPane.getViewer().getInput() != selectedElement)
1284          {
1285            currentViewerPane.getViewer().setInput(selectedElement);
1286            currentViewerPane.setTitle(selectedElement);
1287          }
1288        }
1289      }
1290    }
1291  }
1292
1293  /**
1294   * This is for implementing {@link IEditorPart} and simply tests the command stack.
1295   * <!-- begin-user-doc -->
1296   * <!-- end-user-doc -->
1297   * @generated
1298   */

1299  public boolean isDirty()
1300  {
1301    return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded();
1302  }
1303
1304  /**
1305   * This is for implementing {@link IEditorPart} and simply saves the model file.
1306   * <!-- begin-user-doc -->
1307   * <!-- end-user-doc -->
1308   * @generated
1309   */

1310  public void doSave(IProgressMonitor progressMonitor)
1311  {
1312    // Do the work within an operation because this is a long running activity that modifies the workbench.
1313
//
1314
WorkspaceModifyOperation operation =
1315      new WorkspaceModifyOperation()
1316      {
1317        // This is the method that gets invoked when the operation runs.
1318
//
1319
public void execute(IProgressMonitor monitor)
1320        {
1321          try
1322          {
1323            // Save the resource to the file system.
1324
//
1325
Resource savedResource = (Resource)editingDomain.getResourceSet().getResources().get(0);
1326            savedResources.add(savedResource);
1327            savedResource.save(Collections.EMPTY_MAP);
1328          }
1329          catch (Exception JavaDoc exception)
1330          {
1331            Ecore2XMLUIPlugin.INSTANCE.log(exception);
1332          }
1333        }
1334      };
1335
1336    try
1337    {
1338      // This runs the options, and shows progress.
1339
//
1340
new ProgressMonitorDialog(getSite().getShell()).run(true, false, operation);
1341
1342      // Refresh the necessary state.
1343
//
1344
((BasicCommandStack)editingDomain.getCommandStack()).saveIsDone();
1345      firePropertyChange(IEditorPart.PROP_DIRTY);
1346    }
1347    catch (Exception JavaDoc exception)
1348    {
1349      // Something went wrong that shouldn't.
1350
//
1351
Ecore2XMLUIPlugin.INSTANCE.log(exception);
1352    }
1353  }
1354
1355  /**
1356   * This always returns true because it is not currently supported.
1357   * <!-- begin-user-doc -->
1358   * <!-- end-user-doc -->
1359   * @generated
1360   */

1361  public boolean isSaveAsAllowed()
1362  {
1363    return true;
1364  }
1365
1366  /**
1367   * This also changes the editor's input.
1368   * <!-- begin-user-doc -->
1369   * <!-- end-user-doc -->
1370   * @generated
1371   */

1372  public void doSaveAs()
1373  {
1374    SaveAsDialog saveAsDialog= new SaveAsDialog(getSite().getShell());
1375    saveAsDialog.open();
1376    IPath path= saveAsDialog.getResult();
1377    if (path != null)
1378    {
1379      IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
1380      if (file != null)
1381      {
1382        doSaveAs(URI.createPlatformResourceURI(file.getFullPath().toString()), new FileEditorInput(file));
1383      }
1384    }
1385  }
1386  
1387  /**
1388   * <!-- begin-user-doc -->
1389   * <!-- end-user-doc -->
1390   * @generated
1391   */

1392  protected void doSaveAs(URI uri, IEditorInput editorInput)
1393  {
1394    ((Resource)editingDomain.getResourceSet().getResources().get(0)).setURI(uri);
1395    setInput(editorInput);
1396    setPartName(editorInput.getName());
1397    IProgressMonitor progressMonitor =
1398      getActionBars().getStatusLineManager() != null ?
1399        getActionBars().getStatusLineManager().getProgressMonitor() :
1400        new NullProgressMonitor();
1401    doSave(progressMonitor);
1402  }
1403
1404  /**
1405   * <!-- begin-user-doc -->
1406   * <!-- end-user-doc -->
1407   * @generated
1408   */

1409  public void gotoMarker(IMarker marker)
1410  {
1411    try
1412    {
1413      if (marker.getType().equals(EValidator.MARKER))
1414      {
1415        String JavaDoc uriAttribute = marker.getAttribute(EValidator.URI_ATTRIBUTE, null);
1416        if (uriAttribute != null)
1417        {
1418          URI uri = URI.createURI(uriAttribute);
1419          EObject eObject = editingDomain.getResourceSet().getEObject(uri, true);
1420          if (eObject != null)
1421          {
1422            setSelectionToViewer(Collections.singleton(editingDomain.getWrapper(eObject)));
1423          }
1424        }
1425      }
1426    }
1427    catch (CoreException exception)
1428    {
1429      Ecore2XMLUIPlugin.INSTANCE.log(exception);
1430    }
1431  }
1432
1433  /**
1434   * This is called during startup.
1435   * <!-- begin-user-doc -->
1436   * <!-- end-user-doc -->
1437   * @generated
1438   */

1439  public void init(IEditorSite site, IEditorInput editorInput)
1440  {
1441    setSite(site);
1442    setInput(editorInput);
1443    setPartName(editorInput.getName());
1444    site.setSelectionProvider(this);
1445    site.getPage().addPartListener(partListener);
1446    ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE);
1447  }
1448
1449  /**
1450   * <!-- begin-user-doc -->
1451   * <!-- end-user-doc -->
1452   * @generated
1453   */

1454  public void setFocus()
1455  {
1456    getControl(getActivePage()).setFocus();
1457  }
1458
1459  /**
1460   * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
1461   * <!-- begin-user-doc -->
1462   * <!-- end-user-doc -->
1463   * @generated
1464   */

1465  public void addSelectionChangedListener(ISelectionChangedListener listener)
1466  {
1467    selectionChangedListeners.add(listener);
1468  }
1469
1470  /**
1471   * This implements {@link org.eclipse.jface.viewers.ISelectionProvider}.
1472   * <!-- begin-user-doc -->
1473   * <!-- end-user-doc -->
1474   * @generated
1475   */

1476  public void removeSelectionChangedListener(ISelectionChangedListener listener)
1477  {
1478    selectionChangedListeners.remove(listener);
1479  }
1480
1481  /**
1482   * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to return this editor's overall selection.
1483   * <!-- begin-user-doc -->
1484   * <!-- end-user-doc -->
1485   * @generated
1486   */

1487  public ISelection getSelection()
1488  {
1489    return editorSelection;
1490  }
1491
1492  /**
1493   * This implements {@link org.eclipse.jface.viewers.ISelectionProvider} to set this editor's overall selection.
1494   * Calling this result will notify the listeners.
1495   * <!-- begin-user-doc -->
1496   * <!-- end-user-doc -->
1497   * @generated
1498   */

1499  public void setSelection(ISelection selection)
1500  {
1501    editorSelection = selection;
1502
1503    for (Iterator JavaDoc listeners = selectionChangedListeners.iterator(); listeners.hasNext(); )
1504    {
1505      ISelectionChangedListener listener = (ISelectionChangedListener)listeners.next();
1506      listener.selectionChanged(new SelectionChangedEvent(this, selection));
1507    }
1508    setStatusLineManager(selection);
1509  }
1510
1511  /**
1512   * <!-- begin-user-doc -->
1513   * <!-- end-user-doc -->
1514   * @generated
1515   */

1516  public void setStatusLineManager(ISelection selection)
1517  {
1518    IStatusLineManager statusLineManager = currentViewer != null && currentViewer == contentOutlineViewer ?
1519      contentOutlineStatusLineManager : getActionBars().getStatusLineManager();
1520  
1521    if (statusLineManager != null)
1522    {
1523      if (selection instanceof IStructuredSelection)
1524      {
1525        Collection JavaDoc collection = ((IStructuredSelection)selection).toList();
1526        switch (collection.size())
1527        {
1528          case 0:
1529          {
1530            statusLineManager.setMessage(getString("_UI_NoObjectSelected")); //$NON-NLS-1$
1531
break;
1532          }
1533          case 1:
1534          {
1535            String JavaDoc text = new AdapterFactoryItemDelegator(adapterFactory).getText(collection.iterator().next());
1536            statusLineManager.setMessage(getString("_UI_SingleObjectSelected", text)); //$NON-NLS-1$
1537
break;
1538          }
1539          default:
1540          {
1541            statusLineManager.setMessage(getString("_UI_MultiObjectSelected", Integer.toString(collection.size()))); //$NON-NLS-1$
1542
break;
1543          }
1544        }
1545      }
1546      else
1547      {
1548        statusLineManager.setMessage(""); //$NON-NLS-1$
1549
}
1550    }
1551  }
1552
1553  /**
1554   * This looks up a string in the plugin's plugin.properties file.
1555   * <!-- begin-user-doc -->
1556   * <!-- end-user-doc -->
1557   * @generated
1558   */

1559  private static String JavaDoc getString(String JavaDoc key)
1560  {
1561    return Ecore2XMLUIPlugin.INSTANCE.getString(key);
1562  }
1563
1564  /**
1565   * This looks up a string in plugin.properties, making a substitution.
1566   * <!-- begin-user-doc -->
1567   * <!-- end-user-doc -->
1568   * @generated
1569   */

1570  private static String JavaDoc getString(String JavaDoc key, Object JavaDoc s1)
1571  {
1572    return Ecore2XMLUIPlugin.INSTANCE.getString(key, new Object JavaDoc [] { s1 });
1573  }
1574
1575  /**
1576   * This implements {@link org.eclipse.jface.action.IMenuListener} to help fill the context menus with contributions from the Edit menu.
1577   * <!-- begin-user-doc -->
1578   * <!-- end-user-doc -->
1579   * @generated
1580   */

1581  public void menuAboutToShow(IMenuManager menuManager)
1582  {
1583    ((IMenuListener)getEditorSite().getActionBarContributor()).menuAboutToShow(menuManager);
1584  }
1585
1586  /**
1587   * <!-- begin-user-doc -->
1588   * <!-- end-user-doc -->
1589   * @generated
1590   */

1591  public EditingDomainActionBarContributor getActionBarContributor()
1592  {
1593    return (EditingDomainActionBarContributor)getEditorSite().getActionBarContributor();
1594  }
1595
1596  /**
1597   * <!-- begin-user-doc -->
1598   * <!-- end-user-doc -->
1599   * @generated
1600   */

1601  public IActionBars getActionBars()
1602  {
1603    return getActionBarContributor().getActionBars();
1604  }
1605
1606  /**
1607   * <!-- begin-user-doc -->
1608   * <!-- end-user-doc -->
1609   * @generated
1610   */

1611  public AdapterFactory getAdapterFactory()
1612  {
1613    return adapterFactory;
1614  }
1615
1616  /**
1617   * <!-- begin-user-doc -->
1618   * <!-- end-user-doc -->
1619   * @generated
1620   */

1621  public void dispose()
1622  {
1623    ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeListener);
1624
1625    getSite().getPage().removePartListener(partListener);
1626
1627    adapterFactory.dispose();
1628
1629    if (getActionBarContributor().getActiveEditor() == this)
1630    {
1631      getActionBarContributor().setActiveEditor(null);
1632    }
1633
1634    if (propertySheetPage != null)
1635    {
1636      propertySheetPage.dispose();
1637    }
1638
1639    if (contentOutlinePage != null)
1640    {
1641      contentOutlinePage.dispose();
1642    }
1643
1644    super.dispose();
1645  }
1646
1647}
1648
Popular Tags