/*******************************************************************************
 * Copyright (c) 2006, 2007 Oracle. 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: Oracle. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jpt.ui.internal.selection;

import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.jpt.ui.internal.views.JpaDetailsView;
import org.eclipse.jpt.ui.internal.views.JpaStructureView;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.texteditor.ITextEditor;

public class SelectionParticipantFactory 
	implements IAdapterFactory
{
	/* @see IAdapterFactory#getAdapter(Object, Class) */
	public Object getAdapter(Object adaptableObject, Class adapterType) {
		if (! (adaptableObject instanceof IWorkbenchPart)) {
			return null;
		}
		
		ISelectionManager selectionManager = 
			SelectionManagerFactory.getSelectionManager(((IWorkbenchPart) adaptableObject).getSite().getWorkbenchWindow());
		// TODO - turn this into extension point
		if (adaptableObject instanceof ITextEditor) {
			return new TextEditorSelectionParticipant(
							selectionManager, (ITextEditor) adaptableObject);
		}
		else if (adaptableObject instanceof JpaStructureView) {
			return new JpaStructureSelectionParticipant(
							selectionManager, (JpaStructureView) adaptableObject);
		}
		else if (adaptableObject instanceof JpaDetailsView) {
			return new JpaDetailsSelectionParticipant(
							selectionManager, (JpaDetailsView) adaptableObject);
		}
		else {
			return null;
		}
	}
	
	/* @see IAdapterFactory#getAdapterList() */
	public Class[] getAdapterList() {
		return new Class[] { ISelectionParticipant.class };
	}
}
