[531477] [Activity Explorer] Activity Explorer becomes "Process Map"
after a restart with null session 

Bug 531477


Change-Id: I3d3f2737373bbbd73f8f09b9344f3eeb7f605719
Signed-off-by: Ali AKAR <ali.akar82@gmail.com>
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/ActivityExplorerEditor.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/ActivityExplorerEditor.java
index 6983334..a2906b1 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/ActivityExplorerEditor.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/ActivityExplorerEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2017 THALES GLOBAL SERVICES.
+ * Copyright (c) 2006, 2018 THALES GLOBAL SERVICES.
  * 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
@@ -19,6 +19,7 @@
 import org.eclipse.amalgam.explorer.activity.ui.api.editor.input.ActivityExplorerEditorInput;
 import org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.CommonActivityExplorerPage;
 import org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.DocumentationActivityExplorerPage;
+import org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.MessagePage;
 import org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.OverviewActivityExplorerPage;
 import org.eclipse.amalgam.explorer.activity.ui.api.manager.ActivityExplorerManager;
 import org.eclipse.amalgam.explorer.activity.ui.internal.extension.point.manager.ActivityExplorerExtensionManager;
@@ -27,14 +28,18 @@
 import org.eclipse.amalgam.explorer.activity.ui.internal.util.ActivityExplorerLoggerService;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.IPageChangedListener;
+import org.eclipse.jface.dialogs.PageChangedEvent;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.jface.viewers.ILabelDecorator;
 import org.eclipse.sirius.business.api.session.Session;
 import org.eclipse.sirius.business.api.session.SessionListener;
-import org.eclipse.sirius.business.api.session.SessionStatus;
 import org.eclipse.sirius.ui.business.api.session.IEditingSession;
 import org.eclipse.sirius.ui.business.api.session.SessionUIManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlListener;
 import org.eclipse.swt.graphics.Image;
@@ -53,670 +58,686 @@
 import org.eclipse.ui.views.properties.IPropertySheetPage;
 import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
 import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.FrameworkUtil;
 
 /**
  * Base class to implement Activity Explorer.
  */
