blob: 7942c16b0c61c6ebbb34334a810ea2b7a495a731 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2012 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.jpa.ui.internal.platform.base;
import java.util.Iterator;
import java.util.ListIterator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jpt.common.core.JptResourceType;
import org.eclipse.jpt.common.ui.WidgetFactory;
import org.eclipse.jpt.common.ui.internal.util.SWTUtil;
import org.eclipse.jpt.common.ui.jface.ItemTreeStateProviderFactoryProvider;
import org.eclipse.jpt.common.utility.internal.CollectionTools;
import org.eclipse.jpt.common.utility.model.value.PropertyValueModel;
import org.eclipse.jpt.jpa.core.JpaFile;
import org.eclipse.jpt.jpa.core.JpaProject;
import org.eclipse.jpt.jpa.core.JpaStructureNode;
import org.eclipse.jpt.jpa.core.context.AttributeMapping;
import org.eclipse.jpt.jpa.core.context.PersistentType;
import org.eclipse.jpt.jpa.core.context.ReadOnlyPersistentAttribute;
import org.eclipse.jpt.jpa.core.context.TypeMapping;
import org.eclipse.jpt.jpa.ui.JpaPlatformUi;
import org.eclipse.jpt.jpa.ui.JpaPlatformUiProvider;
import org.eclipse.jpt.jpa.ui.JptJpaUiPlugin;
import org.eclipse.jpt.jpa.ui.MappingResourceUiDefinition;
import org.eclipse.jpt.jpa.ui.ResourceUiDefinition;
import org.eclipse.jpt.jpa.ui.details.DefaultMappingUiDefinition;
import org.eclipse.jpt.jpa.ui.details.JpaComposite;
import org.eclipse.jpt.jpa.ui.details.JpaDetailsPageManager;
import org.eclipse.jpt.jpa.ui.details.JpaDetailsProvider;
import org.eclipse.jpt.jpa.ui.details.MappingUiDefinition;
import org.eclipse.jpt.jpa.ui.internal.wizards.conversion.java.JavaMetadataConversionWizard;
import org.eclipse.jpt.jpa.ui.internal.wizards.conversion.java.JavaMetadataConversionWizardPage;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
public abstract class AbstractJpaPlatformUi
implements JpaPlatformUi
{
private final ItemTreeStateProviderFactoryProvider navigatorFactoryProvider;
private final JpaPlatformUiProvider platformUiProvider;
protected AbstractJpaPlatformUi(
ItemTreeStateProviderFactoryProvider navigatorFactoryProvider,
JpaPlatformUiProvider platformUiProvider
) {
super();
if ((navigatorFactoryProvider == null) || (platformUiProvider == null)) {
throw new NullPointerException();
}
this.navigatorFactoryProvider = navigatorFactoryProvider;
this.platformUiProvider = platformUiProvider;
}
// ********** navigator provider **********
public ItemTreeStateProviderFactoryProvider getNavigatorFactoryProvider() {
return this.navigatorFactoryProvider;
}
// ********** structure view factory providers **********
public ItemTreeStateProviderFactoryProvider getStructureViewFactoryProvider(JpaFile jpaFile) {
JptResourceType resourceType = jpaFile.getResourceModel().getResourceType();
return (resourceType == null) ? null : this.getStructureViewFactoryProvider(resourceType);
}
protected ItemTreeStateProviderFactoryProvider getStructureViewFactoryProvider(JptResourceType resourceType) {
try {
return this.getResourceUiDefinition(resourceType).getStructureViewFactoryProvider();
} catch (IllegalArgumentException iae) {
JptJpaUiPlugin.log(iae);
return null;
}
}
// ********** details providers **********
public JpaDetailsPageManager<? extends JpaStructureNode> buildJpaDetailsPageManager(
Composite parent, JpaStructureNode structureNode, WidgetFactory widgetFactory) {
JpaDetailsProvider jpaDetailsProvider = getDetailsProvider(structureNode);
return jpaDetailsProvider == null ? null : jpaDetailsProvider.buildDetailsPageManager(parent, widgetFactory);
}
protected JpaDetailsProvider getDetailsProvider(JpaStructureNode structureNode) {
for (JpaDetailsProvider provider : CollectionTools.iterable(this.detailsProviders())) {
if (provider.providesDetails(structureNode)) {
return provider;
}
}
return null;//return null, some structure nodes do not have a details page
}
protected ListIterator<JpaDetailsProvider> detailsProviders() {
return this.platformUiProvider.detailsProviders();
}
// ********** mapping ui definitions **********
public JpaComposite buildTypeMappingComposite(
JptResourceType resourceType,
String mappingKey,
Composite parent,
PropertyValueModel<TypeMapping> mappingHolder,
WidgetFactory widgetFactory) {
return getMappingResourceUiDefinition(resourceType).buildTypeMappingComposite(
mappingKey, mappingHolder, parent, widgetFactory);
}
public JpaComposite buildAttributeMappingComposite(
JptResourceType resourceType,
String mappingKey,
Composite parent,
PropertyValueModel<AttributeMapping> mappingHolder,
WidgetFactory widgetFactory) {
return getMappingResourceUiDefinition(resourceType).buildAttributeMappingComposite(
mappingKey, mappingHolder, parent, widgetFactory);
}
public DefaultMappingUiDefinition<ReadOnlyPersistentAttribute, ? extends AttributeMapping> getDefaultAttributeMappingUiDefinition(JptResourceType resourceType, String mappingKey) {
return getMappingResourceUiDefinition(resourceType).getDefaultAttributeMappingUiDefinition(mappingKey);
}
public Iterator<MappingUiDefinition<ReadOnlyPersistentAttribute, ? extends AttributeMapping>> attributeMappingUiDefinitions(JptResourceType resourceType) {
return getMappingResourceUiDefinition(resourceType).attributeMappingUiDefinitions();
}
public DefaultMappingUiDefinition<PersistentType, ? extends TypeMapping> getDefaultTypeMappingUiDefinition(JptResourceType resourceType) {
return getMappingResourceUiDefinition(resourceType).getDefaultTypeMappingUiDefinition();
}
public Iterator<MappingUiDefinition<PersistentType, ? extends TypeMapping>> typeMappingUiDefinitions(JptResourceType resourceType) {
return getMappingResourceUiDefinition(resourceType).typeMappingUiDefinitions();
}
// ********** resource ui definitions **********
protected ListIterator<ResourceUiDefinition> resourceUiDefinitions() {
return this.platformUiProvider.resourceUiDefinitions();
}
public ResourceUiDefinition getResourceUiDefinition(JptResourceType resourceType) {
for (ResourceUiDefinition definition : CollectionTools.iterable(this.resourceUiDefinitions())) {
if (definition.providesUi(resourceType)) {
return definition;
}
}
// TODO (bug 313632) - return a null resource ui definition?
throw new IllegalArgumentException("No resource UI definition for the resource type: " + resourceType); //$NON-NLS-1$
}
public MappingResourceUiDefinition getMappingResourceUiDefinition(JptResourceType resourceType) {
ResourceUiDefinition def = this.getResourceUiDefinition(resourceType);
try {
return (MappingResourceUiDefinition) def;
} catch (ClassCastException cce) {
// TODO (bug 313632) - return a null resource ui definition?
throw new IllegalArgumentException("No mapping resource UI definition for the resource type: " + resourceType, cce); //$NON-NLS-1$
}
}
// ********** entity generation **********
public void generateEntities(JpaProject project, IStructuredSelection selection) {
EntitiesGenerator.generate(project, selection);
}
// ********** convenience methods **********
protected void displayMessage(String title, String message) {
MessageDialog.openInformation(SWTUtil.getShell(), title, message);
}
protected void openInDialog(JavaMetadataConversionWizardPage wizardPage) {
openInDialog(new JavaMetadataConversionWizard(wizardPage));
}
protected void openInDialog(IWizard wizard) {
new SizedWizardDialog(wizard).open();
}
// ********** wizard dialog **********
public class SizedWizardDialog
extends WizardDialog
{
private final int width;
private final int height;
public SizedWizardDialog(IWizard wizard) {
this(wizard, 520, 460);
}
public SizedWizardDialog(IWizard wizard, int width, int height) {
this(SWTUtil.getShell(), wizard, width, height);
}
public SizedWizardDialog(Shell shell, IWizard wizard, int width, int height) {
super(shell, wizard);
this.width = width;
this.height = height;
}
@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setSize(this.width, this.height);
SWTUtil.center(shell, this.getParentShell());
}
}
}