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

import org.eclipse.jpt.ui.internal.selection.ISelectionManager;
import org.eclipse.jpt.ui.internal.selection.Selection;
import org.eclipse.jpt.ui.internal.selection.SelectionManagerFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;

public abstract class AbstractJpaView extends ViewPart 
{	
	protected PageBook pageBook;
	
	protected Composite defaultComposite;
	
	
	/**
	 * The string to display when there is no view content
	 */
	private String defaultLabel;
	
	private TabbedPropertySheetWidgetFactory widgetFactory;
	
	
	public AbstractJpaView(String aDefaultLabel) {
		super();
		defaultLabel = aDefaultLabel;
		this.widgetFactory = new TabbedPropertySheetWidgetFactory();
	}
	
	public final void createPartControl(Composite parent) {
		pageBook = new PageBook(parent, SWT.NONE);
		defaultComposite = buildDefaultComposite();
		pageBook.showPage(defaultComposite);
		
		subcreatePartControl(parent);
		
		ISelectionManager selectionManager = 
			SelectionManagerFactory.getSelectionManager(getViewSite().getWorkbenchWindow());
		selectionManager.register(this);
		select(selectionManager.getCurrentSelection());
	}
	
	protected void subcreatePartControl(Composite parent) {
		// no op - for subclasses to override if wished
	}
	
	private Composite buildDefaultComposite() {
		Composite composite = getWidgetFactory().createComposite(pageBook, SWT.NONE);
		composite.setLayout(new FillLayout(SWT.VERTICAL));
		getWidgetFactory().createLabel(composite, defaultLabel);
		return composite;
	}
	
	public abstract void select(Selection aSelection);
	
	protected void showDefaultPage() {
		pageBook.showPage(defaultComposite);
	}
	
	public void setFocus() {
		pageBook.setFocus();
	}
	
	public TabbedPropertySheetWidgetFactory getWidgetFactory() {
		return this.widgetFactory;
	}
}