-public class ActivityExplorerEditor extends SharedHeaderFormEditor implements ITabbedPropertySheetPageContributor,
-		IPropertyChangeListener, IActivityExplorerEditorSessionListener, ISaveablesSource {
+public class ActivityExplorerEditor extends SharedHeaderFormEditor implements ITabbedPropertySheetPageContributor, IPropertyChangeListener, IActivityExplorerEditorSessionListener, ISaveablesSource {
 
-	/**
-	 * Editor ID.
-	 */
-	public static final String ID = "org.eclipse.amalgam.explorer.activity.ui.editor.activityExplorerEditor"; //$NON-NLS-1$
-	/**
-	 * Part listener to detect editor activation.
-	 */
-	private IPartListener _partListener;
+    /**
+     * Editor ID.
+     */
+    public static final String ID = "org.eclipse.amalgam.explorer.activity.ui.editor.activityExplorerEditor"; //$NON-NLS-1$
 
-	/**
-	 * Property Sheet page.
-	 */
-	private TabbedPropertySheetPage _propertySheetPage;
-	
-	/**
-	 * Hold active page at updating the editor
-	 */
-	private int backToActivePage = 0;
+    /**
+     * Part listener to detect editor activation.
+     */
+    private IPartListener _partListener;
 
-	public ActivityExplorerEditor() {
-		ActivityExplorerManager.INSTANCE.setEditor(this);
-		ActivityExplorerManager.INSTANCE.addActivityExplorerEditorListener(this);
-		_partListener = new ActivityExplorerEditorPartListener(this);
-	}
+    /**
+     * Property Sheet page.
+     */
+    private TabbedPropertySheetPage _propertySheetPage;
 
-	@Override
-	public void setFocus() {
-		super.setFocus();
-		getContainer().setFocus();
-		ActivityExplorerManager.INSTANCE.setEditor(this);
-	}
-
-	/**
-	 * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
-	 */
-	@Override
-	protected void addPages() {
-		try {
-
-			// set editor in the Activity Explorer Manager
-			ActivityExplorerManager.INSTANCE.setEditor(this);
-
-			// Add other Pages (plug-ins contribution)
-			createContributedPages();
-
-		} catch (PartInitException exception) {
-			StringBuilder loggerMessage = new StringBuilder("ActivityExplorerEditor.addPages(..) _ "); //$NON-NLS-1$
-			loggerMessage.append(exception.getMessage());
-
-			ActivityExplorerLoggerService.getInstance().log(IStatus.ERROR, loggerMessage.toString(), exception);
-
-		} catch (Exception exception) {
-			StringBuilder loggerMessage = new StringBuilder("ActivityExplorerEditor.addPages(..) _ "); //$NON-NLS-1$
-			loggerMessage.append(exception.getMessage());
-
-			ActivityExplorerLoggerService.getInstance().log(IStatus.WARNING, loggerMessage.toString(), exception);
-
-		}
-
-		// Add a control listener to force reflow
-		getContainer().addControlListener(new ControlListener() {
-			public void controlMoved(ControlEvent cevent) {
-				// Do nothing.
-
-			}
-
-			public void controlResized(ControlEvent cevent) {
-				IFormPage activePageInstance = ActivityExplorerEditor.this.getActivePageInstance();
-				IManagedForm managedForm = activePageInstance.getManagedForm();
-				managedForm.reflow(true);
-			}
-
-		});
-		// Refresh dirty state when the part is activated : open time for
-		// instance.
-		getHeaderForm().dirtyStateChanged();
-		ActivityExplorerActivator.getDefault().getPreferenceStore().addPropertyChangeListener(this);
-
-		// because the pages is update later
-		pages.remove(null);
-
-	}
-
-	/**
-	 * Returns all pages in the Editor
-	 * 
-	 * @return Vector<AbstractActivityExplorerPage>
-	 */
-	@SuppressWarnings("unchecked")
-	public Vector<CommonActivityExplorerPage> getPages() {
-		Vector<CommonActivityExplorerPage> result = new Vector<CommonActivityExplorerPage>(pages.size());
-		for (Object obj : pages) {
-			if (obj instanceof CommonActivityExplorerPage) {
-				result.add((CommonActivityExplorerPage) obj);
-			}
-		}
-		return result;
-	}
-
-	/**
-	 * Remove all Pages contained in this editor.
-	 */
-	public void removeAllPages() {
-		/*
-		 * Removing first active page leads to reactivate (i.e, create the content if it wasn't) the next active one
-		 * The next will be deleted. For performance reasons we don't allow recreating page content
-		 * that will be deleted just after. see the behavior of the editor in org.eclipse.ui.forms.editor.FormEditor.pageChange(int) when the current page change:
-		 * That fixe bug: 487226
-		 */
-		backToActivePage = getActivePage();
-		int count = super.getPageCount();
-		for (int i = count - 1; i >= 0; i--) {
-			if (i != backToActivePage) {
-				this.removePage(i);
-			}
-		}
-		/*
-		 * As all page are removed before, the remaining is the first page
-		 * which it index is 0
-		 */
-		this.removePage(0);
-	}
-
-	/**
-	 * Create and Insert Contributed pages in the editor
-	 */
-	private void createContributedPages() throws PartInitException {
-		List<CommonActivityExplorerPage> contributedPages = ActivityExplorerExtensionManager.getAllPages();
-		Collections.sort(contributedPages);
-		addOverviewPage(contributedPages);
-		addContributedPages(contributedPages);
-	}
-
-	private void addContributedPages(List<CommonActivityExplorerPage> contributedPages) {
-		for (CommonActivityExplorerPage page : contributedPages) {
-			if ((page instanceof IVisibility) && !(page.getPosition() == 0)) {
-				try {
-					if (page.isVisible()) {
-						addNewPage(page);
-					}
-				} catch (Throwable e) {
-
-					StringBuilder loggerMessage = new StringBuilder(
-							"ActivityExplorerEditor.addContributedPages(..) _ "); //$NON-NLS-1$
-					loggerMessage
-							.append("An error was occured at the evaluation of the predicat or the adding of page ") //$NON-NLS-1$
-							.append(page.getId());
-					loggerMessage.append(". Refer to the exception stack for more details"); //$NON-NLS-1$
-
-					ActivityExplorerLoggerService.getInstance().log(IStatus.ERROR, loggerMessage.toString(), e);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Find a first visible overview page which it index is 0
-	 * 
-	 * @param contributedPages
-	 * @throws PartInitException
-	 */
-	private void addOverviewPage(List<CommonActivityExplorerPage> contributedPages) throws PartInitException {
-		OverviewActivityExplorerPage overviewPage = null;
-
-		for (CommonActivityExplorerPage page : contributedPages) {
-
-			try {
-				// Force to accept only overview page at the index 0.
-				if (page.getPosition() == 0) {
-
-					// bug 485652: check the visibility
-					if ((page instanceof OverviewActivityExplorerPage) && (page.isVisible())) {
-						overviewPage = (OverviewActivityExplorerPage) page;
-						break;
-					} else {
-						// Log visibile pages with index 0 which are not
-						// Overview pages
-						if (page.isVisible()) {
-							StringBuilder loggerMessage = new StringBuilder(
-									"ActivityExplorerEditor.addOverviewPage(..) _ "); //$NON-NLS-1$
-							loggerMessage.append("Page ").append(page.getId()); //$NON-NLS-1$
-							loggerMessage
-									.append(" is not an overview page. Only overview pages are allowed to index 0"); //$NON-NLS-1$
-
-							ActivityExplorerLoggerService.getInstance().log(IStatus.WARNING, loggerMessage.toString(),
-									null);
-						}
-					}
-				} else {
-					// Focus only on pages with index 0.
-					// The list is sorted, if the first page has an index
-					// different from 0, we stop.
-					break;
-				}
-			} catch (Throwable e) {
-				// Unknown errors from contributions
-				StringBuilder loggerMessage = new StringBuilder("ActivityExplorerEditor.addOverviewPage(..) _ "); //$NON-NLS-1$
-				loggerMessage.append("An error was occured at the evaluation of the predicat of page ") //$NON-NLS-1$
-						.append(page.getId());
-				loggerMessage.append(". Refer to the exception stack for more details"); //$NON-NLS-1$
-
-				ActivityExplorerLoggerService.getInstance().log(IStatus.ERROR, loggerMessage.toString(), e);
-			}
-		}
-
-		// Add the overview page
-		if (overviewPage != null) {
-			overviewPage.initialize(this);
-		} else {
-			// default page
-			overviewPage = new OverviewActivityExplorerPage(this);
-		}
-
-		addPage(overviewPage);
-	}
-
-	/**
-	 * Create a documentation page.
-	 * 
-	 * @return a not <code>null</code> instance.
-	 */
-	protected IFormPage createDocumentationPage() {
-		return new DocumentationActivityExplorerPage(this);
-	}
-
-	/**
-	 * Get or create the main Overview page
-	 * 
-	 * @return a not <code>null</code> instance.
-	 */
-	@Deprecated
-	protected OverviewActivityExplorerPage getOrCreateOverviewActivityExplorerPage() {
-		List<CommonActivityExplorerPage> contributedPages = ActivityExplorerExtensionManager.getAllPages();
-		Collections.sort(contributedPages);
-		if (!contributedPages.isEmpty()) {
-			CommonActivityExplorerPage page = contributedPages.get(0);
-			if ((page instanceof OverviewActivityExplorerPage) && (page.getPosition() == 0)) {
-				page.initialize(this);
-				return (OverviewActivityExplorerPage) page;
-			}
-		}
-		return new OverviewActivityExplorerPage(this);
-	}
-
-	/**
-	 * @see org.eclipse.ui.forms.editor.FormEditor#dispose()
-	 */
-	@Override
-	public void dispose() {
-		ActivityExplorerManager.INSTANCE.removeActivityExplorerEditorListener(this);
-
-		// Dispose the editor from part listener
-		if (null != _partListener) {
-			((ActivityExplorerEditorPartListener) _partListener).dispose();
-		}
-
-		// If the editor is not initialized yet, the editorSite may be null
-		// (i.e, at restarting time)
-		IEditorSite editorSite = getEditorSite();
-		if (editorSite != null) {
-			// Dispose the property sheet page.
-			if (null != _propertySheetPage) {
-				_propertySheetPage.dispose();
-				_propertySheetPage = null;
-			}
-			// Unregister Sirius session listener.
-			unregisterSession();
-			// Remove part listener.
-			if (null != _partListener) {
-				editorSite.getPage().removePartListener(_partListener);
-				_partListener = null;
-				// Remove preference listener
-				ActivityExplorerActivator.getDefault().getPreferenceStore().removePropertyChangeListener(this);
-
-				super.dispose();
-			}
-		}
-
-		if (null != getEditorInput()) {
-			getEditorInput().dispose();
-		}
-
-	}
-
-	/**
-	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	@Override
-  public void doSave(IProgressMonitor monitor) {
-    // Ignore. This method is not called because ActivityExplorerEditor implements ISaveablesSource.
-    // All saves will go through the ISaveablesSource / Saveable protocol.
-  }
-  
-	/**
-	 * @param obj
-	 * @return the bundle containing the object's class or the class's name if it's not contained in a bundle
-	 */
-  private String getBundleId(Object obj) {
-    Bundle bundle = FrameworkUtil.getBundle(obj.getClass());
-    if (bundle != null)
-    {
-      return bundle.getSymbolicName();
+    /**
+     * Hold active page at updating the editor
+     */
+    private int backToActivePage = 0;
+    
+    protected IFormPage messagePage;
+    
+    public ActivityExplorerEditor() {
+        ActivityExplorerManager.INSTANCE.setEditor(this);
+        ActivityExplorerManager.INSTANCE.addActivityExplorerEditorListener(this);
+        _partListener = new ActivityExplorerEditorPartListener(this);
     }
-    return obj.getClass().getCanonicalName();
-  }
 
-	/**
-	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
-	 */
-	@Override
-	public void doSaveAs() {
-		// Do nothing.
-	}
+    @Override
+    public void setFocus() {
+        super.setFocus();
+        getContainer().setFocus();
+        ActivityExplorerManager.INSTANCE.setEditor(this);
+    }
 
-	/**
-	 * {@inheritDoc}
-	 */
-	@SuppressWarnings("rawtypes")
-	@Override
-	public Object getAdapter(Class adapter) {
-		if (IPropertySheetPage.class.equals(adapter)) {
-			return getOrCreatePropertySheetPage();
-		}
-		return super.getAdapter(adapter);
-	}
+    /**
+     * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
+     */
+    @Override
+    protected void addPages() {
+        try {
 
-	public static final String PROPERTIES_CONTRIBUTOR = "org.eclipse.amalgam.explorer.activity.ui.editor.properties"; //$NON-NLS-1$
+            // set editor in the Activity Explorer Manager
+            ActivityExplorerManager.INSTANCE.setEditor(this);
 
-	/**
-	 * {@inheritDoc}
-	 */
-	public String getContributorId() {
-		return getSite().getId();// PROPERTIES_CONTRIBUTOR;
-	}
+            // Add other Pages (plug-ins contribution)
+            createContributedPages();
 
-	/**
-	 * @see org.eclipse.ui.part.EditorPart#getEditorInput()
-	 */
-	@Override
-	public ActivityExplorerEditorInput getEditorInput() {
-		return (ActivityExplorerEditorInput) super.getEditorInput();
-	}
+        } catch (PartInitException exception) {
+            StringBuilder loggerMessage = new StringBuilder("ActivityExplorerEditor.addPages(..) _ "); //$NON-NLS-1$
+            loggerMessage.append(exception.getMessage());
 
-	/**
-	 * Get or create (first call) the property sheet page.
-	 */
-	private IPropertySheetPage getOrCreatePropertySheetPage() {
-		if ((null == _propertySheetPage)) {
-			_propertySheetPage = new TabbedPropertySheetPage(this) {
-				/**
-				 * {@inheritDoc}
-				 */
-				@SuppressWarnings("synthetic-access")
-				@Override
-				public void dispose() {
-					super.dispose();
-					_propertySheetPage = null;
-				}
+            ActivityExplorerLoggerService.getInstance().log(IStatus.ERROR, loggerMessage.toString(), exception);
 
-				/**
-				 * {@inheritDoc}
-				 */
-				@Override
-				public void init(IPageSite pageSite) {
-					super.init(pageSite);
-					pageSite.setSelectionProvider(ActivityExplorerEditor.this.getEditorSite().getSelectionProvider());
-				}
-			};
-		}
-		return _propertySheetPage;
-	}
+        } catch (Exception exception) {
+            StringBuilder loggerMessage = new StringBuilder("ActivityExplorerEditor.addPages(..) _ "); //$NON-NLS-1$
+            loggerMessage.append(exception.getMessage());
 
-	/**
-	 * @see org.eclipse.ui.part.WorkbenchPart#getPartName()
-	 */
-	@Override
-	public String getPartName() {
-		return getEditorInput().getName();
-	}
+            ActivityExplorerLoggerService.getInstance().log(IStatus.WARNING, loggerMessage.toString(), exception);
+        }
 
-	/**
-	 * Get property sheet page accessor.
-	 * 
-	 * @return <code>null</code> if the property sheet view is not displayed.
-	 */
-	public TabbedPropertySheetPage getPropertySheetPage() {
-		return _propertySheetPage;
-	}
+        // Add a control listener to force reflow
+        getContainer().addControlListener(new ControlListener() {
+            public void controlMoved(ControlEvent cevent) {
+                // Do nothing.
+            }
 
-	/**
-	 * @see org.eclipse.ui.forms.editor.FormEditor#init(org.eclipse.ui.IEditorSite,
-	 *      org.eclipse.ui.IEditorInput)
-	 */
-	@Override
-	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+            public void controlResized(ControlEvent cevent) {
+                IFormPage activePageInstance = ActivityExplorerEditor.this.getActivePageInstance();
+                IManagedForm managedForm = activePageInstance.getManagedForm();
+                managedForm.reflow(true);
+            }
+        });
+        // Refresh dirty state when the part is activated : open time for
+        // instance.
+        getHeaderForm().dirtyStateChanged();
+        ActivityExplorerActivator.getDefault().getPreferenceStore().addPropertyChangeListener(this);
 
-		/*
-		 * TODO Delete
-		 *
-		IStatus status = ((ActivityExplorerEditorInput) input).getStatus();
-		if (!status.isOK()) {
-			throw new PartInitException(status);
-		}
-		*/
+        // because the pages is update later
+        pages.remove(null);
 
-		super.init(site, input);
+    }
 
-		getEditorSite().getPage().addPartListener(_partListener);
-
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public boolean isDirty() {
-	    Saveable[] saveables = getSaveables();
-        for (Saveable saveable : saveables) {
-            if (saveable.isDirty()) {
-                return true;
+    /**
+     * Returns all pages in the Editor
+     * 
+     * @return Vector<AbstractActivityExplorerPage>
+     */
+    public Vector<CommonActivityExplorerPage> getPages() {
+        Vector<CommonActivityExplorerPage> result = new Vector<CommonActivityExplorerPage>(pages.size());
+        for (Object obj : pages) {
+            if (obj instanceof CommonActivityExplorerPage) {
+                result.add((CommonActivityExplorerPage) obj);
             }
         }
+        return result;
+    }
+
+    /**
+     * Remove all Pages contained in this editor.
+     */
+    public void removeAllPages() {
+        /*
+     * Removing first active page leads to reactivate (i.e, create the content if it wasn't) the next active one
+     * The next will be deleted. For performance reasons we don't allow recreating page content
+     * that will be deleted just after. see the behavior of the editor in org.eclipse.ui.forms.editor.FormEditor.pageChange(int) when the current page change:
+     * That fixe bug: 487226
+         */
+        backToActivePage = getActivePage();
+        int count = super.getPageCount();
+        for (int i = count - 1; i >= 0; i--) {
+            if (i != backToActivePage) {
+                this.removePage(i);
+            }
+        }
+        /*
+     * As all page are removed before, the remaining is the first page
+     * which it index is 0
+         */
+        this.removePage(0);
+    }
+
+    /**
+     * Create and Insert Contributed pages in the editor
+     */
+    private void createContributedPages() throws PartInitException {
+        List<CommonActivityExplorerPage> contributedPages = ActivityExplorerExtensionManager.getAllPages();
+        Collections.sort(contributedPages);
+        addOverviewPage(contributedPages);
+        addContributedPages(contributedPages);
+    }
+
+    private void addContributedPages(List<CommonActivityExplorerPage> contributedPages) {
+        for (CommonActivityExplorerPage page : contributedPages) {
+            if ((page instanceof IVisibility) && page.getPosition() != 0) {
+                try {
+                    if (page.isVisible()) {
+                        addNewPage(page);
+                    }
+                } catch (Exception e) {
+
+          StringBuilder loggerMessage = new StringBuilder(
+              "ActivityExplorerEditor.addContributedPages(..) _ "); //$NON-NLS-1$
+          loggerMessage
+              .append("An error was occured at the evaluation of the predicat or the adding of page ") //$NON-NLS-1$
+                            .append(page.getId());
+                    loggerMessage.append(". Refer to the exception stack for more details"); //$NON-NLS-1$
+
+                    ActivityExplorerLoggerService.getInstance().log(IStatus.ERROR, loggerMessage.toString(), e);
+                }
+            }
+        }
+    }
+
+    /**
+     * Find a first visible overview page which it index is 0
+     * 
+     * @param contributedPages
+     * @throws PartInitException
+     */
+    private void addOverviewPage(List<CommonActivityExplorerPage> contributedPages) throws PartInitException {
+        OverviewActivityExplorerPage overviewPage = null;
+
+        for (CommonActivityExplorerPage page : contributedPages) {
+
+            try {
+                // Force to accept only overview page at the index 0.
+                if (page.getPosition() == 0) {
+
+                    // bug 485652: check the visibility
+                    if ((page instanceof OverviewActivityExplorerPage) && (page.isVisible())) {
+                        overviewPage = (OverviewActivityExplorerPage) page;
+                        break;
+                    } else {
+                        // Log visibile pages with index 0 which are not
+                        // Overview pages
+                        if (page.isVisible()) {
+              StringBuilder loggerMessage = new StringBuilder(
+                  "ActivityExplorerEditor.addOverviewPage(..) _ "); //$NON-NLS-1$
+                            loggerMessage.append("Page ").append(page.getId()); //$NON-NLS-1$
+              loggerMessage
+                  .append(" is not an overview page. Only overview pages are allowed to index 0"); //$NON-NLS-1$
+
+              ActivityExplorerLoggerService.getInstance().log(IStatus.WARNING, loggerMessage.toString(),
+                  null);
+                        }
+                    }
+                } else {
+                    // Focus only on pages with index 0.
+                    // The list is sorted, if the first page has an index
+                    // different from 0, we stop.
+                    break;
+                }
+            } catch (Exception e) {
+                // Unknown errors from contributions
+                StringBuilder loggerMessage = new StringBuilder("ActivityExplorerEditor.addOverviewPage(..) _ "); //$NON-NLS-1$
+                loggerMessage.append("An error was occured at the evaluation of the predicat of page ") //$NON-NLS-1$
+                        .append(page.getId());
+                loggerMessage.append(". Refer to the exception stack for more details"); //$NON-NLS-1$
+                ActivityExplorerLoggerService.getInstance().log(IStatus.ERROR, loggerMessage.toString(), e);
+            }
+        }
+        
+        if(overviewPage == null){
+          Session session = getEditorInput().getSession();
+          if(session != null){
+            overviewPage = new OverviewActivityExplorerPage(this);            
+          }else{
+            setMessagePage(createNullSessionPage());            
+          }
+        }
+        
+        // Initialize and add the overview page
+        if (overviewPage != null) {
+            overviewPage.initialize(this);
+            addPage(overviewPage);
+        }
+    }
+    
+    protected IFormPage createNullSessionPage() {
+      return new MessagePage(this, "Authentication failed!\nContent access has failed at session opening, you can try to open session.", "Message");
+    }
+    
+    protected IFormPage getMessagePage() {
+      return messagePage;
+    }
+    
+    protected void setMessagePage(IFormPage messagePage) {
+      if (!isDisposed()) {
+        // Remove old message page if present
+        if (this.messagePage != null) {
+          int pageIndex = this.messagePage.getIndex();
+          /*
+           * !! Important Note !! Before removing the page, get it's selectable user interface and set page
+           * control to null. The page control will not be disposed in MultiPageEditorPart#removePage(int).
+           */
+          if (pageIndex >= 0 && pageIndex < pages.size()) {
+            CTabItem item = ((CTabFolder) getContainer()).getItem(pageIndex);
+            if (item != null) {
+              item.setControl(null);
+            }
+          }
+          // Call remove page
+          removePage(pageIndex);
+        }
+
+        // Add new message page if not null
+        if (messagePage != null) {
+          try {
+            addPage(messagePage);
+            if (getActivePage() == -1) {
+              setActivePage(0);
+            }
+          } catch (PartInitException ex) {
+            ActivityExplorerLoggerService.getInstance().log(IStatus.ERROR, ex.getMessage(), ex);
+          }
+        }
+      }
+      this.messagePage = messagePage;
+    }
+    
+    protected synchronized void finishCreatePages() {
+      if (!isDisposed() && getMessagePage() != null) {
+        // Remove previously displayed message page
+        setMessagePage(null);
+
+        // Try to create actual pages
+        createPages();
+
+        // Activate first page if no other page is already active
+        if (getActivePage() == -1) {
+          setActivePage(0);
+        }
+      }
+
+    }
+    
+    protected boolean isDisposed() {
+      return pages == null;
+    }
+
+    /**
+     * Create a documentation page.
+     * 
+     * @return a not <code>null</code> instance.
+     */
+    protected IFormPage createDocumentationPage() {
+        return new DocumentationActivityExplorerPage(this);
+    }
+
+    /**
+     * Get or create the main Overview page
+     * 
+     * @return a not <code>null</code> instance.
+     */
+    @Deprecated
+    protected OverviewActivityExplorerPage getOrCreateOverviewActivityExplorerPage() {
+        List<CommonActivityExplorerPage> contributedPages = ActivityExplorerExtensionManager.getAllPages();
+        Collections.sort(contributedPages);
+        if (!contributedPages.isEmpty()) {
+            CommonActivityExplorerPage page = contributedPages.get(0);
+            if ((page instanceof OverviewActivityExplorerPage) && (page.getPosition() == 0)) {
+                page.initialize(this);
+                return (OverviewActivityExplorerPage) page;
+            }
+        }
+        return new OverviewActivityExplorerPage(this);
+    }
+
+    /**
+     * @see org.eclipse.ui.forms.editor.FormEditor#dispose()
+     */
+    @Override
+    public void dispose() {
+        ActivityExplorerManager.INSTANCE.removeActivityExplorerEditorListener(this);
+
+        // Dispose the editor from part listener
+        if (null != _partListener) {
+            ((ActivityExplorerEditorPartListener) _partListener).dispose();
+        }
+
+        // If the editor is not initialized yet, the editorSite may be null
+        // (i.e, at restarting time)
+        IEditorSite editorSite = getEditorSite();
+        if (editorSite != null) {
+            // Dispose the property sheet page.
+            if (null != _propertySheetPage) {
+                _propertySheetPage.dispose();
+                _propertySheetPage = null;
+            }
+            
+            // Remove part listener.
+            if (null != _partListener) {
+                editorSite.getPage().removePartListener(_partListener);
+                _partListener = null;
+                // Remove preference listener
+                ActivityExplorerActivator.getDefault().getPreferenceStore().removePropertyChangeListener(this);
+
+                super.dispose();
+            }
+        }
+
+        if (null != getEditorInput()) {
+            getEditorInput().dispose();
+        }
+    }
+
+    /**
+     * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
+     */
+    @Override
+    public void doSave(IProgressMonitor monitor) {
+      // Ignore. This method is not called because ActivityExplorerEditor implements ISaveablesSource.
+      // All saves will go through the ISaveablesSource / Saveable protocol.
+    }
+
+    /**
+     * @see org.eclipse.ui.part.EditorPart#doSaveAs()
+     */
+    @Override
+    public void doSaveAs() {
+        // Do nothing.
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @SuppressWarnings("rawtypes")
+    @Override
+    public Object getAdapter(Class adapter) {
+        if (IPropertySheetPage.class.equals(adapter)) {
+            return getOrCreatePropertySheetPage();
+        }
+        return super.getAdapter(adapter);
+    }
+
+    public static final String PROPERTIES_CONTRIBUTOR = "org.eclipse.amalgam.explorer.activity.ui.editor.properties"; //$NON-NLS-1$
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getContributorId() {
+        return getSite().getId();
+    }
+
+    /**
+     * @see org.eclipse.ui.part.EditorPart#getEditorInput()
+     */
+    @Override
+    public ActivityExplorerEditorInput getEditorInput() {
+        return (ActivityExplorerEditorInput) super.getEditorInput();
+    }
+
+    /**
+     * Get or create (first call) the property sheet page.
+     */
+    private IPropertySheetPage getOrCreatePropertySheetPage() {
+        if ((null == _propertySheetPage)) {
+            _propertySheetPage = new TabbedPropertySheetPage(this) {
+                /**
+                 * {@inheritDoc}
+                 */
+                @SuppressWarnings("synthetic-access")
+                @Override
+                public void dispose() {
+                    super.dispose();
+                    _propertySheetPage = null;
+                }
+
+                /**
+                 * {@inheritDoc}
+                 */
+                @Override
+                public void init(IPageSite pageSite) {
+                    super.init(pageSite);
+                    pageSite.setSelectionProvider(ActivityExplorerEditor.this.getEditorSite().getSelectionProvider());
+                }
+            };
+        }
+        return _propertySheetPage;
+    }
+
+    /**
+     * @see org.eclipse.ui.part.WorkbenchPart#getPartName()
+     */
+    @Override
+    public String getPartName() {
+        return getEditorInput().getName();
+    }
+
+    /**
+     * Get property sheet page accessor.
+     * 
+     * @return <code>null</code> if the property sheet view is not displayed.
+     */
+    public TabbedPropertySheetPage getPropertySheetPage() {
+        return _propertySheetPage;
+    }
+
+    /**
+   * @see org.eclipse.ui.forms.editor.FormEditor#init(org.eclipse.ui.IEditorSite,
+   *      org.eclipse.ui.IEditorInput)
+     */
+    @Override
+    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+        super.init(site, input);
+        getEditorSite().getPage().addPartListener(_partListener);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isDirty() {
+      Saveable[] saveables = getSaveables();
+    for (Saveable saveable : saveables) {
+      if (saveable.isDirty()) {
+        return true;
+      }
+    }
+    return false;
+    }
+
+    /**
+     * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
+     */
+    @Override
+    public boolean isSaveAsAllowed() {
+        // Not applicable in this editor.
         return false;
-	}
+    }
 
-	/**
-	 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
-	 */
-	@Override
-	public boolean isSaveAsAllowed() {
-		// Not applicable in this editor.
-		return false;
-	}
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public Image getTitleImage() {
+        ILabelDecorator decorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();
+        return decorator.decorateImage(super.getTitleImage(), getEditorInput().getSession());
+    }
 
-	/**
-	 * Unregister the session listener and set the session to <code>null</code>.
-	 */
-	private void unregisterSession() {
-		ActivityExplorerEditorInput editorInput = getEditorInput();
-		if (null != editorInput) {
-			Session session = editorInput.getSession();
-			if (null != session) {
-				session = null;
-			}
-		}
-	}
+    private int addNewPage(IFormPage page) {
+        int index = 0;
 
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	public Image getTitleImage() {
-		ILabelDecorator decorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();
-		Image decoratedImage = decorator.decorateImage(super.getTitleImage(), getEditorInput().getSession());
+        page.initialize(this);
 
-		return decoratedImage;
-	}
+        try {
+            index = addPage(page);
+        } catch (PartInitException e) {
+            StringBuilder loggerMessage = new StringBuilder("ActivityExplorerEditor.addNewPage(..) _ "); //$NON-NLS-1$
+            loggerMessage.append(e.getMessage());
 
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	protected void setTitleImage(Image titleImage) {
-		super.setTitleImage(titleImage);
-	}
+            ActivityExplorerLoggerService.getInstance().log(IStatus.ERROR, loggerMessage.toString(), e);
+        }
+        return index;
+    }
 
-	private int addNewPage(IFormPage page) {
-		int index = 0;
+    /**
+     * Get the previous page
+     * 
+     * @param current
+     * @return the previous page or null
+     */
+    public IFormPage getPreviousPage(IFormPage current) {
+        IFormPage previousPage = null;
+        int i = pages.indexOf(current);
+        if (i > -1) {
+            ListIterator<? extends Object> it = pages.listIterator(i);
+            if (it.hasPrevious()) {
+                Object prev = it.previous();
+                if (prev instanceof IFormPage) {
+                    previousPage = (IFormPage) prev;
+                }
+            }
+        }
+        return previousPage;
+    }
 
-		page.initialize(this);
+    /**
+     * Get the next page
+     * 
+     * @param current
+     * @return the next page or null
+     */
+    public IFormPage getNextPage(IFormPage current) {
+        IFormPage nextPage = null;
+        int i = pages.indexOf(current);
+        if (i > -1) {
+            ListIterator<Object> it = pages.listIterator(i + 1);
+            if (it.hasNext()) {
+                Object obj = it.next();
+                if (obj instanceof IFormPage) {
+                    nextPage = (IFormPage) obj;
+                }
+            }
 
-		try {
-			index = addPage(page);
-		} catch (PartInitException e) {
-			StringBuilder loggerMessage = new StringBuilder("ActivityExplorerEditor.addNewPage(..) _ "); //$NON-NLS-1$
-			loggerMessage.append(e.getMessage());
+        }
+        return nextPage;
+    }
 
-			ActivityExplorerLoggerService.getInstance().log(IStatus.ERROR, loggerMessage.toString(), e);
-		}
-		return index;
-	}
+    /**
+     * Update the editor Remove and Create pages
+     */
+    @Deprecated
+    public void updateEditorPages(int activatedPage) {
+        updateEditorPages();
+    }
 
-	/**
-	 * Get the previous page
-	 * 
-	 * @param current
-	 * @return the previous page or null
-	 */
-	@SuppressWarnings("unchecked")
-	public IFormPage getPreviousPage(IFormPage current) {
-		IFormPage previousPage = null;
-		int i = pages.indexOf(current);
-		if (i > -1) {
-			ListIterator<? extends Object> it = pages.listIterator(i);
-			if (it.hasPrevious()) {
-				Object prev = it.previous();
-				if (prev instanceof IFormPage) {
-					previousPage = (IFormPage) prev;
-				}
-			}
-		}
-		return previousPage;
-	}
+    protected void updateEditorPages() {
+        removeAllPages();
+        addPages();
+        if (backToActivePage > 0 && backToActivePage < this.getPageCount()) {
+            setActivePage(backToActivePage);
+        } else {
+            // Set active page if the backToActivePage is out of the range
+            setActivePage(0);
+        }
+        setPartName(getPartName());
+    }
 
-	/**
-	 * Get the next page
-	 * 
-	 * @param current
-	 * @return the next page or null
-	 */
-	@SuppressWarnings("unchecked")
-	public IFormPage getNextPage(IFormPage current) {
-		IFormPage nextPage = null;
-		int i = pages.indexOf(current);
-		if (i > -1) {
-			ListIterator<Object> it = pages.listIterator(i + 1);
-			if (it.hasNext()) {
-				Object obj = it.next();
-				if (obj instanceof IFormPage) {
-					nextPage = (IFormPage) obj;
-				}
-			}
+    /**
+     * Handle property change.<br>
+     * 
+     * @param event
+     * @param value
+     * @param property
+     * @return boolean
+     */
+    protected boolean doPropertyChange(PropertyChangeEvent event, boolean value, String property) {
+        boolean result = false;
+        if (ActivityExplorerExtensionManager.isPage(property)) {
+            this.updateEditorPages(0);
+            result = true;
+        }
+        return result;
+    }
 
-		}
-		return nextPage;
-	}
+    @Override
+    public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) {
+        String property = event.getProperty();
+        boolean value = (Boolean.valueOf(event.getNewValue().toString()));
+        if (doPropertyChange(event, value, property) && ActivityExplorerManager.INSTANCE.getEditor() != null) {
+          ActivityExplorerManager.INSTANCE.getEditor().getActivePageInstance().getManagedForm().reflow(true);
+        }
 
-	/**
-	 * Update the editor Remove and Create pages
-	 */
-	@Deprecated
-	public void updateEditorPages(int activatedPage) {
-		updateEditorPages();
-	}
-	
-	protected void updateEditorPages() {
-		removeAllPages();
-		addPages();
-		if (backToActivePage > 0 && backToActivePage < this.getPageCount()) {
-			setActivePage(backToActivePage);
-		} else {
-			//Set active page if the backToActivePage is out of the range
-			setActivePage(0);
-		}
-		setPartName(getPartName());
-	}
+    }
 
-	/**
-	 * Handle property change.<br>
-	 * 
-	 * @param event
-	 * @param value
-	 * @param property
-	 * @return boolean
-	 */
-	protected boolean doPropertyChange(PropertyChangeEvent event, boolean value, String property) {
-		boolean result = false;
-		if (ActivityExplorerExtensionManager.isPage(property)) {
-			this.updateEditorPages(0);
-			result = true;
-		}
-		return result;
-	}
+    @Override
+    public void executeRequest(int request, Session newSession) {
 
-	@Override
-	public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) {
-		String property = event.getProperty();
-		boolean value = (Boolean.valueOf(event.getNewValue().toString()));
-		if (doPropertyChange(event, value, property)) {
-			if (ActivityExplorerManager.INSTANCE.getEditor() != null) {
-				ActivityExplorerManager.INSTANCE.getEditor().getActivePageInstance().getManagedForm().reflow(true);
-			}
-		}
+        ActivityExplorerEditorInput editorInput = getEditorInput();
 
-	}
+        if (editorInput != null) {
+            Session session = editorInput.getSession();
+            switch (request) {
+            case SessionListener.CLOSING:
+                if (session != null && session.equals(newSession)) {
+                    Runnable runnable = new Runnable() {
+                        public void run() {
+                            close(false);
+              ActivityExplorerManager.INSTANCE
+                  .removeActivityExplorerEditorListener(ActivityExplorerEditor.this);
+                        }
+                    };
+                    run(runnable);
+                }
+                break;
+            case SessionListener.SELECTED_VIEWS_CHANGE_KIND:
+                if (session != null && session.equals(newSession) && newSession.isOpen()) {
+                    Runnable runnable = new Runnable() {
+                        public void run() {
+                            updateEditorPages();
+                        }
+                    };
+                    run(runnable);
+                }
+                break;
+            case SessionListener.REPRESENTATION_CHANGE:
+                if (session != null && session.equals(newSession) && newSession.isOpen()) {
+                    _editorDirtyStateChanged();
+                }
+                break;
+            case SessionListener.OPENED:
+                if(newSession != null && newSession.equals(session)){
+                  Runnable runnable = new Runnable() {
+                    public void run() {
+                      setPartName(getPartName());
+                      finishCreatePages();
+                    }
+                  };
+                  run(runnable);
+                }
+                break;
+            case SessionListener.DIRTY:
+            case SessionListener.SYNC:
+            case SessionListener.SEMANTIC_CHANGE: // Listening to changes to
+                                                  // mark
+                if (session != null && session.equals(newSession) && newSession.isOpen()) {
+                    _editorDirtyStateChanged();
+                }
+                break;
+            case SessionListener.REPLACED:
+                if (session != null && session.equals(newSession) && newSession.isOpen()) {
+                    _editorDirtyStateChanged();
+                }
+                break;
+            }
+        } else {
+            // Remove the editors with no editor input
+            ActivityExplorerManager.INSTANCE.removeActivityExplorerEditorListener(this);
+        }
+    }
 
-	@Override
-	public void executeRequest(int request, Session session) {
+    private void _editorDirtyStateChanged() {
+        Runnable runnable = new Runnable() {
+            public void run() {
+                IManagedForm headerForm = getHeaderForm();
+                if (headerForm != null)
+                    headerForm.dirtyStateChanged();
+            }
+        };
+        run(runnable);
+    }
 
-		ActivityExplorerEditorInput editorInput = getEditorInput();
-
-		if (editorInput != null) {
-			Session session2 = editorInput.getSession();
-			switch (request) {
-			case SessionListener.CLOSING:
-				if (session2 != null && session2.equals(session)) {
-					Runnable runnable = new Runnable() {
-						public void run() {
-							close(false);
-							ActivityExplorerManager.INSTANCE
-									.removeActivityExplorerEditorListener(ActivityExplorerEditor.this);
-						}
-					};
-					run(runnable);
-				}
-				break;
-			case SessionListener.SELECTED_VIEWS_CHANGE_KIND:
-				if (session2 != null && session2.equals(session) && session.isOpen()) {
-					Runnable runnable = new Runnable() {
-						public void run() {
-							updateEditorPages();
-						}
-					};
-					run(runnable);
-				}
-				break;
-			case SessionListener.REPRESENTATION_CHANGE:
-				if (session2 != null && session2.equals(session) && session.isOpen()) {
-					_editorDirtyStateChanged();
-				}
-				break;
-			case SessionListener.OPENED:
-				break;
-			case SessionListener.DIRTY:
-			case SessionListener.SYNC:
-			case SessionListener.SEMANTIC_CHANGE: // Listening to changes to
-													// mark
-				if (session2 != null && session2.equals(session) && session.isOpen()) {
-					_editorDirtyStateChanged();
-				}
-				break;
-			case SessionListener.REPLACED:
-				if (session2 != null && session2.equals(session) && session.isOpen()) {
-					_editorDirtyStateChanged();
-				}
-				break;
-			}
-		} else {
-			// Remove the editors with no editor input
-			ActivityExplorerManager.INSTANCE.removeActivityExplorerEditorListener(this);
-		}
-	}
-
-	private void _editorDirtyStateChanged() {
-		Runnable runnable = new Runnable() {
-			public void run() {
-				IManagedForm headerForm = getHeaderForm();
-				if (headerForm != null)
-					headerForm.dirtyStateChanged();
-			}
-		};
-		run(runnable);
-	}
-
-	protected void run(Runnable runnable) {
-		if (null != runnable) {
-			Display display = Display.getCurrent();
-			if (null == display) {
-				PlatformUI.getWorkbench().getDisplay().asyncExec(runnable);
-			} else {
-				runnable.run();
-			}
-		}
-	}
-	
+    protected void run(Runnable runnable) {
+        if (null != runnable) {
+            Display display = Display.getCurrent();
+            if (null == display) {
+                PlatformUI.getWorkbench().getDisplay().asyncExec(runnable);
+            } else {
+                runnable.run();
+            }
+        }
+    }
 
     /*
      * (non-Javadoc)
@@ -737,11 +758,10 @@
             IEditingSession uiSession = SessionUIManager.INSTANCE.getOrCreateUISession(session);
             if (uiSession instanceof ISaveablesSource) {
                 return (ISaveablesSource) uiSession;
-            } else {
+            }
                 // IEditingSession instance does not implement ISaveablesSource.
                 throw new ClassCastException(String.format(Messages.ActivityExplorerEditor_IEditingSessionRetrieval_ShouldAlsoImplementISaveablesSource, IEditingSession.class.getSimpleName(),
                         ISaveablesSource.class.getSimpleName()));
-            }
         }
         return null;
     }
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/input/ActivityExplorerEditorInput.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/input/ActivityExplorerEditorInput.java
index 2dd5519..eec8bcc 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/input/ActivityExplorerEditorInput.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/input/ActivityExplorerEditorInput.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2016 THALES GLOBAL SERVICES.
+ * Copyright (c)  2006, 2018 THALES GLOBAL SERVICES.
  * 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
@@ -122,6 +122,10 @@
 		EObject project = getRootSemanticElement();
 		if (null != project) {
 			result = EObjectLabelProviderHelper.getText(project);
+		}else if(getFile() != null){
+		  String fileExtension = getFile().getFileExtension();
+		  String fileName = getFile().getName();
+		  result = fileName.substring(0, fileName.indexOf(fileExtension)-1);
 		}
 		return result;
 	}
diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/MessagePage.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/MessagePage.java
new file mode 100644
index 0000000..a528c98
--- /dev/null
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/api/editor/pages/MessagePage.java
@@ -0,0 +1,75 @@
+/*******************************************************************************

+ * Copyright (c)  2006, 2018 THALES GLOBAL SERVICES.

+ * 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:

+ *    Thales - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.amalgam.explorer.activity.ui.api.editor.pages;

+

+import org.eclipse.swt.layout.GridData;

+import org.eclipse.swt.layout.GridLayout;

+import org.eclipse.swt.widgets.Composite;

+import org.eclipse.swt.widgets.Label;

+import org.eclipse.ui.forms.IManagedForm;

+import org.eclipse.ui.forms.editor.FormEditor;

+import org.eclipse.ui.forms.editor.FormPage;

+import org.eclipse.ui.forms.widgets.FormToolkit;

+

+public class MessagePage extends FormPage {

+  

+  private static final int FORM_BODY_MARGIN_HEIGHT = 0;

+  private static final int FORM_BODY_MARGIN_WIDTH = 0;

+  private static final int FORM_BODY_MARGIN_TOP = 12;

+  private static final int FORM_BODY_MARGIN_BOTTOM = 12;

+  private static final int FORM_BODY_MARGIN_LEFT = 6;

+  private static final int FORM_BODY_MARGIN_RIGHT = 6;

+  private static final int FORM_BODY_HORIZONTAL_SPACING = 20;

+  private static final int FORM_BODY_VERTICAL_SPACING = 17;

+

+  protected String message;

+

+  public MessagePage(FormEditor formEditor, String message) {

+    this(formEditor, message, ""); //$NON-NLS-1$ //$NON-NLS-2$

+  }

+  

+  public MessagePage(FormEditor formEditor, String message, String title) {

+    super(formEditor, "007", title); //$NON-NLS-1$ //$NON-NLS-2$

+    this.message = message;

+  }

+

+  @Override

+  protected void createFormContent(final IManagedForm managedForm) {

+    // Create single columned page layout

+    Composite body = managedForm.getForm().getBody();

+    body.setLayout(createFormBodyGridLayout(false, 1));

+

+    // Display message indicating that editor input is being loaded

+    FormToolkit toolkit = managedForm.getToolkit();

+    Label label = toolkit.createLabel(body, message);

+    label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

+  }

+  

+  private GridLayout createFormBodyGridLayout(boolean makeColumnsEqualWidth, int numColumns) {

+    GridLayout layout = new GridLayout();

+

+    layout.marginHeight = FORM_BODY_MARGIN_HEIGHT;

+    layout.marginWidth = FORM_BODY_MARGIN_WIDTH;

+

+    layout.marginTop = FORM_BODY_MARGIN_TOP;

+    layout.marginBottom = FORM_BODY_MARGIN_BOTTOM;

+    layout.marginLeft = FORM_BODY_MARGIN_LEFT;

+    layout.marginRight = FORM_BODY_MARGIN_RIGHT;

+

+    layout.horizontalSpacing = FORM_BODY_HORIZONTAL_SPACING;

+    layout.verticalSpacing = FORM_BODY_VERTICAL_SPACING;

+

+    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;

+    layout.numColumns = numColumns;

+

+    return layout;

+  }

+}

diff --git a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/internal/session/listeners/ActivityExplorerSessionListener.java b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/internal/session/listeners/ActivityExplorerSessionListener.java
index 6bdad18..6a8ddf7 100644
--- a/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/internal/session/listeners/ActivityExplorerSessionListener.java
+++ b/plugins/org.eclipse.amalgam.explorer.activity.ui/src/org/eclipse/amalgam/explorer/activity/ui/internal/session/listeners/ActivityExplorerSessionListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c)  2006, 2016 THALES GLOBAL SERVICES.
+ * Copyright (c)  2006, 2018 THALES GLOBAL SERVICES.
  * 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
@@ -10,11 +10,8 @@
  *******************************************************************************/
 package org.eclipse.amalgam.explorer.activity.ui.internal.session.listeners;
 
-import java.lang.ref.WeakReference;
-
 import org.eclipse.amalgam.explorer.activity.ui.api.manager.ActivityExplorerManager;
 import org.eclipse.sirius.business.api.session.Session;
-import org.eclipse.sirius.business.api.session.SessionListener;
 import org.eclipse.sirius.business.api.session.SessionManagerListener;
 import org.eclipse.sirius.viewpoint.description.Viewpoint;
 
@@ -24,54 +21,27 @@
 public class ActivityExplorerSessionListener implements SessionManagerListener {
 
 	@Override
-	public void notify(Session sessionp, int notification) {
-
-		WeakReference<Session> session = new WeakReference<Session>(sessionp);
-
-		switch (notification) {
-		case SessionListener.CLOSING:
-			ActivityExplorerManager.INSTANCE.dispatchEvent(notification, session.get());
-			break;
-		case SessionListener.SELECTED_VIEWS_CHANGE_KIND:
-			ActivityExplorerManager.INSTANCE.dispatchEvent(notification, session.get());
-			break;
-		case SessionListener.REPRESENTATION_CHANGE:
-			ActivityExplorerManager.INSTANCE.dispatchEvent(notification, session.get());
-			break;
-		case SessionListener.OPENED:
-			break;
-		case SessionListener.DIRTY:
-		case SessionListener.SYNC:
-		case SessionListener.SEMANTIC_CHANGE: // Listening to changes to mark
-			ActivityExplorerManager.INSTANCE.dispatchEvent(notification, session.get());
-			break;
-		case SessionListener.REPLACED:
-			ActivityExplorerManager.INSTANCE.dispatchEvent(notification, session.get());
-			break;
-		}
+	public void notify(Session session, int notification) {
+	  ActivityExplorerManager.INSTANCE.dispatchEvent(notification, session);
 	}
 
 	@Override
 	public void notifyAddSession(Session newSession) {
-		// TODO Auto-generated method stub
-
+		// Do Nothing
 	}
 
 	@Override
 	public void notifyRemoveSession(Session removedSession) {
-		// TODO Auto-generated method stub
-
+		// Do Nothing
 	}
 
 	@Override
 	public void viewpointSelected(Viewpoint selectedSirius) {
-		// TODO Auto-generated method stub
-
+		// Do Nothing
 	}
 
 	@Override
 	public void viewpointDeselected(Viewpoint deselectedSirius) {
-		// TODO Auto-generated method stub
-
+		// Do Nothing
 	}
 }