diff options
author | kmoore | 2007-07-19 15:08:01 +0000 |
---|---|---|
committer | kmoore | 2007-07-19 15:08:01 +0000 |
commit | 398a2ff209301bc006328eda3f7b88c69d66bc72 (patch) | |
tree | 7853ae5df1baa24b83bb0e6a4b7af67c83bf794d | |
parent | d1b5566b23879759a2f1583712e7b6d4c550233c (diff) | |
download | webtools.dali-398a2ff209301bc006328eda3f7b88c69d66bc72.tar.gz webtools.dali-398a2ff209301bc006328eda3f7b88c69d66bc72.tar.xz webtools.dali-398a2ff209301bc006328eda3f7b88c69d66bc72.zip |
moved attributeMappingUiProviders to IJpaPlatformUi
8 files changed, 206 insertions, 132 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentAttribute.java index 88bbd80811..a9c3a8e268 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentAttribute.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/IPersistentAttribute.java @@ -9,7 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.core.internal; -import java.util.Iterator; import org.eclipse.jpt.core.internal.jdtutility.Attribute; /** @@ -85,11 +84,6 @@ public interface IPersistentAttribute extends IJpaContentNode void setSpecifiedMappingKey(String key); /** - * Return all the attribute's mapping keys. - */ - Iterator<String> candidateMappingKeys(); - - /** * Return the attribute's Java attribute. */ Attribute getAttribute(); diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentAttribute.java index 073e2d83f1..977a741ac4 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentAttribute.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/java/JavaPersistentAttribute.java @@ -40,8 +40,6 @@ import org.eclipse.jpt.core.internal.jdtutility.Attribute; import org.eclipse.jpt.core.internal.jdtutility.DeclarationAnnotationAdapter; import org.eclipse.jpt.core.internal.platform.DefaultsContext; import org.eclipse.jpt.utility.internal.Filter; -import org.eclipse.jpt.utility.internal.iterators.ArrayIterator; -import org.eclipse.jpt.utility.internal.iterators.TransformationIterator; /** * <!-- begin-user-doc --> @@ -499,15 +497,6 @@ public class JavaPersistentAttribute extends JavaEObject throw new IllegalArgumentException("Unsupported attribute mapping key: " + attributeMappingKey); } - public Iterator<String> candidateMappingKeys() { - return new TransformationIterator<IJavaAttributeMappingProvider, String>(new ArrayIterator<IJavaAttributeMappingProvider>(this.attributeMappingProviders)) { - @Override - protected String transform(IJavaAttributeMappingProvider provider) { - return provider.key(); - } - }; - } - public Object getId() { return IJavaContentNodes.PERSISTENT_ATTRIBUTE_ID; } diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentAttribute.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentAttribute.java index b17c58319f..2bf4687338 100644 --- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentAttribute.java +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/XmlPersistentAttribute.java @@ -24,7 +24,6 @@ import org.eclipse.jpt.core.internal.XmlEObject; import org.eclipse.jpt.core.internal.content.java.JavaPersistentAttribute; import org.eclipse.jpt.core.internal.content.java.JavaPersistentType; import org.eclipse.jpt.core.internal.jdtutility.Attribute; -import org.eclipse.jpt.utility.internal.iterators.TransformationIterator; /** * <!-- begin-user-doc --> @@ -285,15 +284,6 @@ public class XmlPersistentAttribute extends XmlEObject return IXmlContentNodes.PERSISTENT_ATTRIBUTE_ID; } - public Iterator<String> candidateMappingKeys() { - return new TransformationIterator<IXmlAttributeMappingProvider, String>(this.attributeMappingProviders.iterator()) { - @Override - protected String transform(IXmlAttributeMappingProvider provider) { - return provider.key(); - } - }; - } - public Collection<IXmlAttributeMappingProvider> attributeMappingProviders() { return this.attributeMappingProviders; } @@ -315,7 +305,7 @@ public class XmlPersistentAttribute extends XmlEObject } public Attribute getAttribute() { - JavaPersistentType javaPersistentType = ((XmlPersistentType) typeMapping().getPersistentType()).findJavaPersistentType(); + JavaPersistentType javaPersistentType = typeMapping().getPersistentType().findJavaPersistentType(); if (javaPersistentType == null) { return null; } diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/BaseJpaPlatformUi.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/BaseJpaPlatformUi.java index ec679d6217..3bb3643f44 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/BaseJpaPlatformUi.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/BaseJpaPlatformUi.java @@ -17,12 +17,25 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jpt.core.internal.IJpaProject; import org.eclipse.jpt.ui.internal.details.IJpaDetailsProvider; import org.eclipse.jpt.ui.internal.generic.EntitiesGenerator; +import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider; import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider; import org.eclipse.jpt.ui.internal.java.details.JavaDetailsProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.BasicMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.DefaultBasicMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.DefaultEmbeddedMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddableUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedIdMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.EntityUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.IdMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToManyMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToOneMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.MappedSuperclassUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.NullTypeMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToManyMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToOneMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.TransientMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.VersionMappingUiProvider; import org.eclipse.jpt.ui.internal.java.structure.JavaStructureProvider; import org.eclipse.jpt.ui.internal.structure.IJpaStructureProvider; import org.eclipse.jpt.ui.internal.xml.details.XmlDetailsProvider; @@ -34,6 +47,8 @@ public abstract class BaseJpaPlatformUi implements IJpaPlatformUi private Collection<IJpaStructureProvider> structureProviders; private List<ITypeMappingUiProvider> javaTypeMappingUiProviders; + private List<IAttributeMappingUiProvider> javaAttributeMappingUiProviders; + private List<IAttributeMappingUiProvider> defaultJavaAttributeMappingUiProviders; protected BaseJpaPlatformUi() { super(); @@ -84,17 +99,63 @@ public abstract class BaseJpaPlatformUi implements IJpaPlatformUi } /** - * Override this to specify more or different structure providers. + * Override this to specify more or different type mapping ui providers * The default includes the JPA spec-defined entity, mapped superclass, embeddable, * and null (when the others don't apply) */ - protected void addJavaTypeMappingUiProvidersTo(Collection<ITypeMappingUiProvider> providers) { + protected void addJavaTypeMappingUiProvidersTo(List<ITypeMappingUiProvider> providers) { providers.add(NullTypeMappingUiProvider.instance()); providers.add(EntityUiProvider.instance()); providers.add(MappedSuperclassUiProvider.instance()); providers.add(EmbeddableUiProvider.instance()); } + public List<IAttributeMappingUiProvider> javaAttributeMappingUiProviders() { + if (this.javaAttributeMappingUiProviders == null) { + this.javaAttributeMappingUiProviders = new ArrayList<IAttributeMappingUiProvider>(); + this.addJavaAttributeMappingUiProvidersTo(this.javaAttributeMappingUiProviders); + } + return this.javaAttributeMappingUiProviders; + + } + + /** + * Override this to specify more or different java attribute mapping ui providers. + * The default includes the JPA spec-defined basic, embedded, embeddedId, id, + * manyToMany, manyToOne, oneToMany, transient, and version + */ + protected void addJavaAttributeMappingUiProvidersTo(List<IAttributeMappingUiProvider> providers) { + providers.add(BasicMappingUiProvider.instance()); + providers.add(EmbeddedMappingUiProvider.instance()); + providers.add(EmbeddedIdMappingUiProvider.instance()); + providers.add(IdMappingUiProvider.instance()); + providers.add(ManyToManyMappingUiProvider.instance()); + providers.add(ManyToOneMappingUiProvider.instance()); + providers.add(OneToManyMappingUiProvider.instance()); + providers.add(OneToOneMappingUiProvider.instance()); + providers.add(TransientMappingUiProvider.instance()); + providers.add(VersionMappingUiProvider.instance()); + } + + public List<IAttributeMappingUiProvider> defaultJavaAttributeMappingUiProviders() { + if (this.defaultJavaAttributeMappingUiProviders == null) { + this.defaultJavaAttributeMappingUiProviders = new ArrayList<IAttributeMappingUiProvider>(); + this.addDefaultJavaAttributeMappingUiProvidersTo(this.defaultJavaAttributeMappingUiProviders); + } + return this.defaultJavaAttributeMappingUiProviders; + + } + + /** + * Override this to specify more or different default java attribute mapping ui providers. + * The default includes the JPA spec-defined basic, embedded + */ + protected void addDefaultJavaAttributeMappingUiProvidersTo(List<IAttributeMappingUiProvider> providers) { + providers.add(DefaultBasicMappingUiProvider.instance()); + providers.add(DefaultEmbeddedMappingUiProvider.instance()); + } + + public void generateEntities(IJpaProject project, IStructuredSelection selection) { EntitiesGenerator.generate(project, selection); } diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaPlatformUi.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaPlatformUi.java index e0a39cebc0..c74dea5e73 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaPlatformUi.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/IJpaPlatformUi.java @@ -15,6 +15,7 @@ import java.util.List; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jpt.core.internal.IJpaProject; import org.eclipse.jpt.ui.internal.details.IJpaDetailsProvider; +import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider; import org.eclipse.jpt.ui.internal.java.details.ITypeMappingUiProvider; import org.eclipse.jpt.ui.internal.structure.IJpaStructureProvider; @@ -35,6 +36,19 @@ public interface IJpaPlatformUi */ List<ITypeMappingUiProvider> javaTypeMappingUiProviders(); + /** + * Return the attribute mapping UI providers for java. This will populate + * the attribute mapping combo box in order and display IAttributeMappingUiProvider.label(). + * It will also be used to create the appropriate composite given an attribute mapping. + */ + List<IAttributeMappingUiProvider> javaAttributeMappingUiProviders(); + + /** + * Return the default attribute mapping UI providers for java. These will be used + * to provide a default mapping option if one applies in java. + */ + List<IAttributeMappingUiProvider> defaultJavaAttributeMappingUiProviders(); + void generateDDL(IJpaProject project, IStructuredSelection selection); void generateEntities(IJpaProject project, IStructuredSelection selection); diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java index fb2a312eef..3da13f1301 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import org.eclipse.emf.common.command.BasicCommandStack; import org.eclipse.emf.common.notify.Adapter; @@ -33,14 +34,11 @@ import org.eclipse.jpt.core.internal.JpaCorePackage; import org.eclipse.jpt.ui.internal.JptUiMessages; import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.BasicMappingUiProvider; -import org.eclipse.jpt.ui.internal.java.mappings.properties.DefaultBasicMappingUiProvider; -import org.eclipse.jpt.ui.internal.java.mappings.properties.DefaultEmbeddedMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedIdMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.IdMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToManyMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToOneMappingUiProvider; -import org.eclipse.jpt.ui.internal.java.mappings.properties.NullAttributeMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToManyMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToOneMappingUiProvider; import org.eclipse.jpt.ui.internal.java.mappings.properties.TransientMappingUiProvider; @@ -59,7 +57,6 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage private IPersistentAttribute attribute; private IAttributeMapping attributeMapping; private Adapter persistentAttributeListener; - private Adapter attributeMappingListener; private String currentMappingKey; @@ -67,32 +64,14 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage private Map<String, IJpaComposite<IAttributeMapping>> mappingComposites; protected PageBook mappingPageBook; - private IJpaComposite<IAttributeMapping> currentMappingComposite; - - /** - * These IAtttributeMappingUiProviders will be used as elements in the attributeMapping combo - * The first element in the combo will be one of the defaultAttributemappingUiProviders or - * if none of those apply the nullAttriubteMappingUiProvider will be used. The rest of the elements - * will be the attributeMappingUiProviders. The defaultAttributeMappingUiProvider is - * determined by matching its key with the key of the current attriubteMapping. - */ - private Collection<IAttributeMappingUiProvider> attributeMappingUiProviders; - private Collection<IAttributeMappingUiProvider> defaultAttributeMappingUiProviders; - private IAttributeMappingUiProvider nullAttributeMappingUiProvider; + private IJpaComposite<IAttributeMapping> currentMappingComposite; public PersistentAttributeDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) { super(parent, SWT.NONE, new BasicCommandStack(), widgetFactory); persistentAttributeListener = buildAttributeListener(); - attributeMappingListener = buildAttributeMappingListener(); mappingComposites = new HashMap<String, IJpaComposite<IAttributeMapping>>(); - this.attributeMappingUiProviders = buildAttributeMappingUiProviders(); - this.defaultAttributeMappingUiProviders = buildDefaultAttributeMappingUiProviders(); - this.nullAttributeMappingUiProvider = buildNullAttributeMappingUiProvider(); } - protected IAttributeMappingUiProvider buildNullAttributeMappingUiProvider() { - return NullAttributeMappingUiProvider.instance(); - } protected Collection<IAttributeMappingUiProvider> buildAttributeMappingUiProviders() { Collection<IAttributeMappingUiProvider> providers = new ArrayList<IAttributeMappingUiProvider>(); @@ -109,38 +88,21 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage return providers; } - protected Collection<IAttributeMappingUiProvider> attributeMappingUiProviders() { - return this.attributeMappingUiProviders; - } - - protected Collection<IAttributeMappingUiProvider> buildDefaultAttributeMappingUiProviders() { - Collection<IAttributeMappingUiProvider> providers = new ArrayList<IAttributeMappingUiProvider>(); - providers.add(DefaultBasicMappingUiProvider.instance()); - providers.add(DefaultEmbeddedMappingUiProvider.instance()); - return providers; - } - - protected Collection<IAttributeMappingUiProvider> defaultAttributeMappingUiProviders() { - return this.defaultAttributeMappingUiProviders; - } + protected abstract List<IAttributeMappingUiProvider> attributeMappingUiProviders(); - private IAttributeMappingUiProvider attributeMappingUiProvider(String key) { + protected abstract List<IAttributeMappingUiProvider> defaultAttributeMappingUiProviders(); + + protected IAttributeMappingUiProvider attributeMappingUiProvider(String key) { for (IAttributeMappingUiProvider provider : attributeMappingUiProviders()) { if (provider.key() == key) { return provider; } } - return this.nullAttributeMappingUiProvider; - } - private IAttributeMappingUiProvider defaultAttributeMappingUiProvider(String key) { - for (IAttributeMappingUiProvider provider : defaultAttributeMappingUiProviders()) { - if (provider.key() == key) { - return provider; - } - } - return this.nullAttributeMappingUiProvider; + throw new IllegalArgumentException(); } + protected abstract IAttributeMappingUiProvider defaultAttributeMappingUiProvider(String key); + private Adapter buildAttributeListener() { return new AdapterImpl() { @Override @@ -150,7 +112,7 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage }; } - void persistentAttributeChanged(Notification notification) { + protected void persistentAttributeChanged(Notification notification) { switch (notification.getFeatureID(IPersistentAttribute.class)) { case JpaCorePackage.IPERSISTENT_ATTRIBUTE__MAPPING: Display.getDefault().asyncExec( @@ -162,28 +124,6 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage break; } } - - private Adapter buildAttributeMappingListener() { - return new AdapterImpl() { - @Override - public void notifyChanged(Notification notification) { - attributeMappingChanged(notification); - } - }; - } - - void attributeMappingChanged(Notification notification) { -// switch (notification.getFeatureID(IAttributeMapping.class)) { -// case JpaCorePackage.IATTRIBUTE_MAPPING__DEFAULT: -// Display.getDefault().asyncExec( -// new Runnable() { -// public void run() { -// populate(); -// } -// }); -// break; -// } - } protected Label buildMappingLabel(Composite parent) { return getWidgetFactory().createLabel(parent, JptUiMessages.PersistentAttributePage_mapAs); @@ -212,7 +152,7 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage if (inputElement == null) { return new Object[]{}; } - return uiProvidersFor((IPersistentAttribute) inputElement); + return attributeMappingUiProvidersFor((IPersistentAttribute) inputElement); } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { @@ -221,22 +161,8 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage }; } - protected IAttributeMappingUiProvider[] uiProvidersFor(IPersistentAttribute persistentAttribute) { - IAttributeMappingUiProvider[] providers = new IAttributeMappingUiProvider[attributeMappingUiProviders().size() +1]; - providers[0] = this.nullAttributeMappingUiProvider; - for (IAttributeMappingUiProvider uiProvider : defaultAttributeMappingUiProviders()) { - if (uiProvider.key() == persistentAttribute.defaultMappingKey()) { - providers[0] = uiProvider; - break; - } - } - int i = 1; - for (IAttributeMappingUiProvider uiProvider : attributeMappingUiProviders()) { - providers[i++] = uiProvider; - } - return providers; - } - + protected abstract IAttributeMappingUiProvider[] attributeMappingUiProvidersFor(IPersistentAttribute persistentAttribute); + private IBaseLabelProvider buildLabelProvider() { return new LabelProvider() { @Override @@ -285,9 +211,6 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage protected void engageListeners() { if (attribute != null) { attribute.eAdapters().add(persistentAttributeListener); - if (attributeMapping != null) { - attributeMapping.eAdapters().add(attributeMappingListener); - } } } @@ -295,9 +218,6 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage protected void disengageListeners() { if (attribute != null) { attribute.eAdapters().remove(persistentAttributeListener); - if (attributeMapping != null) { - attributeMapping.eAdapters().remove(attributeMappingListener); - } } } @@ -316,7 +236,7 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage return; } attributeMapping = attribute.getMapping(); - setComboData(attribute.candidateMappingKeys()); + setComboData(); populateMappingPage(attributeMapping == null ? null : attributeMapping.getKey()); } @@ -344,7 +264,7 @@ public abstract class PersistentAttributeDetailsPage extends BaseJpaDetailsPage currentMappingComposite.populate(attributeMapping); } - private void setComboData(Iterator<String> availableMappingKeys) { + private void setComboData() { if (attribute != mappingCombo.getInput()) { mappingCombo.setInput(attribute); } diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentAttributeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentAttributeDetailsPage.java index b249b9b1f9..59c2c7a5e3 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentAttributeDetailsPage.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPersistentAttributeDetailsPage.java @@ -9,7 +9,12 @@ ******************************************************************************/ package org.eclipse.jpt.ui.internal.java.details; +import java.util.List; +import org.eclipse.jpt.core.internal.IPersistentAttribute; +import org.eclipse.jpt.ui.internal.IJpaPlatformUi; +import org.eclipse.jpt.ui.internal.PlatformRegistry; import org.eclipse.jpt.ui.internal.details.PersistentAttributeDetailsPage; +import org.eclipse.jpt.ui.internal.java.mappings.properties.NullAttributeMappingUiProvider; import org.eclipse.jpt.ui.internal.widgets.CComboViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; @@ -25,6 +30,60 @@ public class JavaPersistentAttributeDetailsPage super(parent, widgetFactory); } + protected IJpaPlatformUi getJpaPlatformUi() { + String platformId = getAttribute().getJpaProject().getPlatform().getId(); + return PlatformRegistry.instance().getJpaPlatform(platformId); + } + + @Override + protected List<IAttributeMappingUiProvider> attributeMappingUiProviders() { + return getJpaPlatformUi().javaAttributeMappingUiProviders(); + } + + protected IAttributeMappingUiProvider nullAttributeMappingUiProvider() { + return NullAttributeMappingUiProvider.instance(); + } + + @Override + protected List<IAttributeMappingUiProvider> defaultAttributeMappingUiProviders() { + return getJpaPlatformUi().defaultJavaAttributeMappingUiProviders(); + } + + + /** + * These IAtttributeMappingUiProviders will be used as elements in the attributeMapping combo + * The first element in the combo will be one of the defaultAttributeMappingUiProviders or + * if none of those apply the nullAttributeMappingUiProvider will be used. The rest of the elements + * will be the attributeMappingUiProviders. The defaultAttributeMappingUiProvider is + * determined by matching its key with the key of the current attributeMapping. + */ + @Override + protected IAttributeMappingUiProvider[] attributeMappingUiProvidersFor(IPersistentAttribute persistentAttribute) { + IAttributeMappingUiProvider[] providers = new IAttributeMappingUiProvider[attributeMappingUiProviders().size() +1]; + providers[0] = this.nullAttributeMappingUiProvider(); + for (IAttributeMappingUiProvider uiProvider : defaultAttributeMappingUiProviders()) { + if (uiProvider.key() == persistentAttribute.defaultMappingKey()) { + providers[0] = uiProvider; + break; + } + } + int i = 1; + for (IAttributeMappingUiProvider uiProvider : attributeMappingUiProviders()) { + providers[i++] = uiProvider; + } + return providers; + } + + @Override + protected IAttributeMappingUiProvider defaultAttributeMappingUiProvider(String key) { + for (IAttributeMappingUiProvider provider : defaultAttributeMappingUiProviders()) { + if (provider.key() == key) { + return provider; + } + } + return this.nullAttributeMappingUiProvider(); + } + @Override protected void initializeLayout(Composite composite) { composite.setLayout(new GridLayout(2, false)); diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentAttributeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentAttributeDetailsPage.java index 7940f5503e..d2d9deb29a 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentAttributeDetailsPage.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/xml/details/XmlPersistentAttributeDetailsPage.java @@ -9,7 +9,10 @@ ******************************************************************************/ package org.eclipse.jpt.ui.internal.xml.details; +import java.util.ArrayList; +import java.util.Collections; import java.util.Iterator; +import java.util.List; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.impl.AdapterImpl; @@ -22,6 +25,16 @@ import org.eclipse.jpt.core.internal.content.orm.XmlPersistentAttribute; import org.eclipse.jpt.core.internal.content.orm.XmlPersistentType; import org.eclipse.jpt.ui.internal.details.PersistentAttributeDetailsPage; import org.eclipse.jpt.ui.internal.java.details.IAttributeMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.BasicMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedIdMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.EmbeddedMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.IdMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToManyMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.ManyToOneMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToManyMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.OneToOneMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.TransientMappingUiProvider; +import org.eclipse.jpt.ui.internal.java.mappings.properties.VersionMappingUiProvider; import org.eclipse.jpt.ui.internal.widgets.CComboViewer; import org.eclipse.jpt.utility.internal.iterators.ArrayIterator; import org.eclipse.swt.SWT; @@ -42,6 +55,8 @@ public class XmlPersistentAttributeDetailsPage private IPersistentType persistentType; + private List<IAttributeMappingUiProvider> attributeMappingUiProviders; + public XmlPersistentAttributeDetailsPage(Composite parent, TabbedPropertySheetWidgetFactory widgetFactory) { super(parent, widgetFactory); buildPersistentTypeListener(); @@ -67,8 +82,47 @@ public class XmlPersistentAttributeDetailsPage }); } } + + @Override + public List<IAttributeMappingUiProvider> attributeMappingUiProviders() { + if (this.attributeMappingUiProviders == null) { + this.attributeMappingUiProviders = new ArrayList<IAttributeMappingUiProvider>(); + this.addAttributeMappingUiProvidersTo(this.attributeMappingUiProviders); + } + return this.attributeMappingUiProviders; + + } + + protected void addAttributeMappingUiProvidersTo(List<IAttributeMappingUiProvider> providers) { + providers.add(BasicMappingUiProvider.instance()); + providers.add(EmbeddedMappingUiProvider.instance()); + providers.add(EmbeddedIdMappingUiProvider.instance()); + providers.add(IdMappingUiProvider.instance()); + providers.add(ManyToManyMappingUiProvider.instance()); + providers.add(ManyToOneMappingUiProvider.instance()); + providers.add(OneToManyMappingUiProvider.instance()); + providers.add(OneToOneMappingUiProvider.instance()); + providers.add(TransientMappingUiProvider.instance()); + providers.add(VersionMappingUiProvider.instance()); + } + + @Override + protected List<IAttributeMappingUiProvider> defaultAttributeMappingUiProviders() { + return Collections.emptyList(); + } @Override + protected IAttributeMappingUiProvider defaultAttributeMappingUiProvider(String key) { + throw new UnsupportedOperationException("Xml attributeMappings should not be default"); + } + + @Override + //bug 192035 - no default mapping option in xml + protected IAttributeMappingUiProvider[] attributeMappingUiProvidersFor(IPersistentAttribute persistentAttribute) { + return attributeMappingUiProviders().toArray(new IAttributeMappingUiProvider[attributeMappingUiProviders().size()]); + } + + @Override protected void initializeLayout(Composite composite) { composite.setLayout(new GridLayout(2, false)); @@ -163,11 +217,4 @@ public class XmlPersistentAttributeDetailsPage } } } - - @Override - //TODO Not really how I would want to implement this, but it is low risk fix for bug 192035 for 1.0RC3 - protected IAttributeMappingUiProvider[] uiProvidersFor(IPersistentAttribute persistentAttribute) { - return attributeMappingUiProviders().toArray(new IAttributeMappingUiProvider[attributeMappingUiProviders().size()]); - } - }
\ No newline at end of file |