/*******************************************************************************
 * Copyright (c) 2012, 2015 Mia-Software.
 * 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:
 *     Nicolas Bros (Mia-Software)
 *     Grégoire Dupé (Mia-Software) - Bug 364325 - [Restructuring] The user must be able to navigate into a model using the Facet.
 *     Grégoire Dupé (Mia-Software) - Bug 474286 - ClassCastException in NavigationViewFactory.openNavigationView (36)
 *     Grégoire Dupé (Mia-Software) - Bug 480654 - IllegalStateException in NavigationView.addEObjects (611)
 *******************************************************************************/
package org.eclipse.modisco.facet.efacet.ui.internal.view;

import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.modisco.facet.efacet.ui.internal.Activator;
import org.eclipse.modisco.facet.efacet.ui.internal.exported.view.INavigationView;
import org.eclipse.modisco.facet.efacet.ui.internal.exported.view.INavigationViewFactory;
import org.eclipse.modisco.facet.efacet.ui.internal.sync.generated.SynchronizedNavigationView;
import org.eclipse.modisco.facet.util.core.Logger;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;

public class NavigationViewFactory implements INavigationViewFactory {

	public static final String VIEW_ID = "org.eclipse.modisco.facet.efacet.ui.view.navigation"; //$NON-NLS-1$

	/*
	 * FIXME gdupe> It would be better if that method would be able to throw an
	 * exception, rather than to "silently" log the problems.
	 */
	public INavigationView openNavigationView(final EditingDomain editingDomain) {
		INavigationView result = null;
		try {
			final IWorkbenchWindow window = PlatformUI.getWorkbench().getWorkbenchWindows()[0];
			if (window != null) {
				final IWorkbenchPage activePage = window.getActivePage();
				if (activePage != null) {
					final IViewPart view = activePage.showView(
							NavigationViewFactory.VIEW_ID);
					if (view instanceof INavigationView) {
						result = new SynchronizedNavigationView(
								(INavigationView) view,
								window.getShell().getDisplay());
					} else {
						final String message = String.format(
								"Something wrong happend when trying to open the EMF Facet navigation view. The view was expected to be of type %s but is of type %s", //$NON-NLS-1$
								INavigationView.class.getName(),
								view.getClass().getName()
							);
						Logger.logError(message, Activator.getDefault());
					}
				}
			}
		} catch (final PartInitException e) {
			Logger.logError(e, Activator.getDefault());
		}
		return result;
	}

}
