Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkmoore2008-05-15 03:44:50 +0000
committerkmoore2008-05-15 03:44:50 +0000
commit4430c991a979645c0853ca34d9226676638c87ab (patch)
treeeab203e0ade69e65f6ef0dd049b9e580616070d7
parent595a7dfcbac5fc2bff37bbb3ef993f8cb94770b1 (diff)
downloadwebtools.dali-4430c991a979645c0853ca34d9226676638c87ab.tar.gz
webtools.dali-4430c991a979645c0853ca34d9226676638c87ab.tar.xz
webtools.dali-4430c991a979645c0853ca34d9226676638c87ab.zip
228571 - defaultPkJoinColumns for OrmEntity
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java1
-rw-r--r--jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java103
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties12
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaEntityComposite.java7
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaInheritanceComposite.java60
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPrimaryKeyJoinColumnsComposite.java90
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java12
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractEntityComposite.java4
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractInheritanceComposite.java560
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractPrimaryKeyJoinColumnsComposite.java (renamed from jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java)51
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmEntityComposite.java5
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmInheritanceComposite.java60
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmPrimaryKeyJoinColumnsComposite.java94
-rw-r--r--jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java124
14 files changed, 1120 insertions, 63 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java
index e31e2be756..6d9b7f0a84 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/context/orm/OrmEntity.java
@@ -88,6 +88,7 @@ public interface OrmEntity extends OrmTypeMapping, Entity, OrmGeneratorHolder
ListIterator<OrmPrimaryKeyJoinColumn> primaryKeyJoinColumns();
OrmPrimaryKeyJoinColumn getDefaultPrimaryKeyJoinColumn();
ListIterator<OrmPrimaryKeyJoinColumn> defaultPrimaryKeyJoinColumns();
+ String DEFAULT_PRIMARY_KEY_JOIN_COLUMNS_LIST = "defaultPrimaryKeyJoinColumnsList";
@SuppressWarnings("unchecked")
ListIterator<OrmPrimaryKeyJoinColumn> specifiedPrimaryKeyJoinColumns();
OrmPrimaryKeyJoinColumn addSpecifiedPrimaryKeyJoinColumn(int index);
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java
index 20a7442bb5..677288de4c 100644
--- a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java
+++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/context/orm/GenericOrmEntity.java
@@ -37,6 +37,7 @@ import org.eclipse.jpt.core.context.Table;
import org.eclipse.jpt.core.context.TypeMapping;
import org.eclipse.jpt.core.context.java.JavaEntity;
import org.eclipse.jpt.core.context.java.JavaPersistentType;
+import org.eclipse.jpt.core.context.java.JavaPrimaryKeyJoinColumn;
import org.eclipse.jpt.core.context.java.JavaSecondaryTable;
import org.eclipse.jpt.core.context.orm.OrmAssociationOverride;
import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
@@ -622,8 +623,15 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
}
public OrmPrimaryKeyJoinColumn getDefaultPrimaryKeyJoinColumn() {
- // TODO Auto-generated method stub
- return null;
+ throw new UnsupportedOperationException("use defaultPrimaryKeyJoinColumns() instead");
+ }
+
+ protected void addDefaultPrimaryKeyJoinColumn(OrmPrimaryKeyJoinColumn defaultPkJoinColumn) {
+ addItemToList(defaultPkJoinColumn, this.defaultPrimaryKeyJoinColumns, OrmEntity.DEFAULT_PRIMARY_KEY_JOIN_COLUMNS_LIST);
+ }
+
+ protected void removeDefaultPrimaryKeyJoinColumn(PrimaryKeyJoinColumn defaultPkJoinColumn) {
+ removeItemFromList(defaultPkJoinColumn, this.defaultPrimaryKeyJoinColumns, OrmEntity.DEFAULT_PRIMARY_KEY_JOIN_COLUMNS_LIST);
}
public ListIterator<OrmPrimaryKeyJoinColumn> primaryKeyJoinColumns() {
@@ -641,12 +649,22 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
public int specifiedPrimaryKeyJoinColumnsSize() {
return this.specifiedPrimaryKeyJoinColumns.size();
}
+
+ public boolean containsSpecifiedPrimaryKeyJoinColumns() {
+ return !this.specifiedPrimaryKeyJoinColumns.isEmpty();
+ }
public OrmPrimaryKeyJoinColumn addSpecifiedPrimaryKeyJoinColumn(int index) {
- OrmPrimaryKeyJoinColumn primaryKeyJoinColumn = getJpaFactory().buildOrmPrimaryKeyJoinColumn(this, createPrimaryKeyJoinColumnOwner());
+ if (!this.defaultPrimaryKeyJoinColumns.isEmpty()) {
+ this.defaultPrimaryKeyJoinColumns.clear();
+ }
+ XmlPrimaryKeyJoinColumn xmlPrimaryKeyJoinColumn = OrmFactory.eINSTANCE.createXmlPrimaryKeyJoinColumnImpl();
+ OrmPrimaryKeyJoinColumn primaryKeyJoinColumn = buildPrimaryKeyJoinColumn(xmlPrimaryKeyJoinColumn);
this.specifiedPrimaryKeyJoinColumns.add(index, primaryKeyJoinColumn);
- this.getTypeMappingResource().getPrimaryKeyJoinColumns().add(index, OrmFactory.eINSTANCE.createXmlPrimaryKeyJoinColumnImpl());
+ this.getTypeMappingResource().getPrimaryKeyJoinColumns().add(index, xmlPrimaryKeyJoinColumn);
+
this.fireItemAdded(Entity.SPECIFIED_PRIMARY_KEY_JOIN_COLUMNS_LIST, index, primaryKeyJoinColumn);
+ this.fireListCleared(OrmEntity.DEFAULT_PRIMARY_KEY_JOIN_COLUMNS_LIST);
return primaryKeyJoinColumn;
}
@@ -664,8 +682,17 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
public void removeSpecifiedPrimaryKeyJoinColumn(int index) {
OrmPrimaryKeyJoinColumn removedPrimaryKeyJoinColumn = this.specifiedPrimaryKeyJoinColumns.remove(index);
+ if (!containsSpecifiedPrimaryKeyJoinColumns()) {
+ //create the defaultJoinColumn now or this will happen during project update
+ //after removing the join column from the resource model. That causes problems
+ //in the UI because the change notifications end up in the wrong order.
+ initializeDefaultPrimaryKeyJoinColumns();
+ }
this.getTypeMappingResource().getPrimaryKeyJoinColumns().remove(index);
fireItemRemoved(Entity.SPECIFIED_PRIMARY_KEY_JOIN_COLUMNS_LIST, index, removedPrimaryKeyJoinColumn);
+ if (!this.defaultPrimaryKeyJoinColumns.isEmpty()) {
+ fireListChanged(OrmEntity.DEFAULT_PRIMARY_KEY_JOIN_COLUMNS_LIST);
+ }
}
protected void removeSpecifiedPrimaryKeyJoinColumn_(OrmPrimaryKeyJoinColumn primaryKeyJoinColumn) {
@@ -1104,6 +1131,7 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
this.initializeSequenceGenerator(entity);
this.initializeTableGenerator(entity);
this.initializeSpecifiedPrimaryKeyJoinColumns(entity);
+ this.initializeDefaultPrimaryKeyJoinColumns();
this.initializeSpecifiedAttributeOverrides(entity);
this.initializeSpecifiedAssociationOverrides(entity);
this.initializeNamedQueries(entity);
@@ -1142,6 +1170,26 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
}
}
+ protected void initializeDefaultPrimaryKeyJoinColumns() {
+ if (isMetadataComplete()) {
+ return;
+ }
+ if (getJavaEntity() == null) {
+ this.defaultPrimaryKeyJoinColumns.add(buildPrimaryKeyJoinColumn(null));
+ return;
+ }
+ if (specifiedPrimaryKeyJoinColumnsSize() > 0) {
+ return;
+ }
+ ListIterator<JavaPrimaryKeyJoinColumn> javaPkJoinColumns = getJavaEntity().primaryKeyJoinColumns();
+ while(javaPkJoinColumns.hasNext()) {
+ JavaPrimaryKeyJoinColumn javaPkJoinColumn = javaPkJoinColumns.next();
+ if (javaPkJoinColumn.getName() != null) {
+ this.defaultPrimaryKeyJoinColumns.add(buildVirtualPrimaryKeyJoinColumn(javaPkJoinColumn));
+ }
+ }
+ }
+
protected void initializeTableGenerator(XmlEntity entity) {
if (entity.getTableGenerator() != null) {
this.tableGenerator = buildTableGenerator(entity.getTableGenerator());
@@ -1168,7 +1216,7 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
protected void initializeSpecifiedPrimaryKeyJoinColumns(XmlEntity entity) {
for (XmlPrimaryKeyJoinColumn primaryKeyJoinColumn : entity.getPrimaryKeyJoinColumns()) {
- this.specifiedPrimaryKeyJoinColumns.add(createPrimaryKeyJoinColumn(primaryKeyJoinColumn));
+ this.specifiedPrimaryKeyJoinColumns.add(buildPrimaryKeyJoinColumn(primaryKeyJoinColumn));
}
}
@@ -1220,6 +1268,7 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
this.updateSequenceGenerator(entity);
this.updateTableGenerator(entity);
this.updateSpecifiedPrimaryKeyJoinColumns(entity);
+ this.updateDefaultPrimaryKeyJoinColumns();
this.updateSpecifiedAttributeOverrides(entity);
this.updateSpecifiedAssociationOverrides(entity);
this.updateNamedQueries(entity);
@@ -1375,11 +1424,51 @@ public class GenericOrmEntity extends AbstractOrmTypeMapping<XmlEntity> implemen
}
while (resourcePrimaryKeyJoinColumns.hasNext()) {
- addSpecifiedPrimaryKeyJoinColumn(specifiedPrimaryKeyJoinColumnsSize(), createPrimaryKeyJoinColumn(resourcePrimaryKeyJoinColumns.next()));
+ addSpecifiedPrimaryKeyJoinColumn(specifiedPrimaryKeyJoinColumnsSize(), buildPrimaryKeyJoinColumn(resourcePrimaryKeyJoinColumns.next()));
}
}
- protected OrmPrimaryKeyJoinColumn createPrimaryKeyJoinColumn(XmlPrimaryKeyJoinColumn primaryKeyJoinColumn) {
+ //if there are any specified pkJoinColumns, then no default pkJoinColumns
+ //if the java has specified pkJoinColumns, then those are the default pkJoinColumns
+ //otherwise, just 1 pkJoinColumn, defaults being null if multiple primaryKey columns
+ protected void updateDefaultPrimaryKeyJoinColumns() {
+ ListIterator<OrmPrimaryKeyJoinColumn> defaultPkJoinColumns = defaultPrimaryKeyJoinColumns();
+ ListIterator<JavaPrimaryKeyJoinColumn> javaPkJoinColumns = EmptyListIterator.instance();
+
+ if (getJavaEntity() != null && !isMetadataComplete() && specifiedPrimaryKeyJoinColumnsSize() == 0) {
+ javaPkJoinColumns = getJavaEntity().primaryKeyJoinColumns();
+ }
+ while (defaultPkJoinColumns.hasNext()) {
+ OrmPrimaryKeyJoinColumn defaultPkJoinColumn = defaultPkJoinColumns.next();
+ if (javaPkJoinColumns.hasNext()) {
+ JavaPrimaryKeyJoinColumn javaPkJoinColumn = javaPkJoinColumns.next();
+ defaultPkJoinColumn.update(new VirtualXmlPrimaryKeyJoinColumn(javaPkJoinColumn));
+ }
+ else {
+ if (defaultPrimaryKeyJoinColumnsSize() == 1) {
+ defaultPkJoinColumn.update(null);
+ }
+ else {
+ removeDefaultPrimaryKeyJoinColumn(defaultPkJoinColumn);
+ }
+ }
+ }
+
+ while (javaPkJoinColumns.hasNext()) {
+ JavaPrimaryKeyJoinColumn javaPkJoinColumn = javaPkJoinColumns.next();
+ addDefaultPrimaryKeyJoinColumn(buildVirtualPrimaryKeyJoinColumn(javaPkJoinColumn));
+ }
+
+ if (defaultPrimaryKeyJoinColumnsSize() == 0 && specifiedPrimaryKeyJoinColumnsSize() == 0) {
+ addDefaultPrimaryKeyJoinColumn(buildPrimaryKeyJoinColumn(null));
+ }
+ }
+
+ protected OrmPrimaryKeyJoinColumn buildVirtualPrimaryKeyJoinColumn(JavaPrimaryKeyJoinColumn javaSecondaryTable) {
+ return buildPrimaryKeyJoinColumn(new VirtualXmlPrimaryKeyJoinColumn(javaSecondaryTable));
+ }
+
+ protected OrmPrimaryKeyJoinColumn buildPrimaryKeyJoinColumn(XmlPrimaryKeyJoinColumn primaryKeyJoinColumn) {
OrmPrimaryKeyJoinColumn ormPrimaryKeyJoinColumn = getJpaFactory().buildOrmPrimaryKeyJoinColumn(this, createPrimaryKeyJoinColumnOwner());
ormPrimaryKeyJoinColumn.initialize(primaryKeyJoinColumn);
return ormPrimaryKeyJoinColumn;
diff --git a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties
index c5ff38a1b7..7703f370a5 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties
+++ b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties
@@ -180,16 +180,16 @@ OverridesComposite_attribute=Attribute Override
OverridesComposite_noName=<Name not set>
OverridesComposite_joinColumn=Join Columns
-InheritanceComposite_char=Character
+AbstractInheritanceComposite_char=Character
InheritanceComposite_detailsGroupBox=Details
InheritanceComposite_discriminatorColumnGroupBox=Discriminator Column
InheritanceComposite_discriminatorValue=Discriminator Value:
-InheritanceComposite_integer=Integer
-InheritanceComposite_joined=Joined
-InheritanceComposite_single_table=Single Table
+AbstractInheritanceComposite_integer=Integer
+AbstractInheritanceComposite_joined=Joined
+AbstractInheritanceComposite_single_table=Single Table
InheritanceComposite_strategy=Strategy:
-InheritanceComposite_string=String
-InheritanceComposite_table_per_class=Table Per Class
+AbstractInheritanceComposite_string=String
+AbstractInheritanceComposite_table_per_class=Table Per Class
DiscriminatorColumnComposite_defaultEmpty=Default(<provider-specific>)
DiscriminatorColumnComposite_discriminatorType=Type:
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaEntityComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaEntityComposite.java
index 4273139aec..5c237ca702 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaEntityComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaEntityComposite.java
@@ -18,7 +18,7 @@ import org.eclipse.swt.widgets.Composite;
/**
* The pane used for a Java entity.
*
- * @see OrmEntity
+ * @see JavaEntity
* @see BaseJpaUiFactory - The factory creating this pane
* @see JavaSecondaryTablesComposite
*
@@ -45,4 +45,9 @@ public class JavaEntityComposite extends AbstractEntityComposite<JavaEntity>
protected void buildSecondaryTablesComposite(Composite container) {
new JavaSecondaryTablesComposite(this, container);
}
+
+ @Override
+ protected void buildInheritanceComposite(Composite container) {
+ new JavaInheritanceComposite(this, container);
+ }
} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaInheritanceComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaInheritanceComposite.java
new file mode 100644
index 0000000000..db97167753
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaInheritanceComposite.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.java.details;
+
+import org.eclipse.jpt.core.context.java.JavaEntity;
+import org.eclipse.jpt.ui.WidgetFactory;
+import org.eclipse.jpt.ui.internal.mappings.details.AbstractInheritanceComposite;
+import org.eclipse.jpt.ui.internal.widgets.AbstractPane;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The pane used for java inheritance.
+ *
+ * @see JavaEntity
+ * @see JavaPrimaryKeyJoinColumnsComposite
+ *
+ * @version 2.0
+ * @since 1.0
+ */
+public class JavaInheritanceComposite extends AbstractInheritanceComposite<JavaEntity> {
+
+ /**
+ * Creates a new <code>JavaInheritanceComposite</code>.
+ *
+ * @param parentPane The parent container of this one
+ * @param parent The parent container
+ */
+ public JavaInheritanceComposite(AbstractPane<JavaEntity> parentPane,
+ Composite parent) {
+
+ super(parentPane, parent);
+ }
+
+ /**
+ * Creates a new <code>JavaInheritanceComposite</code>.
+ *
+ * @param subjectHolder The holder of the subject <code>JavaEntity</code>
+ * @param parent The parent container
+ * @param widgetFactory The factory used to create various common widgets
+ */
+ public JavaInheritanceComposite(PropertyValueModel<JavaEntity> subjectHolder,
+ Composite parent,
+ WidgetFactory widgetFactory) {
+
+ super(subjectHolder, parent, widgetFactory);
+ }
+
+ @Override
+ protected void buildPrimaryKeyJoinColumnsComposite(Composite container) {
+ new JavaPrimaryKeyJoinColumnsComposite(this, container);
+ }
+} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPrimaryKeyJoinColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPrimaryKeyJoinColumnsComposite.java
new file mode 100644
index 0000000000..374da4cb7c
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/details/JavaPrimaryKeyJoinColumnsComposite.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.java.details;
+
+import org.eclipse.jpt.core.context.Entity;
+import org.eclipse.jpt.core.context.PrimaryKeyJoinColumn;
+import org.eclipse.jpt.core.context.java.JavaEntity;
+import org.eclipse.jpt.ui.WidgetFactory;
+import org.eclipse.jpt.ui.internal.mappings.details.AbstractPrimaryKeyJoinColumnsComposite;
+import org.eclipse.jpt.ui.internal.widgets.AbstractPane;
+import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
+import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
+import org.eclipse.jpt.utility.model.value.ListValueModel;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @see JavaEntity
+ * @see JavaInheritanceComposite - The container of this pane
+ *
+ * @version 2.0
+ * @since 2.0
+ */
+public class JavaPrimaryKeyJoinColumnsComposite extends AbstractPrimaryKeyJoinColumnsComposite<JavaEntity>
+{
+
+ /**
+ * Creates a new <code>JavaPrimaryKeyJoinColumnsComposite</code>.
+ *
+ * @param parentPane The parent controller of this one
+ * @param parent The parent container
+ */
+ public JavaPrimaryKeyJoinColumnsComposite(AbstractPane<? extends JavaEntity> subjectHolder,
+ Composite parent) {
+
+ super(subjectHolder, parent);
+ }
+
+ /**
+ * Creates a new <code>JavaPrimaryKeyJoinColumnsComposite</code>.
+ *
+ * @param subjectHolder The holder of this pane's subject
+ * @param parent The parent container
+ * @param widgetFactory The factory used to create various common widgets
+ */
+ public JavaPrimaryKeyJoinColumnsComposite(PropertyValueModel<? extends JavaEntity> subjectHolder,
+ Composite parent,
+ WidgetFactory widgetFactory) {
+
+ super(subjectHolder, parent, widgetFactory);
+ }
+
+ @Override
+ protected ListValueModel<PrimaryKeyJoinColumn> buildDefaultJoinColumnsListHolder() {
+ return new PropertyListValueModelAdapter<PrimaryKeyJoinColumn>(buildDefaultJoinColumnHolder());
+ }
+
+ private PropertyValueModel<PrimaryKeyJoinColumn> buildDefaultJoinColumnHolder() {
+ return new PropertyAspectAdapter<Entity, PrimaryKeyJoinColumn>(getSubjectHolder(), Entity.DEFAULT_PRIMARY_KEY_JOIN_COLUMN) {
+ @Override
+ protected PrimaryKeyJoinColumn buildValue_() {
+ return subject.getDefaultPrimaryKeyJoinColumn();
+ }
+ };
+ }
+
+ @Override
+ protected void switchDefaultToSpecified() {
+ PrimaryKeyJoinColumn defaultJoinColumn = subject().getDefaultPrimaryKeyJoinColumn();
+
+ if (defaultJoinColumn != null) {
+ String columnName = defaultJoinColumn.getDefaultName();
+ String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName();
+
+ PrimaryKeyJoinColumn pkJoinColumn = subject().addSpecifiedPrimaryKeyJoinColumn(0);
+ pkJoinColumn.setSpecifiedName(columnName);
+ pkJoinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
+
+ this.joinColumnHolder.setValue(pkJoinColumn);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java
index effa14c99d..47c45aedf3 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java
@@ -91,16 +91,16 @@ public class JptUiMappingsMessages extends NLS {
public static String IdMappingComposite_primaryKeyGeneration;
public static String IdMappingComposite_sequenceGenerator;
public static String IdMappingComposite_tableGenerator;
- public static String InheritanceComposite_char;
+ public static String AbstractInheritanceComposite_char;
public static String InheritanceComposite_detailsGroupBox;
public static String InheritanceComposite_discriminatorColumnGroupBox;
public static String InheritanceComposite_discriminatorValue;
- public static String InheritanceComposite_integer;
- public static String InheritanceComposite_joined;
- public static String InheritanceComposite_single_table;
+ public static String AbstractInheritanceComposite_integer;
+ public static String AbstractInheritanceComposite_joined;
+ public static String AbstractInheritanceComposite_single_table;
public static String InheritanceComposite_strategy;
- public static String InheritanceComposite_string;
- public static String InheritanceComposite_table_per_class;
+ public static String AbstractInheritanceComposite_string;
+ public static String AbstractInheritanceComposite_table_per_class;
public static String InverseJoinColumnDialog_editInverseJoinColumnTitle;
public static String JoinColumnComposite_add;
public static String JoinColumnComposite_defaultEmpty;
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractEntityComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractEntityComposite.java
index 60c77374df..9bd2e633f0 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractEntityComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractEntityComposite.java
@@ -106,6 +106,8 @@ public abstract class AbstractEntityComposite<T extends Entity> extends Abstract
}
protected abstract void buildSecondaryTablesComposite(Composite container);
+
+ protected abstract void buildInheritanceComposite(Composite container);
private PropertyValueModel<Table> buildTableHolder() {
return new TransformationPropertyValueModel<Entity, Table>(getSubjectHolder()) {
@@ -167,7 +169,7 @@ public abstract class AbstractEntityComposite<T extends Entity> extends Abstract
JptUiMappingsMessages.EntityComposite_inheritance
);
- new InheritanceComposite(this, container);
+ buildInheritanceComposite(container);
}
@Override
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractInheritanceComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractInheritanceComposite.java
new file mode 100644
index 0000000000..3491751a5b
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractInheritanceComposite.java
@@ -0,0 +1,560 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 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.mappings.details;
+
+import java.util.Collection;
+import org.eclipse.jpt.core.context.DiscriminatorColumn;
+import org.eclipse.jpt.core.context.DiscriminatorType;
+import org.eclipse.jpt.core.context.Entity;
+import org.eclipse.jpt.core.context.InheritanceType;
+import org.eclipse.jpt.core.context.NamedColumn;
+import org.eclipse.jpt.db.Table;
+import org.eclipse.jpt.ui.WidgetFactory;
+import org.eclipse.jpt.ui.internal.JpaHelpContextIds;
+import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages;
+import org.eclipse.jpt.ui.internal.mappings.db.ColumnCombo;
+import org.eclipse.jpt.ui.internal.util.LabeledControlUpdater;
+import org.eclipse.jpt.ui.internal.util.LabeledLabel;
+import org.eclipse.jpt.ui.internal.widgets.AbstractPane;
+import org.eclipse.jpt.ui.internal.widgets.EnumFormComboViewer;
+import org.eclipse.jpt.utility.internal.StringConverter;
+import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
+import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
+import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
+import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel;
+import org.eclipse.jpt.utility.model.value.ListValueModel;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.jpt.utility.model.value.WritablePropertyValueModel;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Spinner;
+
+/**
+ * Here the layout of this pane:
+ * <pre>
+ * -----------------------------------------------------------------------------
+ * | ---------------------------------------------------- |
+ * | Strategy: | EnumComboViewer |v| |
+ * | ---------------------------------------------------- |
+ * | ---------------------------------------------------- |
+ * | Value: | I |v| |
+ * | ---------------------------------------------------- |
+ * | |
+ * | > Discriminator Column |
+ * | |
+ * | ---------------------------------------------------- |
+ * | Name: | ColumnCombo |v| |
+ * | ---------------------------------------------------- |
+ * | ---------------------------------------------------- |
+ * | Type: | EnumComboViewer |v| |
+ * | ---------------------------------------------------- |
+ * | ---------------------------------------------------- |
+ * | Column Definition: | I | |
+ * | ---------------------------------------------------- |
+ * | ------------- |
+ * | Length: | I |I| |
+ * | ------------- |
+ * | ------------------------------------------------------------------------- |
+ * | | | |
+ * | | PrimaryKeyJoinColumnsComposite | |
+ * | | | |
+ * | ------------------------------------------------------------------------- |
+ * -----------------------------------------------------------------------------</pre>
+ *
+ * @see Entity
+ * @see AbstractEntityComposite - The parent container
+ * @see ColumnCombo
+ * @see EnumComboViewer
+ * @see PrimaryKeyJoinColumnsComposite
+ *
+ * @version 2.0
+ * @since 2.0
+ */
+@SuppressWarnings("nls")
+public abstract class AbstractInheritanceComposite<T extends Entity> extends AbstractPane<T> {
+
+ /**
+ * A key used to represent the default value, this is required to convert
+ * the selected item from a combo to <code>null</code>. This key is most
+ * likely never typed the user and it will help to convert the value to
+ * <code>null</code> when it's time to set the new selected value into the
+ * model.
+ */
+ protected static String DEFAULT_KEY = "?!#!?#?#?default?#?!#?!#?";
+
+ /**
+ * Creates a new <code>InheritanceComposite</code>.
+ *
+ * @param parentPane The parent container of this one
+ * @param parent The parent container
+ */
+ public AbstractInheritanceComposite(AbstractPane<? extends T> parentPane,
+ Composite parent) {
+
+ super(parentPane, parent, false);
+ }
+
+ /**
+ * Creates a new <code>InheritanceComposite</code>.
+ *
+ * @param subjectHolder The holder of the subject <code>IEntity</code>
+ * @param parent The parent container
+ * @param widgetFactory The factory used to create various common widgets
+ */
+ public AbstractInheritanceComposite(PropertyValueModel<? extends T> subjectHolder,
+ Composite parent,
+ WidgetFactory widgetFactory) {
+
+ super(subjectHolder, parent, widgetFactory);
+ }
+
+ private WritablePropertyValueModel<String> buildColumnDefinitionHolder(PropertyValueModel<DiscriminatorColumn> discriminatorColumnHolder) {
+
+ return new PropertyAspectAdapter<DiscriminatorColumn, String>(discriminatorColumnHolder, DiscriminatorColumn.COLUMN_DEFINITION_PROPERTY) {
+ @Override
+ protected String buildValue_() {
+ return subject.getColumnDefinition();
+ }
+
+ @Override
+ protected void setValue_(String value) {
+ if (value.length() == 0) {
+ value = null;
+ }
+ subject.setColumnDefinition(value);
+ }
+ };
+ }
+
+ private ListValueModel<String> buildDefaultDiscriminatorListValueHolder() {
+ return new PropertyListValueModelAdapter<String>(
+ buildDefaultDiscriminatorValueHolder()
+ );
+ }
+
+ private WritablePropertyValueModel<String> buildDefaultDiscriminatorValueHolder() {
+ return new PropertyAspectAdapter<Entity, String>(getSubjectHolder(), Entity.DEFAULT_DISCRIMINATOR_VALUE_PROPERTY) {
+ @Override
+ protected String buildValue_() {
+ String name = subject.getDefaultDiscriminatorValue();
+
+ if (name == null) {
+ name = DEFAULT_KEY;
+ }
+ else {
+ name = DEFAULT_KEY + name;
+ }
+
+ return name;
+ }
+ };
+ }
+
+ private WritablePropertyValueModel<Integer> buildDefaultLengthHolder() {
+ return new PropertyAspectAdapter<DiscriminatorColumn, Integer>(buildDiscriminatorColumnHolder(), DiscriminatorColumn.DEFAULT_LENGTH_PROPERTY) {
+ @Override
+ protected Integer buildValue_() {
+ return subject.getDefaultLength();
+ }
+
+ @Override
+ protected void subjectChanged() {
+ Object oldValue = this.getValue();
+ super.subjectChanged();
+ Object newValue = this.getValue();
+
+ // Make sure the default value is appended to the text
+ if (oldValue == newValue && newValue == null) {
+ this.fireAspectChange(Integer.MIN_VALUE, newValue);
+ }
+ }
+ };
+ }
+
+ private Control buildDefaultLengthLabel(Composite container) {
+
+ Label label = buildLabel(
+ container,
+ JptUiMappingsMessages.DefaultWithoutValue
+ );
+
+ new LabeledControlUpdater(
+ new LabeledLabel(label),
+ buildDefaultLengthLabelHolder()
+ );
+
+ return label;
+ }
+
+ private PropertyValueModel<String> buildDefaultLengthLabelHolder() {
+
+ return new TransformationPropertyValueModel<Integer, String>(buildDefaultLengthHolder()) {
+
+ @Override
+ protected String transform(Integer value) {
+
+ Integer defaultValue = (subject() != null) ? subject().getDiscriminatorColumn().getDefaultLength() :
+ DiscriminatorColumn.DEFAULT_LENGTH;
+
+ return NLS.bind(
+ JptUiMappingsMessages.DefaultWithValue,
+ defaultValue
+ );
+ }
+ };
+ }
+
+ private ColumnCombo<DiscriminatorColumn> buildDiscriminatorColumnCombo(
+ Composite container,
+ PropertyValueModel<DiscriminatorColumn> discriminatorColumnHolder) {
+
+ return new ColumnCombo<DiscriminatorColumn>(
+ this,
+ discriminatorColumnHolder,
+ container)
+ {
+
+ @Override
+ protected void addPropertyNames(Collection<String> propertyNames) {
+ super.addPropertyNames(propertyNames);
+ propertyNames.add(NamedColumn.SPECIFIED_NAME_PROPERTY);
+ propertyNames.add(NamedColumn.DEFAULT_NAME_PROPERTY);
+ }
+
+ @Override
+ protected String defaultValue() {
+ return subject().getDefaultName();
+ }
+
+ @Override
+ protected void setValue(String value) {
+ subject().setSpecifiedName(value);
+ }
+
+ @Override
+ protected Table table() {
+ return subject().getDbTable();
+ }
+
+ @Override
+ protected String value() {
+ return subject().getSpecifiedName();
+ }
+ };
+ }
+
+ private PropertyValueModel<DiscriminatorColumn> buildDiscriminatorColumnHolder() {
+ return new TransformationPropertyValueModel<Entity, DiscriminatorColumn>(getSubjectHolder()) {
+ @Override
+ protected DiscriminatorColumn transform_(Entity value) {
+ return value.getDiscriminatorColumn();
+ }
+ };
+ }
+
+ private EnumFormComboViewer<DiscriminatorColumn, DiscriminatorType> buildDiscriminatorTypeCombo(
+ Composite container,
+ PropertyValueModel<DiscriminatorColumn> discriminatorColumnHolder) {
+
+ return new EnumFormComboViewer<DiscriminatorColumn, DiscriminatorType>(
+ this,
+ discriminatorColumnHolder,
+ container)
+ {
+ @Override
+ protected void addPropertyNames(Collection<String> propertyNames) {
+ super.addPropertyNames(propertyNames);
+ propertyNames.add(DiscriminatorColumn.DEFAULT_DISCRIMINATOR_TYPE_PROPERTY);
+ propertyNames.add(DiscriminatorColumn.SPECIFIED_DISCRIMINATOR_TYPE_PROPERTY);
+ }
+
+ @Override
+ protected DiscriminatorType[] choices() {
+ return DiscriminatorType.values();
+ }
+
+ @Override
+ protected DiscriminatorType defaultValue() {
+ return subject().getDefaultDiscriminatorType();
+ }
+
+ @Override
+ protected String displayString(DiscriminatorType value) {
+ return buildDisplayString(
+ JptUiMappingsMessages.class,
+ AbstractInheritanceComposite.class,
+ value
+ );
+ }
+
+ @Override
+ protected DiscriminatorType getValue() {
+ return subject().getSpecifiedDiscriminatorType();
+ }
+
+ @Override
+ protected void setValue(DiscriminatorType value) {
+ subject().setSpecifiedDiscriminatorType(value);
+ }
+ };
+ }
+
+ private StringConverter<String> buildDiscriminatorValueConverter() {
+ return new StringConverter<String>() {
+ public String convertToString(String value) {
+
+ if (subject() == null) {
+ return null;
+ }
+
+ if (value == null) {
+ value = subject().getDefaultDiscriminatorValue();
+
+ if (value != null) {
+ value = DEFAULT_KEY + value;
+ }
+ else {
+ value = DEFAULT_KEY;
+ }
+ }
+
+ if (value.startsWith(DEFAULT_KEY)) {
+ String defaultName = value.substring(DEFAULT_KEY.length());
+
+ if (defaultName.length() > 0) {
+ value = NLS.bind(
+ JptUiMappingsMessages.DefaultWithValue,
+ defaultName
+ );
+ }
+ else {
+ value = JptUiMappingsMessages.DefaultWithoutValue;
+ }
+ }
+
+ return value;
+ }
+ };
+ }
+
+ private WritablePropertyValueModel<String> buildDiscriminatorValueHolder() {
+ return new PropertyAspectAdapter<Entity, String>(getSubjectHolder(), Entity.SPECIFIED_DISCRIMINATOR_VALUE_PROPERTY) {
+ @Override
+ protected String buildValue_() {
+ return subject.getSpecifiedDiscriminatorValue();
+ }
+
+ @Override
+ protected void setValue_(String value) {
+
+ // Convert the default value or an empty string to null
+ if ((value != null) &&
+ ((value.length() == 0) || value.startsWith(DEFAULT_KEY))) {
+
+ value = null;
+ }
+
+ subject.setSpecifiedDiscriminatorValue(value);
+ }
+ };
+ }
+
+ private ListValueModel<String> buildDiscriminatorValueListHolder() {
+ return buildDefaultDiscriminatorListValueHolder();
+ }
+
+ private WritablePropertyValueModel<Integer> buildLengthHolder(PropertyValueModel<DiscriminatorColumn> discriminatorColumnHolder) {
+
+ return new PropertyAspectAdapter<DiscriminatorColumn, Integer>(discriminatorColumnHolder, DiscriminatorColumn.SPECIFIED_LENGTH_PROPERTY) {
+ @Override
+ protected Integer buildValue_() {
+ return subject.getSpecifiedLength();
+ }
+
+ @Override
+ protected void setValue_(Integer value) {
+ if (value == -1) {
+ value = null;
+ }
+ subject.setSpecifiedLength(value);
+ }
+ };
+ }
+
+ private EnumFormComboViewer<Entity, InheritanceType> buildStrategyCombo(Composite container) {
+
+ return new EnumFormComboViewer<Entity, InheritanceType>(this, container) {
+
+ @Override
+ protected void addPropertyNames(Collection<String> propertyNames) {
+ super.addPropertyNames(propertyNames);
+ propertyNames.add(Entity.DEFAULT_INHERITANCE_STRATEGY_PROPERTY);
+ propertyNames.add(Entity.SPECIFIED_INHERITANCE_STRATEGY_PROPERTY);
+ }
+
+ @Override
+ protected InheritanceType[] choices() {
+ return InheritanceType.values();
+ }
+
+ @Override
+ protected InheritanceType defaultValue() {
+ return subject().getDefaultInheritanceStrategy();
+ }
+
+ @Override
+ protected String displayString(InheritanceType value) {
+ return buildDisplayString(
+ JptUiMappingsMessages.class,
+ AbstractInheritanceComposite.class,
+ value
+ );
+ }
+
+ @Override
+ protected InheritanceType getValue() {
+ return subject().getSpecifiedInheritanceStrategy();
+ }
+
+ @Override
+ protected void setValue(InheritanceType value) {
+ subject().setSpecifiedInheritanceStrategy(value);
+ }
+ };
+ }
+
+ private void initializeDiscriminatorColumnPane(Composite container) {
+
+ PropertyValueModel<DiscriminatorColumn> discriminatorColumnHolder =
+ buildDiscriminatorColumnHolder();
+
+ // Name widgets
+ buildLabeledComposite(
+ container,
+ JptUiMappingsMessages.DiscriminatorColumnComposite_name,
+ buildDiscriminatorColumnCombo(container, discriminatorColumnHolder),
+ JpaHelpContextIds.ENTITY_INHERITANCE_DISCRIMINATOR_COLUMN
+ );
+
+ // Discriminator Type widgets
+ buildLabeledComposite(
+ container,
+ JptUiMappingsMessages.DiscriminatorColumnComposite_discriminatorType,
+ buildDiscriminatorTypeCombo(container, discriminatorColumnHolder),
+ JpaHelpContextIds.ENTITY_INHERITANCE_DISCRIMINATOR_TYPE
+ );
+
+ container = buildCollapsableSubSection(
+ buildSubPane(container, 10),
+ JptUiMappingsMessages.InheritanceComposite_detailsGroupBox,
+ new SimplePropertyValueModel<Boolean>(Boolean.FALSE)
+ );
+
+ // Length widgets
+ Spinner lengthSpinner = buildLabeledSpinner(
+ container,
+ JptUiMappingsMessages.ColumnComposite_length,
+ buildLengthHolder(discriminatorColumnHolder),
+ -1,
+ -1,
+ Integer.MAX_VALUE,
+ buildDefaultLengthLabel(container),
+ JpaHelpContextIds.MAPPING_COLUMN_LENGTH
+ );
+
+ updateGridData(container, lengthSpinner);
+
+ // Column Definition widgets
+ buildLabeledText(
+ container,
+ JptUiMappingsMessages.ColumnComposite_columnDefinition,
+ buildColumnDefinitionHolder(discriminatorColumnHolder)
+ );
+ }
+
+ /*
+ * (non-Javadoc)
+ */
+ @Override
+ protected void initializeLayout(Composite container) {
+
+ int groupBoxMargin = groupBoxMargin();
+
+ Composite subPane = buildSubPane(
+ container, 0, groupBoxMargin, 0, groupBoxMargin
+ );
+
+ // Strategy widgets
+ buildLabeledComposite(
+ subPane,
+ JptUiMappingsMessages.InheritanceComposite_strategy,
+ buildStrategyCombo(subPane),
+ JpaHelpContextIds.ENTITY_INHERITANCE_STRATEGY
+ );
+
+ // Discrinator Value widgets
+ CCombo discriminatorValueCombo = buildLabeledEditableCCombo(
+ subPane,
+ JptUiMappingsMessages.InheritanceComposite_discriminatorValue,
+ buildDiscriminatorValueListHolder(),
+ buildDiscriminatorValueHolder(),
+ buildDiscriminatorValueConverter(),
+ JpaHelpContextIds.ENTITY_INHERITANCE_DISCRIMINATOR_VALUE
+ );
+
+ // Discriminator Column sub-pane
+ Composite discriminatorColumnContainer = buildTitledPane(
+ buildSubPane(container, 10),
+ JptUiMappingsMessages.InheritanceComposite_discriminatorColumnGroupBox
+ );
+
+ initializeDiscriminatorColumnPane(discriminatorColumnContainer);
+
+ // Primary Key Join Columns widgets
+ buildPrimaryKeyJoinColumnsComposite(buildSubPane(container, 5));
+ }
+
+ protected abstract void buildPrimaryKeyJoinColumnsComposite(Composite container);
+
+ /**
+ * Changes the layout of the given container by changing which widget will
+ * grab the excess of horizontal space. By default, the center control grabs
+ * the excess space, we change it to be the right control.
+ *
+ * @param container The container containing the controls needing their
+ * <code>GridData</code> to be modified from the default values
+ * @param spinner The spinner that got created
+ */
+ private void updateGridData(Composite container, Spinner spinner) {
+
+ // It is possible the spinner's parent is not the container of the
+ // label, spinner and right control (a pane is sometimes required for
+ // painting the spinner's border)
+ Composite paneContainer = spinner.getParent();
+
+ while (container != paneContainer.getParent()) {
+ paneContainer = paneContainer.getParent();
+ }
+
+ Control[] controls = paneContainer.getChildren();
+
+ GridData gridData = new GridData();
+ gridData.grabExcessHorizontalSpace = false;
+ gridData.horizontalAlignment = GridData.BEGINNING;
+ controls[1].setLayoutData(gridData);
+
+ controls[2].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ removeAlignRight(controls[2]);
+ }
+} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractPrimaryKeyJoinColumnsComposite.java
index 782c8fcab8..cccea06381 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/PrimaryKeyJoinColumnsComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/AbstractPrimaryKeyJoinColumnsComposite.java
@@ -31,8 +31,6 @@ import org.eclipse.jpt.utility.internal.model.value.CompositeListValueModel;
import org.eclipse.jpt.utility.internal.model.value.ItemPropertyListValueModelAdapter;
import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
import org.eclipse.jpt.utility.internal.model.value.ListPropertyValueModelAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter;
-import org.eclipse.jpt.utility.internal.model.value.PropertyListValueModelAdapter;
import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel;
import org.eclipse.jpt.utility.internal.model.value.swing.ObjectListSelectionModel;
import org.eclipse.jpt.utility.model.value.ListValueModel;
@@ -64,9 +62,9 @@ import org.eclipse.swt.widgets.Group;
* @version 2.0
* @since 2.0
*/
-public class PrimaryKeyJoinColumnsComposite extends AbstractPane<Entity>
+public abstract class AbstractPrimaryKeyJoinColumnsComposite<T extends Entity> extends AbstractPane<T>
{
- private WritablePropertyValueModel<PrimaryKeyJoinColumn> joinColumnHolder;
+ protected WritablePropertyValueModel<PrimaryKeyJoinColumn> joinColumnHolder;
/**
* Creates a new <code>PrimaryKeyJoinColumnsComposite</code>.
@@ -74,7 +72,7 @@ public class PrimaryKeyJoinColumnsComposite extends AbstractPane<Entity>
* @param parentPane The parent controller of this one
* @param parent The parent container
*/
- public PrimaryKeyJoinColumnsComposite(AbstractPane<? extends Entity> subjectHolder,
+ public AbstractPrimaryKeyJoinColumnsComposite(AbstractPane<? extends T> subjectHolder,
Composite parent) {
super(subjectHolder, parent);
@@ -87,7 +85,7 @@ public class PrimaryKeyJoinColumnsComposite extends AbstractPane<Entity>
* @param parent The parent container
* @param widgetFactory The factory used to create various common widgets
*/
- public PrimaryKeyJoinColumnsComposite(PropertyValueModel<? extends Entity> subjectHolder,
+ public AbstractPrimaryKeyJoinColumnsComposite(PropertyValueModel<? extends T> subjectHolder,
Composite parent,
WidgetFactory widgetFactory) {
@@ -124,19 +122,7 @@ public class PrimaryKeyJoinColumnsComposite extends AbstractPane<Entity>
};
}
- private PropertyValueModel<PrimaryKeyJoinColumn> buildDefaultJoinColumnHolder() {
- return new PropertyAspectAdapter<Entity, PrimaryKeyJoinColumn>(getSubjectHolder(), Entity.DEFAULT_PRIMARY_KEY_JOIN_COLUMN) {
- @Override
- protected PrimaryKeyJoinColumn buildValue_() {
- return subject.getDefaultPrimaryKeyJoinColumn();
- }
- };
- }
-
- private ListValueModel<PrimaryKeyJoinColumn> buildDefaultJoinColumnListHolder() {
- return new PropertyListValueModelAdapter<PrimaryKeyJoinColumn>(buildDefaultJoinColumnHolder());
-
- }
+ protected abstract ListValueModel<? extends PrimaryKeyJoinColumn> buildDefaultJoinColumnsListHolder();
private PostExecution<PrimaryKeyJoinColumnDialog> buildEditPrimaryKeyJoinColumnPostExecution() {
return new PostExecution<PrimaryKeyJoinColumnDialog>() {
@@ -239,10 +225,10 @@ public class PrimaryKeyJoinColumnsComposite extends AbstractPane<Entity>
}
private ListValueModel<PrimaryKeyJoinColumn> buildPrimaryKeyJoinColumnsListHolder() {
- List<ListValueModel<PrimaryKeyJoinColumn>> list = new ArrayList<ListValueModel<PrimaryKeyJoinColumn>>();
+ List<ListValueModel<? extends PrimaryKeyJoinColumn>> list = new ArrayList<ListValueModel<? extends PrimaryKeyJoinColumn>>();
list.add(buildSpecifiedJoinColumnsListHolder());
- list.add(buildDefaultJoinColumnListHolder());
- return new CompositeListValueModel<ListValueModel<PrimaryKeyJoinColumn>, PrimaryKeyJoinColumn>(list);
+ list.add(buildDefaultJoinColumnsListHolder());
+ return new CompositeListValueModel<ListValueModel<? extends PrimaryKeyJoinColumn>, PrimaryKeyJoinColumn>(list);
}
private ListValueModel<PrimaryKeyJoinColumn> buildPrimaryKeyJoinColumnsListModel() {
@@ -344,29 +330,16 @@ public class PrimaryKeyJoinColumnsComposite extends AbstractPane<Entity>
setPopulating(true);
try {
- Entity subject = subject();
-
// Add a join column by creating a specified one using the default
// one if it exists
if (selected) {
- PrimaryKeyJoinColumn defaultJoinColumn = subject.getDefaultPrimaryKeyJoinColumn();
-
- if (defaultJoinColumn != null) {
- String columnName = defaultJoinColumn.getDefaultName();
- String referencedColumnName = defaultJoinColumn.getDefaultReferencedColumnName();
-
- PrimaryKeyJoinColumn pkJoinColumn = subject.addSpecifiedPrimaryKeyJoinColumn(0);
- pkJoinColumn.setSpecifiedName(columnName);
- pkJoinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
-
- joinColumnHolder.setValue(pkJoinColumn);
- }
+ switchDefaultToSpecified();
}
// Remove all the specified join columns
else {
- for (int index = subject.specifiedPrimaryKeyJoinColumnsSize(); --index >= 0; ) {
- subject.removeSpecifiedPrimaryKeyJoinColumn(index);
+ for (int index = subject().specifiedPrimaryKeyJoinColumnsSize(); --index >= 0; ) {
+ subject().removeSpecifiedPrimaryKeyJoinColumn(index);
}
}
}
@@ -375,6 +348,8 @@ public class PrimaryKeyJoinColumnsComposite extends AbstractPane<Entity>
}
}
+ protected abstract void switchDefaultToSpecified();
+
private class OverrideDefaultJoinColumnHolder extends ListPropertyValueModelAdapter<Boolean>
implements WritablePropertyValueModel<Boolean> {
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmEntityComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmEntityComposite.java
index d9eb606d0b..804df18739 100644
--- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmEntityComposite.java
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmEntityComposite.java
@@ -45,4 +45,9 @@ public class OrmEntityComposite extends AbstractEntityComposite<OrmEntity>
protected void buildSecondaryTablesComposite(Composite container) {
new OrmSecondaryTablesComposite(this, container);
}
+
+ @Override
+ protected void buildInheritanceComposite(Composite container) {
+ new OrmInheritanceComposite(this, container);
+ }
} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmInheritanceComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmInheritanceComposite.java
new file mode 100644
index 0000000000..b3abfae99c
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmInheritanceComposite.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.orm.details;
+
+import org.eclipse.jpt.core.context.orm.OrmEntity;
+import org.eclipse.jpt.ui.WidgetFactory;
+import org.eclipse.jpt.ui.internal.mappings.details.AbstractInheritanceComposite;
+import org.eclipse.jpt.ui.internal.widgets.AbstractPane;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The pane used for java inheritance.
+ *
+ * @see OrmEntity
+ * @see OrmPrimaryKeyJoinColumnsComposite
+ *
+ * @version 2.0
+ * @since 1.0
+ */
+public class OrmInheritanceComposite extends AbstractInheritanceComposite<OrmEntity> {
+
+ /**
+ * Creates a new <code>OrmInheritanceComposite</code>.
+ *
+ * @param parentPane The parent container of this one
+ * @param parent The parent container
+ */
+ public OrmInheritanceComposite(AbstractPane<OrmEntity> parentPane,
+ Composite parent) {
+
+ super(parentPane, parent);
+ }
+
+ /**
+ * Creates a new <code>OrmInheritanceComposite</code>.
+ *
+ * @param subjectHolder The holder of the subject <code>OrmEntity</code>
+ * @param parent The parent container
+ * @param widgetFactory The factory used to create various common widgets
+ */
+ public OrmInheritanceComposite(PropertyValueModel<OrmEntity> subjectHolder,
+ Composite parent,
+ WidgetFactory widgetFactory) {
+
+ super(subjectHolder, parent, widgetFactory);
+ }
+
+ @Override
+ protected void buildPrimaryKeyJoinColumnsComposite(Composite container) {
+ new OrmPrimaryKeyJoinColumnsComposite(this, container);
+ }
+} \ No newline at end of file
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmPrimaryKeyJoinColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmPrimaryKeyJoinColumnsComposite.java
new file mode 100644
index 0000000000..0be48c2f38
--- /dev/null
+++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmPrimaryKeyJoinColumnsComposite.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2008 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.orm.details;
+
+import java.util.ListIterator;
+import org.eclipse.jpt.core.context.PrimaryKeyJoinColumn;
+import org.eclipse.jpt.core.context.orm.OrmEntity;
+import org.eclipse.jpt.core.context.orm.OrmPrimaryKeyJoinColumn;
+import org.eclipse.jpt.ui.WidgetFactory;
+import org.eclipse.jpt.ui.internal.mappings.details.AbstractPrimaryKeyJoinColumnsComposite;
+import org.eclipse.jpt.ui.internal.widgets.AbstractPane;
+import org.eclipse.jpt.utility.internal.model.value.ListAspectAdapter;
+import org.eclipse.jpt.utility.model.value.ListValueModel;
+import org.eclipse.jpt.utility.model.value.PropertyValueModel;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @see OrmEntity
+ * @see OrmInheritanceComposite - The container of this pane
+ *
+ * @version 2.0
+ * @since 2.0
+ */
+public class OrmPrimaryKeyJoinColumnsComposite extends AbstractPrimaryKeyJoinColumnsComposite<OrmEntity>
+{
+
+ /**
+ * Creates a new <code>OrmPrimaryKeyJoinColumnsComposite</code>.
+ *
+ * @param parentPane The parent controller of this one
+ * @param parent The parent container
+ */
+ public OrmPrimaryKeyJoinColumnsComposite(AbstractPane<? extends OrmEntity> subjectHolder,
+ Composite parent) {
+
+ super(subjectHolder, parent);
+ }
+
+ /**
+ * Creates a new <code>OrmPrimaryKeyJoinColumnsComposite</code>.
+ *
+ * @param subjectHolder The holder of this pane's subject
+ * @param parent The parent container
+ * @param widgetFactory The factory used to create various common widgets
+ */
+ public OrmPrimaryKeyJoinColumnsComposite(PropertyValueModel<? extends OrmEntity> subjectHolder,
+ Composite parent,
+ WidgetFactory widgetFactory) {
+
+ super(subjectHolder, parent, widgetFactory);
+ }
+
+ @Override
+ protected ListValueModel<OrmPrimaryKeyJoinColumn> buildDefaultJoinColumnsListHolder() {
+ return new ListAspectAdapter<OrmEntity, OrmPrimaryKeyJoinColumn>(
+ getSubjectHolder(),
+ OrmEntity.DEFAULT_PRIMARY_KEY_JOIN_COLUMNS_LIST)
+ {
+ @Override
+ protected ListIterator<OrmPrimaryKeyJoinColumn> listIterator_() {
+ return subject.defaultPrimaryKeyJoinColumns();
+ }
+//TODO defaultPrimaryKeyJoinColumnsSize when I can change the API
+// @Override
+// protected int size_() {
+// return subject.defaultPrimaryKeyJoinColumnsSize();
+// }
+ };
+ }
+
+ @Override
+ protected void switchDefaultToSpecified() {
+ ListIterator<OrmPrimaryKeyJoinColumn> defaultJoinColumns = subject().defaultPrimaryKeyJoinColumns();
+
+ int index = 0;
+ while (defaultJoinColumns.hasNext()) {
+ OrmPrimaryKeyJoinColumn defaultJoinColumn = defaultJoinColumns.next();
+ String columnName = defaultJoinColumn.getName();
+ String referencedColumnName = defaultJoinColumn.getReferencedColumnName();
+
+ PrimaryKeyJoinColumn pkJoinColumn = subject().addSpecifiedPrimaryKeyJoinColumn(index++);
+ pkJoinColumn.setSpecifiedName(columnName);
+ pkJoinColumn.setSpecifiedReferencedColumnName(referencedColumnName);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java
index 04452a8f36..2b1ac74822 100644
--- a/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java
+++ b/jpa/tests/org.eclipse.jpt.core.tests/src/org/eclipse/jpt/core/tests/internal/context/orm/OrmEntityTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007 Oracle.
+ * Copyright (c) 2007, 2008 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
@@ -18,6 +18,7 @@ import org.eclipse.jpt.core.MappingKeys;
import org.eclipse.jpt.core.context.AccessType;
import org.eclipse.jpt.core.context.InheritanceType;
import org.eclipse.jpt.core.context.java.JavaEntity;
+import org.eclipse.jpt.core.context.java.JavaPrimaryKeyJoinColumn;
import org.eclipse.jpt.core.context.java.JavaSecondaryTable;
import org.eclipse.jpt.core.context.orm.OrmAssociationOverride;
import org.eclipse.jpt.core.context.orm.OrmAttributeOverride;
@@ -44,6 +45,10 @@ import org.eclipse.jpt.utility.internal.iterators.ArrayIterator;
public class OrmEntityTests extends ContextModelTestCase
{
+
+ protected static final String CHILD_TYPE_NAME = "AnnotationTestTypeChild";
+ protected static final String FULLY_QUALIFIED_CHILD_TYPE_NAME = PACKAGE_NAME + "." + CHILD_TYPE_NAME;
+
public OrmEntityTests(String name) {
super(name);
}
@@ -134,14 +139,25 @@ public class OrmEntityTests extends ContextModelTestCase
sb.append(CR);
sb.append("@Entity");
sb.append(CR);
- sb.append("public class ").append("AnnotationTestTypeChild").append(" ");
- sb.append("extends " + TYPE_NAME + " ");
+ sb.append("public class ").append(CHILD_TYPE_NAME).append(" ");
+ sb.append("extends ").append(TYPE_NAME).append(" ");
+ sb.append("{}").append(CR);
+ }
+ };
+ return this.javaProject.createType(PACKAGE_NAME, "AnnotationTestTypeChild.java", sourceWriter);
+ }
+
+ private IType createTestSubTypeUnmapped() throws Exception {
+ SourceWriter sourceWriter = new SourceWriter() {
+ public void appendSourceTo(StringBuilder sb) {
+ sb.append(CR);
+ sb.append("public class ").append(CHILD_TYPE_NAME).append(" ");
+ sb.append("extends ").append(TYPE_NAME).append(" ");
sb.append("{}").append(CR);
}
};
return this.javaProject.createType(PACKAGE_NAME, "AnnotationTestTypeChild.java", sourceWriter);
}
-
private IType createTestMappedSuperclass() throws Exception {
createMappedSuperclassAnnotation();
@@ -1344,6 +1360,106 @@ public class OrmEntityTests extends ContextModelTestCase
assertFalse(ormEntity.specifiedPrimaryKeyJoinColumns().hasNext());
}
+ public void testDefaultPrimaryKeyJoinColumns() throws Exception {
+ createTestType();
+ createTestSubTypeUnmapped();
+
+ OrmPersistentType persistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+ OrmPersistentType childPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_CHILD_TYPE_NAME);
+ childPersistentType.getJavaPersistentType().setMappingKey(MappingKeys.NULL_TYPE_MAPPING_KEY);
+
+ persistentType.getAttributeNamed("id").makeSpecified(MappingKeys.ID_ATTRIBUTE_MAPPING_KEY);
+
+ ((OrmEntity) persistentType.getMapping()).setSpecifiedInheritanceStrategy(InheritanceType.JOINED);
+
+ OrmEntity childEntity = (OrmEntity) childPersistentType.getMapping();
+
+ assertTrue(childEntity.defaultPrimaryKeyJoinColumns().hasNext());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultName());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultReferencedColumnName());
+
+ childPersistentType.getJavaPersistentType().setMappingKey(MappingKeys.ENTITY_TYPE_MAPPING_KEY);
+ persistentType.getJavaPersistentType().setMappingKey(MappingKeys.ENTITY_TYPE_MAPPING_KEY);
+
+ assertTrue(childEntity.defaultPrimaryKeyJoinColumns().hasNext());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultName());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultReferencedColumnName());
+
+ OrmPrimaryKeyJoinColumn specifiedPkJoinColumn = childEntity.addSpecifiedPrimaryKeyJoinColumn(0);
+ specifiedPkJoinColumn.setSpecifiedName("FOO");
+ specifiedPkJoinColumn.setSpecifiedReferencedColumnName("BAR");
+
+ assertFalse(childEntity.defaultPrimaryKeyJoinColumns().hasNext());
+
+ //remove the pkJoinColumn from the context mode, verify context model has a default pkJoinColumn
+ childEntity.removeSpecifiedPrimaryKeyJoinColumn(0);
+ assertTrue(childEntity.defaultPrimaryKeyJoinColumns().hasNext());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultName());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultReferencedColumnName());
+
+
+ childPersistentType.getJavaPersistentType().setMappingKey(MappingKeys.NULL_TYPE_MAPPING_KEY);
+ persistentType.getJavaPersistentType().setMappingKey(MappingKeys.NULL_TYPE_MAPPING_KEY);
+
+ specifiedPkJoinColumn = childEntity.addSpecifiedPrimaryKeyJoinColumn(0);
+ specifiedPkJoinColumn.setSpecifiedName("FOO");
+ specifiedPkJoinColumn.setSpecifiedReferencedColumnName("BAR");
+ assertFalse(childEntity.defaultPrimaryKeyJoinColumns().hasNext());
+ //now remove the pkJoinColumn from the resource model, verify context model updates and has a default pkJoinColumn
+ ((XmlEntity)childEntity.getTypeMappingResource()).getPrimaryKeyJoinColumns().remove(0);
+ assertTrue(childEntity.defaultPrimaryKeyJoinColumns().hasNext());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultName());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultReferencedColumnName());
+ }
+
+ public void testDefaultPrimaryKeyJoinColumnsFromJava() throws Exception {
+ createTestEntityFieldAccess();
+ createTestSubType();
+
+ OrmPersistentType persistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
+ OrmPersistentType childPersistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_CHILD_TYPE_NAME);
+
+
+ ((JavaEntity) persistentType.getJavaPersistentType().getMapping()).setSpecifiedInheritanceStrategy(InheritanceType.JOINED);
+
+ OrmEntity childEntity = (OrmEntity) childPersistentType.getMapping();
+
+ assertTrue(childEntity.defaultPrimaryKeyJoinColumns().hasNext());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultName());
+ assertEquals("id", childEntity.defaultPrimaryKeyJoinColumns().next().getDefaultReferencedColumnName());
+
+ JavaEntity javaEntity = (JavaEntity) childPersistentType.getJavaPersistentType().getMapping();
+ JavaPrimaryKeyJoinColumn javaPrimaryKeyJoinColumn = javaEntity.addSpecifiedPrimaryKeyJoinColumn(0);
+ javaPrimaryKeyJoinColumn.setSpecifiedName("FOO");
+ javaPrimaryKeyJoinColumn.setSpecifiedReferencedColumnName("BAR");
+
+ JavaPrimaryKeyJoinColumn javaPrimaryKeyJoinColumn2 = javaEntity.addSpecifiedPrimaryKeyJoinColumn(1);
+ javaPrimaryKeyJoinColumn2.setSpecifiedName("FOO2");
+ javaPrimaryKeyJoinColumn2.setSpecifiedReferencedColumnName("BAR2");
+
+ childPersistentType.getJavaPersistentType().setMappingKey(MappingKeys.ENTITY_TYPE_MAPPING_KEY);
+ persistentType.getJavaPersistentType().setMappingKey(MappingKeys.ENTITY_TYPE_MAPPING_KEY);
+
+ ListIterator<OrmPrimaryKeyJoinColumn> defaultPrimaryKeyJoinColumns = childEntity.defaultPrimaryKeyJoinColumns();
+ OrmPrimaryKeyJoinColumn defaultPrimaryKeyJoinColumn = defaultPrimaryKeyJoinColumns.next();
+ assertEquals("FOO", defaultPrimaryKeyJoinColumn.getName());
+ assertEquals("BAR", defaultPrimaryKeyJoinColumn.getReferencedColumnName());
+
+ defaultPrimaryKeyJoinColumn = defaultPrimaryKeyJoinColumns.next();
+ assertEquals("FOO2", defaultPrimaryKeyJoinColumn.getName());
+ assertEquals("BAR2", defaultPrimaryKeyJoinColumn.getReferencedColumnName());
+ assertFalse(defaultPrimaryKeyJoinColumns.hasNext());
+
+ childEntity.setSpecifiedMetadataComplete(Boolean.TRUE);
+ defaultPrimaryKeyJoinColumns = childEntity.defaultPrimaryKeyJoinColumns();
+ defaultPrimaryKeyJoinColumn = defaultPrimaryKeyJoinColumns.next();
+ assertEquals("id", defaultPrimaryKeyJoinColumn.getDefaultName());
+ assertEquals("id", defaultPrimaryKeyJoinColumn.getDefaultReferencedColumnName());
+
+ assertFalse(defaultPrimaryKeyJoinColumns.hasNext());
+
+ }
+
// public void testAddSpecifiedAttributeOverride() throws Exception {
// OrmPersistentType persistentType = entityMappings().addOrmPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME);
// OrmEntity ormEntity = (OrmEntity) persistentType.getMapping();

Back to the top