diff options
45 files changed, 2587 insertions, 265 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/EclipseLinkMultitenancy2_3.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/EclipseLinkMultitenancy2_3.java index 474fb73e18..e85b27812e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/EclipseLinkMultitenancy2_3.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/EclipseLinkMultitenancy2_3.java @@ -144,4 +144,12 @@ public interface EclipseLinkMultitenancy2_3 */ int getDefaultTenantDiscriminatorColumnsSize(); + /** + * Return whether a TenantDiscriminatorColumn is allowed for this type mapping. + * It is allowed if it is a mapped-superclass, the root entity in the inheritance hierarchy, + * or the inheritance strategy is table-per-class + */ + boolean specifiedTenantDiscriminatorColumnsAllowed(); + String SPECIFIED_TENANT_DISCRIMINATOR_COLUMNS_ALLOWED_PROPERTY = "specifiedTenantDiscriminatorColumnsAllowed"; //$NON-NLS-1$ + } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkEntityMappings.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkEntityMappings.java index 5691d7419f..2c19a1b843 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkEntityMappings.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkEntityMappings.java @@ -13,7 +13,6 @@ import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; import org.eclipse.jpt.jpa.core.context.orm.EntityMappings; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkConverter; import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; -import org.eclipse.jpt.jpa.eclipselink.core.context.TenantDiscriminatorColumn2_3; public interface EclipseLinkEntityMappings extends EntityMappings @@ -63,18 +62,18 @@ public interface EclipseLinkEntityMappings * Add a specified tenant discriminator column and return the object * representing it. */ - TenantDiscriminatorColumn2_3 addSpecifiedTenantDiscriminatorColumn(); + OrmTenantDiscriminatorColumn2_3 addSpecifiedTenantDiscriminatorColumn(); /** * Add a specified tenant discriminator column and return the object * representing it. */ - TenantDiscriminatorColumn2_3 addSpecifiedTenantDiscriminatorColumn(int index); + OrmTenantDiscriminatorColumn2_3 addSpecifiedTenantDiscriminatorColumn(int index); /** * Remove the specified tenant discriminator column. */ - void removeSpecifiedTenantDiscriminatorColumn(TenantDiscriminatorColumn2_3 tenantDiscriminatorColumn); + void removeSpecifiedTenantDiscriminatorColumn(OrmTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn); /** * Remove the specified tenant discriminator column at the index. diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkPersistenceUnitDefaults.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkPersistenceUnitDefaults.java new file mode 100644 index 0000000000..3f8a4c548a --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/orm/EclipseLinkPersistenceUnitDefaults.java @@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.core.context.orm; + +import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; +import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmPersistenceUnitDefaults2_0; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmTenantDiscriminatorColumn2_3; + +/** + * EclipseLink <code>orm.xml</code> file + * <br> + * <code>persistence-unit-defaults</code> element + */ +public interface EclipseLinkPersistenceUnitDefaults + extends OrmPersistenceUnitDefaults2_0 +{ + + // ********** tenant discriminator columns ********** + + /** + * Return a list iterable of the tenant discriminator columns. + * This will not be null. + */ + ListIterable<OrmTenantDiscriminatorColumn2_3> getTenantDiscriminatorColumns(); + String TENANT_DISCRIMINATOR_COLUMNS_LIST = "tenantDiscriminatorColumns"; //$NON-NLS-1$ + + /** + * Return the number of tenant discriminator columns. + */ + int getTenantDiscriminatorColumnsSize(); + + /** + * Return whether there are any tenant discriminator columns. + */ + boolean hasTenantDiscriminatorColumns(); + + /** + * Add a tenant discriminator column and return the object + * representing it. + */ + OrmTenantDiscriminatorColumn2_3 addTenantDiscriminatorColumn(); + + /** + * Add a tenant discriminator column and return the object + * representing it. + */ + OrmTenantDiscriminatorColumn2_3 addTenantDiscriminatorColumn(int index); + + /** + * Remove the tenant discriminator column. + */ + void removeTenantDiscriminatorColumn(OrmTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn); + + /** + * Remove the tenant discriminator column at the index. + */ + void removeTenantDiscriminatorColumn(int index); + + /** + * Move the tenant discriminator column from the source index to the target index. + */ + void moveTenantDiscriminatorColumn(int targetIndex, int sourceIndex); +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/persistence/EclipseLinkPersistenceUnit.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/persistence/EclipseLinkPersistenceUnit.java index 67d6b388d5..a1676ad1ec 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/persistence/EclipseLinkPersistenceUnit.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/context/persistence/EclipseLinkPersistenceUnit.java @@ -51,11 +51,11 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkConverter; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkTypeMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkEntityMappings; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkPersistenceUnitDefaults; import org.eclipse.jpt.jpa.eclipselink.core.internal.DefaultEclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.EclipseLinkJpaValidationMessages; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.java.JavaEclipseLinkConverter; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm.OrmEclipseLinkConverter; -import org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm.OrmEclipseLinkPersistenceUnitDefaults; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm.OrmEclipseLinkPersistenceUnitMetadata; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.persistence.EclipseLinkCaching; import org.eclipse.jpt.jpa.eclipselink.core.internal.context.persistence.EclipseLinkCustomization; @@ -103,7 +103,7 @@ public class EclipseLinkPersistenceUnit OrmEclipseLinkPersistenceUnitMetadata metadata = this.getEclipseLinkMetadata(); - OrmEclipseLinkPersistenceUnitDefaults defaults = (metadata == null) ? null : metadata.getPersistenceUnitDefaults(); + EclipseLinkPersistenceUnitDefaults defaults = (metadata == null) ? null : metadata.getPersistenceUnitDefaults(); this.setDefaultTenantDiscriminatorColumns(this.buildDefaultTenantDiscriminatorColumns(defaults)); } @@ -343,7 +343,7 @@ public class EclipseLinkPersistenceUnit this.synchronizeList(tenantDiscriminatorColumns, this.defaultTenantDiscriminatorColumns, DEFAULT_TENANT_DISCRIMINATOR_COLUMNS_LIST); } - protected ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> buildDefaultTenantDiscriminatorColumns(OrmEclipseLinkPersistenceUnitDefaults defaults) { + protected ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> buildDefaultTenantDiscriminatorColumns(EclipseLinkPersistenceUnitDefaults defaults) { return (defaults == null) ? EmptyListIterable.<ReadOnlyTenantDiscriminatorColumn2_3> instance() : new SuperListIterableWrapper<ReadOnlyTenantDiscriminatorColumn2_3>(defaults.getTenantDiscriminatorColumns()); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/JavaEclipseLinkMultitenancyImpl2_3.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/JavaEclipseLinkMultitenancyImpl2_3.java index b397ad2af5..f0f2cd2bea 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/JavaEclipseLinkMultitenancyImpl2_3.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/JavaEclipseLinkMultitenancyImpl2_3.java @@ -72,6 +72,8 @@ public class JavaEclipseLinkMultitenancyImpl2_3 protected final JavaReadOnlyTenantDiscriminatorColumn2_3 defaultTenantDiscriminatorColumn; + protected boolean specifiedTenantDiscriminatorColumnsAllowed; + public JavaEclipseLinkMultitenancyImpl2_3(JavaEclipseLinkNonEmbeddableTypeMapping parent) { super(parent); @@ -105,6 +107,7 @@ public class JavaEclipseLinkMultitenancyImpl2_3 this.setSpecifiedMultitenant_(this.isMultitenantAnnotationSpecified()); this.setDefaultMultitenant(this.buildDefaultMultitenant()); this.setDefaultType(this.buildDefaultType()); + this.setSpecifiedTenantDiscriminatorColumnsAllowed(this.buildSpecifiedTenantDiscriminatorColumnsAllowed()); this.updateDefaultTenantDiscriminatorColumns(); } @@ -397,6 +400,20 @@ public class JavaEclipseLinkMultitenancyImpl2_3 return (entityMappings != null) ? entityMappings.getTenantDiscriminatorColumns() : this.getPersistenceUnit().getDefaultTenantDiscriminatorColumns(); } + public boolean specifiedTenantDiscriminatorColumnsAllowed() { + return this.specifiedTenantDiscriminatorColumnsAllowed; + } + + public void setSpecifiedTenantDiscriminatorColumnsAllowed(boolean allowed) { + boolean old = this.specifiedTenantDiscriminatorColumnsAllowed; + this.specifiedTenantDiscriminatorColumnsAllowed = allowed; + this.firePropertyChanged(SPECIFIED_TENANT_DISCRIMINATOR_COLUMNS_ALLOWED_PROPERTY, old, allowed); + } + + protected boolean buildSpecifiedTenantDiscriminatorColumnsAllowed() { + return this.getParent().isMultitenantMetadataAllowed(); + } + /** * default tenant discriminator column container @@ -562,10 +579,6 @@ public class JavaEclipseLinkMultitenancyImpl2_3 return (EclipseLinkPersistenceUnit) super.getPersistenceUnit(); } - protected boolean isSpecifiedMultitenantMetadataAllowed() { - return this.getParent().isMultitenantMetadataAllowed(); - } - protected boolean isMultitenantInheritanceHierarchy() { if (this.isInheritanceStrategyTablePerClass()) { return false; @@ -636,7 +649,7 @@ public class JavaEclipseLinkMultitenancyImpl2_3 //TODO validate 2.3 eclipselink does not use TABLE_PER_CLASS (and the new PROTECTED?? this wouldn't be in the 2.3 source) super.validate(messages, reporter, astRoot); if (this.getSpecifiedTenantDiscriminatorColumnsSize() > 0) { - if (!this.isSpecifiedMultitenantMetadataAllowed()) { + if (!this.specifiedTenantDiscriminatorColumnsAllowed()) { messages.add( DefaultEclipseLinkJpaValidationMessages.buildMessage( IMessage.NORMAL_SEVERITY, @@ -664,7 +677,7 @@ public class JavaEclipseLinkMultitenancyImpl2_3 ); } } - if (this.isSpecifiedMultitenantMetadataAllowed()) { + if (this.specifiedTenantDiscriminatorColumnsAllowed()) { //bug 360731 no need to validate, they will be validated where they are specified for (JavaVirtualTenantDiscriminatorColumn2_3 column : this.getDefaultTenantDiscriminatorColumns()) { column.validate(messages, reporter, astRoot); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/NullJavaEclipseLinkMultitenancy2_3.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/NullJavaEclipseLinkMultitenancy2_3.java index a83ff19b80..df32a009e6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/NullJavaEclipseLinkMultitenancy2_3.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/java/NullJavaEclipseLinkMultitenancy2_3.java @@ -135,4 +135,8 @@ public class NullJavaEclipseLinkMultitenancy2_3 public TextRange getValidationTextRange(CompilationUnit astRoot) { throw new UnsupportedOperationException("Multitenancy is only supported in EclipseLink version 2.3 and higher"); //$NON-NLS-1$ } + + public boolean specifiedTenantDiscriminatorColumnsAllowed() { + return false; + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java index e6ed174cc1..e72e20ad68 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkEntityMappingsImpl.java @@ -34,7 +34,6 @@ import org.eclipse.jpt.jpa.eclipselink.core.JptJpaEclipseLinkCorePlugin; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkConverter; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkTypeMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; -import org.eclipse.jpt.jpa.eclipselink.core.context.TenantDiscriminatorColumn2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkEntityMappings; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmReadOnlyTenantDiscriminatorColumn2_3; @@ -174,8 +173,8 @@ public class EclipseLinkEntityMappingsImpl return EclipseLinkOrmFactory.eINSTANCE.createXmlTenantDiscriminatorColumn(); } - public void removeSpecifiedTenantDiscriminatorColumn(TenantDiscriminatorColumn2_3 tenantDiscriminatorColumn) { - this.removeSpecifiedTenantDiscriminatorColumn(this.specifiedTenantDiscriminatorColumnContainer.indexOfContextElement((OrmTenantDiscriminatorColumn2_3) tenantDiscriminatorColumn)); + public void removeSpecifiedTenantDiscriminatorColumn(OrmTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn) { + this.removeSpecifiedTenantDiscriminatorColumn(this.specifiedTenantDiscriminatorColumnContainer.indexOfContextElement(tenantDiscriminatorColumn)); } public void removeSpecifiedTenantDiscriminatorColumn(int index) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/NullOrmEclipseLinkMultitenancy2_3.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/NullOrmEclipseLinkMultitenancy2_3.java index 2acc422c62..d8428431e6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/NullOrmEclipseLinkMultitenancy2_3.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/NullOrmEclipseLinkMultitenancy2_3.java @@ -143,4 +143,7 @@ public class NullOrmEclipseLinkMultitenancy2_3 return 0; } + public boolean specifiedTenantDiscriminatorColumnsAllowed() { + return false; + } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMultitenancyImpl2_3.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMultitenancyImpl2_3.java index 7e44a93ecb..2511fcf2da 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMultitenancyImpl2_3.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkMultitenancyImpl2_3.java @@ -75,6 +75,8 @@ public class OrmEclipseLinkMultitenancyImpl2_3 protected final OrmReadOnlyTenantDiscriminatorColumn2_3 defaultTenantDiscriminatorColumn; + protected boolean specifiedTenantDiscriminatorColumnsAllowed; + public OrmEclipseLinkMultitenancyImpl2_3(OrmEclipseLinkNonEmbeddableTypeMapping parent) { super(parent); @@ -112,6 +114,7 @@ public class OrmEclipseLinkMultitenancyImpl2_3 this.setDefaultMultitenant(useJavaValue ? javaMultitenantPolicy.isMultitenant() : this.buildDefaultMultitenant()); this.setDefaultType(useJavaValue ? javaMultitenantPolicy.getType() : this.buildDefaultType()); // this.setDefaultIncludeCriteria(useJavaValue ? javaMultitenantPolicy.isIncludeCriteria() : DEFAULT_INCLUDE_CRITERIA); + this.setSpecifiedTenantDiscriminatorColumnsAllowed(this.buildSpecifiedTenantDiscriminatorColumnsAllowed()); this.updateDefaultTenantDiscriminatorColumns(); } @@ -458,6 +461,20 @@ public class OrmEclipseLinkMultitenancyImpl2_3 return new DefaultTenantDiscriminatorColumnContainer(); } + public boolean specifiedTenantDiscriminatorColumnsAllowed() { + return this.specifiedTenantDiscriminatorColumnsAllowed; + } + + public void setSpecifiedTenantDiscriminatorColumnsAllowed(boolean allowed) { + boolean old = this.specifiedTenantDiscriminatorColumnsAllowed; + this.specifiedTenantDiscriminatorColumnsAllowed = allowed; + this.firePropertyChanged(SPECIFIED_TENANT_DISCRIMINATOR_COLUMNS_ALLOWED_PROPERTY, old, allowed); + } + + protected boolean buildSpecifiedTenantDiscriminatorColumnsAllowed() { + return this.getParent().isMultitenantMetadataAllowed(); + } + /** * default tenant discriminator column container @@ -609,10 +626,6 @@ public class OrmEclipseLinkMultitenancyImpl2_3 return (javaTypeMapping == null) ? null : javaTypeMapping.getMultitenancy(); } - protected boolean isSpecifiedMultitenantMetadataAllowed() { - return this.getParent().isMultitenantMetadataAllowed(); - } - protected boolean isMultitenantInheritanceHierarchy() { if (this.isInheritanceStrategyTablePerClass()) { return false; @@ -663,7 +676,7 @@ public class OrmEclipseLinkMultitenancyImpl2_3 public void validate(List<IMessage> messages, IReporter reporter) { super.validate(messages, reporter); if (getSpecifiedTenantDiscriminatorColumnsSize() > 0) { - if (!this.isSpecifiedMultitenantMetadataAllowed()) { + if (!this.specifiedTenantDiscriminatorColumnsAllowed()) { messages.add( DefaultEclipseLinkJpaValidationMessages.buildMessage( IMessage.NORMAL_SEVERITY, @@ -680,7 +693,7 @@ public class OrmEclipseLinkMultitenancyImpl2_3 } } } - if (this.isSpecifiedMultitenantMetadataAllowed()) { + if (this.specifiedTenantDiscriminatorColumnsAllowed()) { //bug 360731 no need to validate, they will be validated where they are specified for (OrmVirtualTenantDiscriminatorColumn2_3 column : this.getDefaultTenantDiscriminatorColumns()) { column.validate(messages, reporter); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitDefaults.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitDefaults.java index 4ebed54d64..9d92c05a31 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitDefaults.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitDefaults.java @@ -23,7 +23,7 @@ import org.eclipse.jpt.jpa.core.internal.context.NamedColumnTextRangeResolver; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.AbstractOrmPersistenceUnitDefaults; import org.eclipse.jpt.jpa.db.Table; import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; -import org.eclipse.jpt.jpa.eclipselink.core.context.TenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkPersistenceUnitDefaults; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmReadOnlyTenantDiscriminatorColumn2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmTenantDiscriminatorColumn2_3; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.EclipseLinkOrmFactory; @@ -38,11 +38,11 @@ import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.v2_3.XmlTenantDiscrimin */ public class OrmEclipseLinkPersistenceUnitDefaults extends AbstractOrmPersistenceUnitDefaults + implements EclipseLinkPersistenceUnitDefaults { protected final ContextListContainer<OrmTenantDiscriminatorColumn2_3, XmlTenantDiscriminatorColumn_2_3> tenantDiscriminatorColumnContainer; protected final OrmReadOnlyTenantDiscriminatorColumn2_3.Owner tenantDiscriminatorColumnOwner; - public static final String TENANT_DISCRIMINATOR_COLUMNS_LIST = "tenantDiscriminatorColumns"; //$NON-NLS-1$ // ********** constructor/initialization ********** @@ -115,8 +115,8 @@ public class OrmEclipseLinkPersistenceUnitDefaults return EclipseLinkOrmFactory.eINSTANCE.createXmlTenantDiscriminatorColumn(); } - public void removeTenantDiscriminatorColumn(TenantDiscriminatorColumn2_3 tenantDiscriminatorColumn) { - this.removeTenantDiscriminatorColumn(this.tenantDiscriminatorColumnContainer.indexOfContextElement((OrmTenantDiscriminatorColumn2_3) tenantDiscriminatorColumn)); + public void removeTenantDiscriminatorColumn(OrmTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn) { + this.removeTenantDiscriminatorColumn(this.tenantDiscriminatorColumnContainer.indexOfContextElement(tenantDiscriminatorColumn)); } public void removeTenantDiscriminatorColumn(int index) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitMetadata.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitMetadata.java index bccba8c4ac..c80019d987 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitMetadata.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.core/src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/OrmEclipseLinkPersistenceUnitMetadata.java @@ -12,6 +12,7 @@ package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm; import org.eclipse.jpt.jpa.core.context.orm.EntityMappings; import org.eclipse.jpt.jpa.core.internal.jpa1.context.orm.AbstractOrmPersistenceUnitMetadata; import org.eclipse.jpt.jpa.core.resource.xml.EmfTools; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkPersistenceUnitDefaults; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.EclipseLinkOrmPackage; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlPersistenceUnitMetadata; @@ -29,8 +30,8 @@ public class OrmEclipseLinkPersistenceUnitMetadata } @Override - public OrmEclipseLinkPersistenceUnitDefaults getPersistenceUnitDefaults() { - return (OrmEclipseLinkPersistenceUnitDefaults) super.getPersistenceUnitDefaults(); + public EclipseLinkPersistenceUnitDefaults getPersistenceUnitDefaults() { + return (EclipseLinkPersistenceUnitDefaults) super.getPersistenceUnitDefaults(); } @Override diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/property_files/eclipselink_ui_details.properties b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/property_files/eclipselink_ui_details.properties index 4d85ff076a..32c588d5f8 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/property_files/eclipselink_ui_details.properties +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/property_files/eclipselink_ui_details.properties @@ -77,6 +77,7 @@ TypeSection_converted = Converted EclipseLinkTypeMappingComposite_advanced = Advanced EclipseLinkTypeMappingComposite_caching = Caching EclipseLinkTypeMappingComposite_converters = Converters +EclipseLinkTypeMappingComposite_multitenancy = Multitenancy EclipseLinkExistenceCheckingComposite_label = Existence checking: JavaEclipseLinkExistenceCheckingComposite_check_cache = Check Cache @@ -153,3 +154,22 @@ EclipseLinkConverterStateObject_nameMustBeSpecified = A name must be specified. EclipseLinkConverterStateObject_typeMustBeSpecified = A converter type must be specified. EclipseLinkMappedSuperclassComposite_queries=Queries + +TenantDiscriminatorColumns_groupLabel=Tenant discriminator columns +TenantDiscriminatorColumnComposite_nameLabel=Name: +TenantDiscriminatorColumnComposite_defaultTenantDiscriminatorColumnNameLabel=Default ({0}) +TenantDiscriminatorColumnComposite_tableLabel=Table: +TenantDiscriminatorColumnComposite_contextPropertyLabel=Context property: +TenantDiscriminatorColumnComposite_discriminatorTypeLabel=Discriminator type: +TenantDiscriminatorColumnComposite_lengthLabel=Length: +TenantDiscriminatorColumnComposite_columnDefinitionLabel=Column definition: +TenantDiscriminatorColumnComposite_primaryKeyWithDefault=Primary key ({0}) +TenantDiscriminatorColumnComposite_primaryKey=Primary key + +EclipseLinkEntityMappingsTenantDiscriminatorColumnsComposite_collapsibleSection=Tenant Discriminator Columns +EclipseLinkMultitenancy_overrideDefaultTenantDiscriminatorColumns=Override default + +EclipseLinkMultitenancyComposite_strategy=Multitenant strategy: +EclipseLinkMultitenancyComposite_single_table=Single Table +EclipseLinkMultitenancyComposite_table_per_tenant=Table Per Tenant +EclipseLinkMultitenancyComposite_vpd=VPD diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/EclipseLinkHelpContextIds.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/EclipseLinkHelpContextIds.java index c0eeff4bab..3849e23dad 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/EclipseLinkHelpContextIds.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/EclipseLinkHelpContextIds.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009 Oracle. All rights reserved. + * Copyright (c) 2009, 2011 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. @@ -54,4 +54,12 @@ public interface EclipseLinkHelpContextIds { public static final String PERSISTENCE_OPTIONS_TARGET_DATABASE = PREFIX + "options_targetDatabase"; public static final String PERSISTENCE_OPTIONS_TARGET_SERVER = PREFIX + "options_targetServer"; + public static final String MULTITENANCY_STRATEGY = PREFIX + "multitenancy_strategy"; + public static final String MULTITENANCY_TENANT_DISCRIMINATOR_COLUMNS = PREFIX + "multitenancy_tenantDiscriminatorColumns"; + public static final String TENANT_DISCRIMINATOR_COLUMN_NAME = PREFIX + "tenantDiscriminatorColumn_name"; + public static final String TENANT_DISCRIMINATOR_COLUMN_TABLE = PREFIX + "tenantDiscriminatorColumn_table"; + public static final String TENANT_DISCRIMINATOR_COLUMN_CONTEXT_PROPERTY = PREFIX + "tenantDiscriminatorColumn_contextProperty"; + public static final String TENANT_DISCRIMINATOR_COLUMN_DISCRIMINATOR_TYPE = PREFIX + "tenantDiscriminatorColumn_discriminatorType"; + public static final String TENANT_DISCRIMINATOR_COLUMN_PRIMARY_KEY = PREFIX + "tenantDiscriminatorColumn_primaryKey"; + public static final String TENANT_DISCRIMINATOR_COLUMN_LENGTH = PREFIX + "tenantDiscriminatorColumn_length"; } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/EclipseLinkMultitenancyComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/EclipseLinkMultitenancyComposite.java new file mode 100644 index 0000000000..27d2b52af1 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/EclipseLinkMultitenancyComposite.java @@ -0,0 +1,322 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details; + +import java.util.Collection; +import org.eclipse.jpt.common.ui.internal.widgets.EnumFormComboViewer; +import org.eclipse.jpt.common.ui.internal.widgets.Pane; +import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; +import org.eclipse.jpt.common.utility.internal.iterables.SuperListIterableWrapper; +import org.eclipse.jpt.common.utility.internal.model.value.CachingTransformationPropertyValueModel; +import org.eclipse.jpt.common.utility.internal.model.value.ListAspectAdapter; +import org.eclipse.jpt.common.utility.internal.model.value.ListPropertyValueModelAdapter; +import org.eclipse.jpt.common.utility.internal.model.value.ReadOnlyWritablePropertyValueModelWrapper; +import org.eclipse.jpt.common.utility.internal.model.value.ValueListAdapter; +import org.eclipse.jpt.common.utility.model.event.StateChangeEvent; +import org.eclipse.jpt.common.utility.model.listener.StateChangeListener; +import org.eclipse.jpt.common.utility.model.value.ListValueModel; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; +import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkMultitenancy2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkMultitenantType2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.TenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.EclipseLinkHelpContextIds; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.TenantDiscriminatorColumnsComposite.TenantDiscriminatorColumnsEditor; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Group; + +/** + * Here is the layout of this pane: + * <pre> + * ----------------------------------------------------------------------------- + * | ----------------------------------------------- | | + * | Multitenant strategy: | EnumComboViewer |v| | | + * | ----------------------------------------------- | | + * | | + * | - Tenant discriminator columns ---------------------------------------- | | + * | | | | + * | | x Override Default | | + * | | --------------------------------------------------------------------- | | + * | | | | | | + * | | | TenantDiscriminatorColumnsComposite | | | + * | | | | | | + * | | --------------------------------------------------------------------- | | + * | ------------------------------------------------------------------------- | + * -----------------------------------------------------------------------------</pre> + * + * + * @version 3.1 + * @since 3.1 + */ +public class EclipseLinkMultitenancyComposite extends Pane<EclipseLinkMultitenancy2_3> +{ + private TenantDiscriminatorColumnsComposite<EclipseLinkMultitenancy2_3> tenantDiscriminatorColumnsComposite; + + public EclipseLinkMultitenancyComposite(Pane<?> parentPane, + PropertyValueModel<? extends EclipseLinkMultitenancy2_3> subjectHolder, + Composite parent) { + + super(parentPane, subjectHolder, parent, false); + } + + @Override + protected void initializeLayout(Composite container) { + int groupBoxMargin = getGroupBoxMargin(); + + Composite subPane = addSubPane( + container, 0, groupBoxMargin, 0, groupBoxMargin + ); + + // Strategy widgets + addLabeledComposite( + subPane, + EclipseLinkUiDetailsMessages.EclipseLinkMultitenancyComposite_strategy, + addMultitenantStrategyCombo(subPane), + EclipseLinkHelpContextIds.MULTITENANCY_STRATEGY + ); + + + // Tenant discriminator columns group pane + Group tenantDiscriminatorColumnGroupPane = addTitledGroup( + container, + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumns_groupLabel + ); + + // Override Default Tenant Discriminator Columns check box + addCheckBox( + addSubPane(tenantDiscriminatorColumnGroupPane, 8), + EclipseLinkUiDetailsMessages.EclipseLinkMultitenancy_overrideDefaultTenantDiscriminatorColumns, + buildOverrideDefaultTenantDiscriminatorColumnHolder(), + null + ); + + this.tenantDiscriminatorColumnsComposite = this.buildTenantDiscriminatorColumnsComposite(tenantDiscriminatorColumnGroupPane); + + this.tenantDiscriminatorColumnsComposite.installListPaneEnabler(new TenantDiscriminatorColumnPaneEnablerHolder()); + } + + private EnumFormComboViewer<EclipseLinkMultitenancy2_3, EclipseLinkMultitenantType2_3> addMultitenantStrategyCombo(Composite container) { + + return new EnumFormComboViewer<EclipseLinkMultitenancy2_3, EclipseLinkMultitenantType2_3>(this, container) { + + @Override + protected void addPropertyNames(Collection<String> propertyNames) { + super.addPropertyNames(propertyNames); + propertyNames.add(EclipseLinkMultitenancy2_3.DEFAULT_TYPE_PROPERTY); + propertyNames.add(EclipseLinkMultitenancy2_3.SPECIFIED_TYPE_PROPERTY); + } + + @Override + protected EclipseLinkMultitenantType2_3[] getChoices() { + return EclipseLinkMultitenantType2_3.values(); + } + + @Override + protected EclipseLinkMultitenantType2_3 getDefaultValue() { + return getSubject().getDefaultType(); + } + + @Override + protected String displayString(EclipseLinkMultitenantType2_3 value) { + return buildDisplayString( + EclipseLinkUiDetailsMessages.class, + EclipseLinkMultitenancyComposite.class, + value + ); + } + + @Override + protected EclipseLinkMultitenantType2_3 getValue() { + return getSubject().getSpecifiedType(); + } + + @Override + protected void setValue(EclipseLinkMultitenantType2_3 value) { + getSubject().setSpecifiedType(value); + } + }; + } + + protected TenantDiscriminatorColumnsComposite<EclipseLinkMultitenancy2_3> buildTenantDiscriminatorColumnsComposite(Composite container) { + return new TenantDiscriminatorColumnsComposite<EclipseLinkMultitenancy2_3>( + getSubjectHolder(), + container, + getWidgetFactory(), + buildTenantDiscriminatorColumnsEditor()); + } + + + protected TenantDiscriminatorColumnsEditor<EclipseLinkMultitenancy2_3> buildTenantDiscriminatorColumnsEditor() { + return new TenantDiscriminatorColumnsProvider(); + } + + class TenantDiscriminatorColumnsProvider implements TenantDiscriminatorColumnsEditor<EclipseLinkMultitenancy2_3> { + + public void addTenantDiscriminatorColumn(EclipseLinkMultitenancy2_3 subject) { + TenantDiscriminatorColumn2_3 column = subject.addSpecifiedTenantDiscriminatorColumn(); + column.setSpecifiedName(ReadOnlyTenantDiscriminatorColumn2_3.DEFAULT_NAME); + } + + public ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getDefaultTenantDiscriminatorColumns(EclipseLinkMultitenancy2_3 subject) { + return new SuperListIterableWrapper<ReadOnlyTenantDiscriminatorColumn2_3>(subject.getDefaultTenantDiscriminatorColumns()); + } + + public int getDefaultTenantDiscriminatorColumnsSize(EclipseLinkMultitenancy2_3 subject) { + return subject.getDefaultTenantDiscriminatorColumnsSize(); + } + + public String getDefaultTenantDiscriminatorsListPropertyName() { + return EclipseLinkMultitenancy2_3.DEFAULT_TENANT_DISCRIMINATOR_COLUMNS_LIST; + } + + public ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getSpecifiedTenantDiscriminatorColumns(EclipseLinkMultitenancy2_3 subject) { + return new SuperListIterableWrapper<ReadOnlyTenantDiscriminatorColumn2_3>(subject.getSpecifiedTenantDiscriminatorColumns()); + } + + public int getSpecifiedTenantDiscriminatorColumnsSize(EclipseLinkMultitenancy2_3 subject) { + return subject.getSpecifiedTenantDiscriminatorColumnsSize(); + } + + public String getSpecifiedTenantDiscriminatorsListPropertyName() { + return EclipseLinkMultitenancy2_3.SPECIFIED_TENANT_DISCRIMINATOR_COLUMNS_LIST; + } + + public boolean hasSpecifiedTenantDiscriminatorColumns(EclipseLinkMultitenancy2_3 subject) { + return subject.hasSpecifiedTenantDiscriminatorColumns(); + } + + public void removeTenantDiscriminatorColumns(EclipseLinkMultitenancy2_3 subject, int[] selectedIndices) { + for (int index = selectedIndices.length; index-- > 0; ) { + subject.removeSpecifiedTenantDiscriminatorColumn(selectedIndices[index]); + } + } + } + + void setSelectedTenantDiscriminatorColumn(ReadOnlyTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn) { + this.tenantDiscriminatorColumnsComposite.setSelectedTenantDiscriminatorColumn(tenantDiscriminatorColumn); + } + + private WritablePropertyValueModel<Boolean> buildOverrideDefaultTenantDiscriminatorColumnHolder() { + return new OverrideDefaultTenantDiscriminatorColumnHolder(); + } + + ListValueModel<ReadOnlyTenantDiscriminatorColumn2_3> buildSpecifiedTenantDiscriminatorColumnsListHolder() { + return new ListAspectAdapter<EclipseLinkMultitenancy2_3, ReadOnlyTenantDiscriminatorColumn2_3>( + getSubjectHolder(), EclipseLinkMultitenancy2_3.SPECIFIED_TENANT_DISCRIMINATOR_COLUMNS_LIST) { + @Override + protected ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getListIterable() { + return new SuperListIterableWrapper<ReadOnlyTenantDiscriminatorColumn2_3>(this.subject.getSpecifiedTenantDiscriminatorColumns()); + } + @Override + protected int size_() { + return this.subject.getSpecifiedTenantDiscriminatorColumnsSize(); + } + }; + } + + private class OverrideDefaultTenantDiscriminatorColumnHolder + extends ListPropertyValueModelAdapter<Boolean> + implements WritablePropertyValueModel<Boolean> + { + public OverrideDefaultTenantDiscriminatorColumnHolder() { + super(buildSpecifiedTenantDiscriminatorColumnsListHolder()); + } + + @Override + protected Boolean buildValue() { + return Boolean.valueOf(this.listHolder.size() > 0); + } + + public void setValue(Boolean value) { + updateTenantDiscriminatorColumns(value.booleanValue()); + } + + private void updateTenantDiscriminatorColumns(boolean selected) { + if (isPopulating()) { + return; + } + + setPopulating(true); + + try { + EclipseLinkMultitenancy2_3 subject = getSubject(); + + if (selected) { + TenantDiscriminatorColumn2_3 newTenantDiscriminatorColumn = subject.addSpecifiedTenantDiscriminatorColumn(); + newTenantDiscriminatorColumn.setSpecifiedName(ReadOnlyTenantDiscriminatorColumn2_3.DEFAULT_NAME); + } + // Remove all the specified tenant discriminator columns + else { + for (int index = subject.getSpecifiedTenantDiscriminatorColumnsSize(); --index >= 0; ) { + subject.removeSpecifiedTenantDiscriminatorColumn(index); + } + } + } + finally { + setPopulating(false); + } + } + } + + private class TenantDiscriminatorColumnPaneEnablerHolder + extends CachingTransformationPropertyValueModel<EclipseLinkMultitenancy2_3, Boolean> + { + private StateChangeListener stateChangeListener; + + + public TenantDiscriminatorColumnPaneEnablerHolder() { + super( + new ValueListAdapter<EclipseLinkMultitenancy2_3>( + new ReadOnlyWritablePropertyValueModelWrapper<EclipseLinkMultitenancy2_3>(getSubjectHolder()), + EclipseLinkMultitenancy2_3.SPECIFIED_TENANT_DISCRIMINATOR_COLUMNS_LIST)); + this.stateChangeListener = buildStateChangeListener(); + } + + private StateChangeListener buildStateChangeListener() { + return new StateChangeListener() { + public void stateChanged(StateChangeEvent event) { + valueStateChanged(); + } + }; + } + + void valueStateChanged() { + Object oldValue = this.cachedValue; + Object newValue = transformNew(this.valueHolder.getValue()); + firePropertyChanged(VALUE, oldValue, newValue); + } + + @Override + protected Boolean transform(EclipseLinkMultitenancy2_3 value) { + if (value == null) { + return Boolean.FALSE; + } + return super.transform(value); + } + + @Override + protected Boolean transform_(EclipseLinkMultitenancy2_3 value) { + return Boolean.valueOf(value.getSpecifiedTenantDiscriminatorColumnsSize() > 0); + } + + @Override + protected void engageModel() { + super.engageModel(); + this.valueHolder.addStateChangeListener(this.stateChangeListener); + } + + @Override + protected void disengageModel() { + this.valueHolder.removeStateChangeListener(this.stateChangeListener); + super.disengageModel(); + } + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/EclipseLinkUiDetailsMessages.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/EclipseLinkUiDetailsMessages.java index 6673cd8486..e954fe3dec 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/EclipseLinkUiDetailsMessages.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/EclipseLinkUiDetailsMessages.java @@ -43,6 +43,7 @@ public class EclipseLinkUiDetailsMessages extends NLS { public static String EclipseLinkTypeMappingComposite_advanced; public static String EclipseLinkTypeMappingComposite_caching; public static String EclipseLinkTypeMappingComposite_converters; + public static String EclipseLinkTypeMappingComposite_multitenancy; public static String EclipseLinkCacheSizeComposite_size; public static String EclipseLinkCacheCoordinationTypeComposite_label; @@ -159,9 +160,28 @@ public class EclipseLinkUiDetailsMessages extends NLS { public static String EclipseLinkConverterStateObject_nameIsReserved; public static String EclipseLinkConverterStateObject_nameMustBeSpecified; public static String EclipseLinkConverterStateObject_typeMustBeSpecified; - + public static String EclipseLinkMappedSuperclassComposite_queries; + public static String TenantDiscriminatorColumns_groupLabel; + public static String TenantDiscriminatorColumnComposite_nameLabel; + public static String TenantDiscriminatorColumnComposite_defaultTenantDiscriminatorColumnNameLabel; + public static String TenantDiscriminatorColumnComposite_tableLabel; + public static String TenantDiscriminatorColumnComposite_contextPropertyLabel; + public static String TenantDiscriminatorColumnComposite_discriminatorTypeLabel; + public static String TenantDiscriminatorColumnComposite_lengthLabel; + public static String TenantDiscriminatorColumnComposite_columnDefinitionLabel; + public static String TenantDiscriminatorColumnComposite_primaryKeyWithDefault; + public static String TenantDiscriminatorColumnComposite_primaryKey; + + public static String EclipseLinkEntityMappingsTenantDiscriminatorColumnsComposite_collapsibleSection; + public static String EclipseLinkMultitenancy_overrideDefaultTenantDiscriminatorColumns; + + public static String EclipseLinkMultitenancyComposite_strategy; + public static String EclipseLinkMultitenancyComposite_single_table; + public static String EclipseLinkMultitenancyComposite_table_per_tenant; + public static String EclipseLinkMultitenancyComposite_vpd; + static { NLS.initializeMessages("eclipselink_ui_details", EclipseLinkUiDetailsMessages.class); } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/TenantDiscriminatorColumnComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/TenantDiscriminatorColumnComposite.java new file mode 100644 index 0000000000..f7935d3ffb --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/TenantDiscriminatorColumnComposite.java @@ -0,0 +1,395 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details; + +import java.util.Collection; +import org.eclipse.jpt.common.ui.internal.JptCommonUiMessages; +import org.eclipse.jpt.common.ui.internal.widgets.ComboPane; +import org.eclipse.jpt.common.ui.internal.widgets.EnumFormComboViewer; +import org.eclipse.jpt.common.ui.internal.widgets.IntegerCombo; +import org.eclipse.jpt.common.ui.internal.widgets.Pane; +import org.eclipse.jpt.common.utility.internal.iterables.EmptyIterable; +import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; +import org.eclipse.jpt.common.utility.internal.model.value.TransformationPropertyValueModel; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; +import org.eclipse.jpt.jpa.core.context.DiscriminatorType; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedDiscriminatorColumn; +import org.eclipse.jpt.jpa.core.context.ReadOnlyTableColumn; +import org.eclipse.jpt.jpa.db.Table; +import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.TenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.EclipseLinkHelpContextIds; +import org.eclipse.jpt.jpa.ui.internal.details.DiscriminatorColumnComposite; +import org.eclipse.jpt.jpa.ui.internal.details.JptUiDetailsMessages; +import org.eclipse.jpt.jpa.ui.internal.details.db.ColumnCombo; +import org.eclipse.jpt.jpa.ui.internal.details.db.DatabaseObjectCombo; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.widgets.Composite; + +public class TenantDiscriminatorColumnComposite extends Pane<ReadOnlyTenantDiscriminatorColumn2_3> { + + public TenantDiscriminatorColumnComposite(Pane<?> parentPane, + PropertyValueModel<ReadOnlyTenantDiscriminatorColumn2_3> subjectHolder, + Composite parent) { + + super(parentPane, subjectHolder, parent); + } + + + @Override + protected void initializeLayout(Composite container) { + + // Name widgets + addLabeledComposite( + container, + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumnComposite_nameLabel, + addNameCombo(container), + EclipseLinkHelpContextIds.TENANT_DISCRIMINATOR_COLUMN_NAME); + + // Table widgets + addLabeledComposite( + container, + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumnComposite_tableLabel, + addTableCombo(container), + EclipseLinkHelpContextIds.TENANT_DISCRIMINATOR_COLUMN_TABLE); + + // Context property widgets + addLabeledComposite( + container, + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumnComposite_contextPropertyLabel, + addContextPropertyCombo(container), + EclipseLinkHelpContextIds.TENANT_DISCRIMINATOR_COLUMN_CONTEXT_PROPERTY); + + // Discriminator Type widgets + addLabeledComposite( + container, + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumnComposite_discriminatorTypeLabel, + addDiscriminatorTypeCombo(container), + EclipseLinkHelpContextIds.TENANT_DISCRIMINATOR_COLUMN_DISCRIMINATOR_TYPE + ); + // Length widgets + addLengthCombo(container); + + // Column Definition widgets + addLabeledText( + container, + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumnComposite_columnDefinitionLabel, + buildColumnDefinitionHolder(getSubjectHolder()) + ); + + // Primary key tri-state check box + addTriStateCheckBoxWithDefault( + addSubPane(container, 4), + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumnComposite_primaryKey, + buildPrimaryKeyHolder(), + buildPrimaryKeyStringHolder(), + EclipseLinkHelpContextIds.TENANT_DISCRIMINATOR_COLUMN_PRIMARY_KEY); + } + + private ColumnCombo<ReadOnlyTenantDiscriminatorColumn2_3> addNameCombo(Composite container) { + + return new ColumnCombo<ReadOnlyTenantDiscriminatorColumn2_3>(this, container) { + @Override + protected void addPropertyNames(Collection<String> propertyNames) { + super.addPropertyNames(propertyNames); + propertyNames.add(ReadOnlyNamedColumn.DEFAULT_NAME_PROPERTY); + propertyNames.add(ReadOnlyNamedColumn.SPECIFIED_NAME_PROPERTY); + propertyNames.add(ReadOnlyTableColumn.DEFAULT_TABLE_PROPERTY); + propertyNames.add(ReadOnlyTableColumn.SPECIFIED_TABLE_PROPERTY); + } + + @Override + protected void propertyChanged(String propertyName) { + if (propertyName == ReadOnlyTableColumn.DEFAULT_TABLE_PROPERTY || + propertyName == ReadOnlyTableColumn.SPECIFIED_TABLE_PROPERTY) { + this.doPopulate(); + } else { + super.propertyChanged(propertyName); + } + } + + @Override + protected String getDefaultValue() { + return getSubject().getDefaultName(); + } + + @Override + protected void setValue(String value) { + ((TenantDiscriminatorColumn2_3) this.getSubject()).setSpecifiedName(value); + } + + @Override + protected Table getDbTable_() { + ReadOnlyTenantDiscriminatorColumn2_3 column = this.getSubject(); + return (column == null) ? null : column.getDbTable(); + } + + @Override + protected String getValue() { + return getSubject().getSpecifiedName(); + } + + @Override + protected String buildNullDefaultValueEntry() { + return NLS.bind( + JptCommonUiMessages.DefaultWithOneParam, + JptCommonUiMessages.NoneSelected); + } + + @Override + public String toString() { + return "TenantDiscriminatorColumnComposite.nameCombo"; //$NON-NLS-1$ + } + }; + } + + private Pane<ReadOnlyTenantDiscriminatorColumn2_3> addTableCombo(Composite container) { + + return new DatabaseObjectCombo<ReadOnlyTenantDiscriminatorColumn2_3>(this, container) { + + @Override + protected void addPropertyNames(Collection<String> propertyNames) { + super.addPropertyNames(propertyNames); + propertyNames.add(ReadOnlyTableColumn.DEFAULT_TABLE_PROPERTY); + propertyNames.add(ReadOnlyTableColumn.SPECIFIED_TABLE_PROPERTY); + } + + @Override + protected String getDefaultValue() { + return this.getSubject().getDefaultTable(); + } + + @Override + protected void setValue(String value) { + ((TenantDiscriminatorColumn2_3) this.getSubject()).setSpecifiedTable(value); + } + + @Override + protected String getValue() { + return this.getSubject().getSpecifiedTable(); + } + + // TODO we need to listen for this list to change... + @Override + protected Iterable<String> getValues_() { + ReadOnlyTenantDiscriminatorColumn2_3 column = this.getSubject(); + return (column != null) ? column.getCandidateTableNames() : EmptyIterable.<String> instance(); + } + + @Override + protected String buildNullDefaultValueEntry() { + return NLS.bind( + JptCommonUiMessages.DefaultWithOneParam, + JptCommonUiMessages.NoneSelected); + } + + @Override + public String toString() { + return "TenantDiscriminatorColumnComposite.tableCombo"; //$NON-NLS-1$ + } + }; + } + + private Pane<ReadOnlyTenantDiscriminatorColumn2_3> addContextPropertyCombo(Composite container) { + + return new ComboPane<ReadOnlyTenantDiscriminatorColumn2_3>(this, container) { + + @Override + protected void addPropertyNames(Collection<String> propertyNames) { + super.addPropertyNames(propertyNames); + propertyNames.add(ReadOnlyTenantDiscriminatorColumn2_3.DEFAULT_CONTEXT_PROPERTY); + propertyNames.add(ReadOnlyTenantDiscriminatorColumn2_3.SPECIFIED_CONTEXT_PROPERTY_PROPERTY); + } + + @Override + protected String getDefaultValue() { + return this.getSubject().getDefaultContextProperty(); + } + + @Override + protected void setValue(String value) { + ((TenantDiscriminatorColumn2_3) this.getSubject()).setSpecifiedContextProperty(value); + } + + @Override + protected String getValue() { + return this.getSubject().getSpecifiedContextProperty(); + } + + @Override + protected Iterable<String> getValues() { + return EmptyIterable.<String> instance(); + } + + @Override + protected String buildNullDefaultValueEntry() { + return NLS.bind( + JptCommonUiMessages.DefaultWithOneParam, + JptCommonUiMessages.NoneSelected); + } + + @Override + public String toString() { + return "TenantDiscriminatorColumnComposite.contextPropertyCombo"; //$NON-NLS-1$ + } + }; + } + + private EnumFormComboViewer<ReadOnlyTenantDiscriminatorColumn2_3, DiscriminatorType> addDiscriminatorTypeCombo(Composite container) { + + return new EnumFormComboViewer<ReadOnlyTenantDiscriminatorColumn2_3, DiscriminatorType>( + this, + getSubjectHolder(), + container) + { + @Override + protected void addPropertyNames(Collection<String> propertyNames) { + super.addPropertyNames(propertyNames); + propertyNames.add(ReadOnlyNamedDiscriminatorColumn.DEFAULT_DISCRIMINATOR_TYPE_PROPERTY); + propertyNames.add(ReadOnlyNamedDiscriminatorColumn.SPECIFIED_DISCRIMINATOR_TYPE_PROPERTY); + } + + @Override + protected DiscriminatorType[] getChoices() { + return DiscriminatorType.values(); + } + + @Override + protected DiscriminatorType getDefaultValue() { + return getSubject().getDefaultDiscriminatorType(); + } + + @Override + protected String displayString(DiscriminatorType value) { + return buildDisplayString( + JptUiDetailsMessages.class, + DiscriminatorColumnComposite.class, + value + ); + } + + @Override + protected String nullDisplayString() { + return JptCommonUiMessages.NoneSelected; + } + + @Override + protected DiscriminatorType getValue() { + return getSubject().getSpecifiedDiscriminatorType(); + } + + @Override + protected void setValue(DiscriminatorType value) { + ((TenantDiscriminatorColumn2_3) this.getSubject()).setSpecifiedDiscriminatorType(value); + } + }; + } + + private void addLengthCombo(Composite container) { + new IntegerCombo<ReadOnlyTenantDiscriminatorColumn2_3>(this, container) { + + @Override + protected String getLabelText() { + return JptUiDetailsMessages.ColumnComposite_length; + } + + @Override + protected String getHelpId() { + return EclipseLinkHelpContextIds.TENANT_DISCRIMINATOR_COLUMN_LENGTH; + } + + @Override + protected PropertyValueModel<Integer> buildDefaultHolder() { + return new PropertyAspectAdapter<ReadOnlyTenantDiscriminatorColumn2_3, Integer>(getSubjectHolder(), ReadOnlyNamedDiscriminatorColumn.DEFAULT_LENGTH_PROPERTY) { + @Override + protected Integer buildValue_() { + return Integer.valueOf(this.subject.getDefaultLength()); + } + }; + } + + @Override + protected WritablePropertyValueModel<Integer> buildSelectedItemHolder() { + return new PropertyAspectAdapter<ReadOnlyTenantDiscriminatorColumn2_3, Integer>(getSubjectHolder(), ReadOnlyNamedDiscriminatorColumn.SPECIFIED_LENGTH_PROPERTY) { + @Override + protected Integer buildValue_() { + return this.subject.getSpecifiedLength(); + } + + @Override + protected void setValue_(Integer value) { + ((TenantDiscriminatorColumn2_3) this.subject).setSpecifiedLength(value); + } + }; + } + }; + } + + private WritablePropertyValueModel<String> buildColumnDefinitionHolder(PropertyValueModel<ReadOnlyTenantDiscriminatorColumn2_3> discriminatorColumnHolder) { + return new PropertyAspectAdapter<ReadOnlyTenantDiscriminatorColumn2_3, String>(discriminatorColumnHolder, ReadOnlyNamedColumn.COLUMN_DEFINITION_PROPERTY) { + @Override + protected String buildValue_() { + return this.subject.getColumnDefinition(); + } + @Override + protected void setValue_(String value) { + if (value.length() == 0) { + value = null; + } + ((TenantDiscriminatorColumn2_3) this.subject).setColumnDefinition(value); + } + }; + } + + WritablePropertyValueModel<Boolean> buildPrimaryKeyHolder() { + return new PropertyAspectAdapter<ReadOnlyTenantDiscriminatorColumn2_3, Boolean>(getSubjectHolder(), ReadOnlyTenantDiscriminatorColumn2_3.SPECIFIED_PRIMARY_KEY_PROPERTY) { + @Override + protected Boolean buildValue_() { + return this.subject.getSpecifiedPrimaryKey(); + } + + @Override + protected void setValue_(Boolean value) { + ((TenantDiscriminatorColumn2_3) this.subject).setSpecifiedPrimaryKey(value); + } + }; + } + + PropertyValueModel<String> buildPrimaryKeyStringHolder() { + return new TransformationPropertyValueModel<Boolean, String>(buildDefaultPrimaryKeyHolder()) { + @Override + protected String transform(Boolean value) { + if (value != null) { + String defaultStringValue = value.booleanValue() ? JptCommonUiMessages.Boolean_True : JptCommonUiMessages.Boolean_False; + return NLS.bind(EclipseLinkUiDetailsMessages.TenantDiscriminatorColumnComposite_primaryKeyWithDefault, defaultStringValue); + } + return EclipseLinkUiDetailsMessages.TenantDiscriminatorColumnComposite_primaryKey; + } + }; + } + + PropertyValueModel<Boolean> buildDefaultPrimaryKeyHolder() { + return new PropertyAspectAdapter<ReadOnlyTenantDiscriminatorColumn2_3, Boolean>( + getSubjectHolder(), + ReadOnlyTenantDiscriminatorColumn2_3.SPECIFIED_PRIMARY_KEY_PROPERTY, + ReadOnlyTenantDiscriminatorColumn2_3.DEFAULT_PRIMARY_KEY_PROPERTY) { + + @Override + protected Boolean buildValue_() { + if (this.subject.getSpecifiedPrimaryKey() != null) { + return null; + } + return Boolean.valueOf(this.subject.isPrimaryKey()); + } + }; + } +}
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/TenantDiscriminatorColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/TenantDiscriminatorColumnsComposite.java new file mode 100644 index 0000000000..4777e881ab --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/TenantDiscriminatorColumnsComposite.java @@ -0,0 +1,290 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details; + +import java.util.ArrayList; +import java.util.List; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.common.ui.internal.util.ControlSwitcher; +import org.eclipse.jpt.common.ui.internal.util.PaneEnabler; +import org.eclipse.jpt.common.ui.internal.widgets.AddRemoveListPane; +import org.eclipse.jpt.common.ui.internal.widgets.AddRemovePane.AbstractAdapter; +import org.eclipse.jpt.common.ui.internal.widgets.AddRemovePane.Adapter; +import org.eclipse.jpt.common.ui.internal.widgets.Pane; +import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; +import org.eclipse.jpt.common.utility.internal.model.value.CompositeListValueModel; +import org.eclipse.jpt.common.utility.internal.model.value.ItemPropertyListValueModelAdapter; +import org.eclipse.jpt.common.utility.internal.model.value.ListAspectAdapter; +import org.eclipse.jpt.common.utility.internal.model.value.SimplePropertyValueModel; +import org.eclipse.jpt.common.utility.internal.model.value.swing.ObjectListSelectionModel; +import org.eclipse.jpt.common.utility.model.value.ListValueModel; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; +import org.eclipse.jpt.jpa.core.JpaNode; +import org.eclipse.jpt.jpa.core.context.ReadOnlyNamedColumn; +import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.EclipseLinkHelpContextIds; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.part.PageBook; + +/** + * Here is the layout of this pane: + * <pre> + * ----------------------------------------------------------------------------- + * | ------------------------------------------------------------------------- | + * | | | | + * | | AddRemoveListPane | | + * | | | | + * | ------------------------------------------------------------------------- | + * -----------------------------------------------------------------------------</pre> + + * + * @version 3.1 + * @since 3.1 + */ +public class TenantDiscriminatorColumnsComposite<T extends JpaNode> extends Pane<T> +{ + /** + * The editor used to perform the common behaviors defined in the list pane. + */ + TenantDiscriminatorColumnsEditor<T> tenantDiscriminatorColumnsEditor; + + private AddRemoveListPane<T> listPane; + private Pane<ReadOnlyTenantDiscriminatorColumn2_3> tenantDiscriminatorColumnPane; + private WritablePropertyValueModel<ReadOnlyTenantDiscriminatorColumn2_3> tenantDiscriminatorColumnHolder; + + public TenantDiscriminatorColumnsComposite(Pane<? extends T> parentPane, + Composite parent, + TenantDiscriminatorColumnsEditor<T> tenantDiscriminatorColumnsEditor) { + + super(parentPane, parent); + this.tenantDiscriminatorColumnsEditor = tenantDiscriminatorColumnsEditor; + initializeLayout2(); + } + + public TenantDiscriminatorColumnsComposite(Pane<?> parentPane, + PropertyValueModel<? extends T> subjectHolder, + Composite parent, + TenantDiscriminatorColumnsEditor<T> tenantDiscriminatorColumnsEditor, + boolean automaticallyAlignWidgets) { + + super(parentPane, subjectHolder, parent, automaticallyAlignWidgets); + this.tenantDiscriminatorColumnsEditor = tenantDiscriminatorColumnsEditor; + initializeLayout2(); + } + + public TenantDiscriminatorColumnsComposite(PropertyValueModel<? extends T> subjectHolder, + Composite parent, + WidgetFactory widgetFactory, + TenantDiscriminatorColumnsEditor<T> tenantDiscriminatorColumnsEditor) { + + super(subjectHolder, parent, widgetFactory); + this.tenantDiscriminatorColumnsEditor = tenantDiscriminatorColumnsEditor; + initializeLayout2(); + } + + @Override + protected void initialize() { + super.initialize(); + this.tenantDiscriminatorColumnHolder = buildTenantDiscriminatorColumnHolder(); + } + + private WritablePropertyValueModel<ReadOnlyTenantDiscriminatorColumn2_3> buildTenantDiscriminatorColumnHolder() { + return new SimplePropertyValueModel<ReadOnlyTenantDiscriminatorColumn2_3>(); + } + + @Override + protected void initializeLayout(Composite container) { + //see intiailizeLayout2() + } + + private void initializeLayout2() { + this.listPane = new AddRemoveListPane<T>( + this, + getControl(), + buildTenantDiscriminatorColumnsAdapter(), + buildTenantDiscriminatorColumnsListModel(), + this.tenantDiscriminatorColumnHolder, + buildTenantDiscriminatorColumnsListLabelProvider(), + EclipseLinkHelpContextIds.MULTITENANCY_TENANT_DISCRIMINATOR_COLUMNS, + false + ); + + // Property pane + PageBook pageBook = new PageBook(getControl(), SWT.NULL); + pageBook.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + //Tenant Discriminator Column property pane + this.tenantDiscriminatorColumnPane = this.buildTenantDiscriminatorColumnComposite(pageBook); + + + installPaneSwitcher(pageBook); + } + + protected Pane<ReadOnlyTenantDiscriminatorColumn2_3> buildTenantDiscriminatorColumnComposite(PageBook pageBook) { + return new TenantDiscriminatorColumnComposite( + this, + this.tenantDiscriminatorColumnHolder, + pageBook + ); + } + + private void installPaneSwitcher(PageBook pageBook) { + new ControlSwitcher(this.tenantDiscriminatorColumnHolder, this.tenantDiscriminatorColumnPane.getControl(), pageBook); + } + + String buildTenantDiscriminatorColumnLabel(ReadOnlyTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn) { + if (tenantDiscriminatorColumn.isVirtual() || tenantDiscriminatorColumn.getSpecifiedName() == null) { + return NLS.bind( + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumnComposite_defaultTenantDiscriminatorColumnNameLabel, + tenantDiscriminatorColumn.getName() + ); + } + return tenantDiscriminatorColumn.getName(); + } + + private Adapter buildTenantDiscriminatorColumnsAdapter() { + return new AbstractAdapter() { + + public void addNewItem(ObjectListSelectionModel listSelectionModel) { + TenantDiscriminatorColumnsComposite.this.tenantDiscriminatorColumnsEditor.addTenantDiscriminatorColumn(getSubject()); + } + + @Override + public boolean hasOptionalButton() { + return false; + } + + public void removeSelectedItems(ObjectListSelectionModel listSelectionModel) { + TenantDiscriminatorColumnsComposite.this.tenantDiscriminatorColumnsEditor.removeTenantDiscriminatorColumns(getSubject(), listSelectionModel.selectedIndices()); + } + }; + } + + private ListValueModel<ReadOnlyTenantDiscriminatorColumn2_3> buildTenantDiscriminatorColumnsListModel() { + return new ItemPropertyListValueModelAdapter<ReadOnlyTenantDiscriminatorColumn2_3>(buildTenantDiscriminatorColumnsListHolder(), + ReadOnlyNamedColumn.SPECIFIED_NAME_PROPERTY, + ReadOnlyNamedColumn.DEFAULT_NAME_PROPERTY); + } + + private ListValueModel<ReadOnlyTenantDiscriminatorColumn2_3> buildTenantDiscriminatorColumnsListHolder() { + List<ListValueModel<ReadOnlyTenantDiscriminatorColumn2_3>> list = new ArrayList<ListValueModel<ReadOnlyTenantDiscriminatorColumn2_3>>(); + list.add(buildDefaultTenantDiscriminatorColumnListHolder()); + list.add(buildSpecifiedTenantDiscriminatorColumnsListHolder()); + return new CompositeListValueModel<ListValueModel<ReadOnlyTenantDiscriminatorColumn2_3>, ReadOnlyTenantDiscriminatorColumn2_3>(list); + } + + private ListValueModel<ReadOnlyTenantDiscriminatorColumn2_3> buildSpecifiedTenantDiscriminatorColumnsListHolder() { + return new ListAspectAdapter<T, ReadOnlyTenantDiscriminatorColumn2_3>(getSubjectHolder(), this.tenantDiscriminatorColumnsEditor.getSpecifiedTenantDiscriminatorsListPropertyName()) { + @Override + protected ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getListIterable() { + return TenantDiscriminatorColumnsComposite.this.tenantDiscriminatorColumnsEditor.getSpecifiedTenantDiscriminatorColumns(this.subject); + } + + @Override + protected int size_() { + return TenantDiscriminatorColumnsComposite.this.tenantDiscriminatorColumnsEditor.getSpecifiedTenantDiscriminatorColumnsSize(this.subject); + } + }; + } + + private ListValueModel<ReadOnlyTenantDiscriminatorColumn2_3> buildDefaultTenantDiscriminatorColumnListHolder() { + return new ListAspectAdapter<T, ReadOnlyTenantDiscriminatorColumn2_3>(getSubjectHolder(), this.tenantDiscriminatorColumnsEditor.getDefaultTenantDiscriminatorsListPropertyName()) { + @Override + protected ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getListIterable() { + return TenantDiscriminatorColumnsComposite.this.tenantDiscriminatorColumnsEditor.getDefaultTenantDiscriminatorColumns(this.subject); + } + + @Override + protected int size_() { + return TenantDiscriminatorColumnsComposite.this.tenantDiscriminatorColumnsEditor.getDefaultTenantDiscriminatorColumnsSize(this.subject); + } + }; + } + + private ILabelProvider buildTenantDiscriminatorColumnsListLabelProvider() { + return new LabelProvider() { + @Override + public String getText(Object element) { + return buildTenantDiscriminatorColumnLabel((ReadOnlyTenantDiscriminatorColumn2_3) element); + } + }; + } + + public void installListPaneEnabler(PropertyValueModel<Boolean> paneEnablerHolder) { + new PaneEnabler(paneEnablerHolder, this.listPane); + } + + @Override + public void enableWidgets(boolean enabled) { + super.enableWidgets(enabled); + this.listPane.enableWidgets(enabled); + } + + public void setSelectedTenantDiscriminatorColumn(ReadOnlyTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn) { + this.listPane.setSelectedItem(tenantDiscriminatorColumn); + } + + /** + * The editor is used to complete the behavior of this pane. + */ + public static interface TenantDiscriminatorColumnsEditor<T> { + + /** + * Add a tenant discriminator column to the given subject + */ + void addTenantDiscriminatorColumn(T subject); + + /** + * Return whether the subject has specified tenant discriminator columns + */ + boolean hasSpecifiedTenantDiscriminatorColumns(T subject); + + /** + * Return the specified tenant discriminator from the given subject + */ + ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getSpecifiedTenantDiscriminatorColumns(T subject); + + /** + * Return the number of specified join columns on the given subject + */ + int getSpecifiedTenantDiscriminatorColumnsSize(T subject); + + /** + * Return the default tenant discriminator columns from the given subject or null. + */ + ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getDefaultTenantDiscriminatorColumns(T subject); + + /** + * Return the number of default tenant discriminator on the given subject + */ + int getDefaultTenantDiscriminatorColumnsSize(T subject); + + /** + * Return the property name of the specified tenant discriminator columns list + */ + String getSpecifiedTenantDiscriminatorsListPropertyName(); + + /** + * Return the property name of the default tenant discriminator columns list + */ + String getDefaultTenantDiscriminatorsListPropertyName(); + + /** + * Remove the tenant discriminator columns at the specified indices from the subject + */ + void removeTenantDiscriminatorColumns(T subject, int[] selectedIndices); + } +}
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkEntity2_xComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkEntity2_xComposite.java new file mode 100644 index 0000000000..ba5b700720 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/AbstractJavaEclipseLinkEntity2_xComposite.java @@ -0,0 +1,93 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java; + +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.AccessHolder; +import org.eclipse.jpt.jpa.core.context.GeneratorContainer; +import org.eclipse.jpt.jpa.core.context.QueryContainer; +import org.eclipse.jpt.jpa.core.context.java.JavaEntity; +import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkCaching; +import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkEntity; +import org.eclipse.jpt.jpa.ui.internal.details.AccessTypeComposite; +import org.eclipse.jpt.jpa.ui.internal.details.EntityNameComposite; +import org.eclipse.jpt.jpa.ui.internal.details.IdClassComposite; +import org.eclipse.jpt.jpa.ui.internal.details.TableComposite; +import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Entity2_0OverridesComposite; +import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Generation2_0Composite; +import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Queries2_0Composite; +import org.eclipse.swt.widgets.Composite; + +/** + * The pane used for an EclipseLink 2.x Java entity. + * + * @see JavaEclipseLinkEntity + * @see EclipselinkJpaUiFactory - The factory creating this pane + * + * @version 3.1 + * @since 3.1 + */ +public abstract class AbstractJavaEclipseLinkEntity2_xComposite + extends AbstractJavaEclipseLinkEntityComposite<JavaEntity> +{ + /** + * Creates a new <code>EclipseLinkJavaEntityComposite</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 + */ + protected AbstractJavaEclipseLinkEntity2_xComposite( + PropertyValueModel<? extends JavaEntity> subjectHolder, + Composite parent, + WidgetFactory widgetFactory) { + + super(subjectHolder, parent, widgetFactory); + } + + @Override + protected void initializeEntitySection(Composite container) { + new TableComposite(this, container); + new EntityNameComposite(this, container); + new AccessTypeComposite(this, buildAccessHolder(), container); + new IdClassComposite(this, buildIdClassReferenceHolder(), container); + } + + protected PropertyValueModel<AccessHolder> buildAccessHolder() { + return new PropertyAspectAdapter<JavaEntity, AccessHolder>(getSubjectHolder()) { + @Override + protected AccessHolder buildValue_() { + return this.subject.getPersistentType(); + } + }; + } + + @Override + protected void initializeAttributeOverridesSection(Composite container) { + new Entity2_0OverridesComposite(this, container); + } + + @Override + protected void initializeGeneratorsSection(Composite container, PropertyValueModel<GeneratorContainer> generatorContainerHolder) { + new Generation2_0Composite(this, generatorContainerHolder, container); + } + + @Override + protected void initializeCachingSection(Composite container, PropertyValueModel<JavaEclipseLinkCaching> cachingHolder) { + new JavaEclipseLinkCaching2_0Composite(this, cachingHolder, container); + } + + @Override + protected void initializeQueriesSection(Composite container, PropertyValueModel<QueryContainer> queryContainerHolder) { + new Queries2_0Composite(this, queryContainerHolder, container); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/EclipseLink2_3JavaResourceUiDefinition.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/EclipseLink2_3JavaResourceUiDefinition.java new file mode 100644 index 0000000000..c77c674341 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/EclipseLink2_3JavaResourceUiDefinition.java @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java; + +import java.util.List; +import org.eclipse.jpt.jpa.core.context.AttributeMapping; +import org.eclipse.jpt.jpa.core.context.TypeMapping; +import org.eclipse.jpt.jpa.ui.ResourceUiDefinition; +import org.eclipse.jpt.jpa.ui.details.java.DefaultJavaAttributeMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.details.java.JavaAttributeMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.details.java.JavaTypeMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.details.java.JavaUiFactory; +import org.eclipse.jpt.jpa.ui.internal.details.java.AbstractJavaResourceUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.DefaultBasicMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.DefaultEmbeddedMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaBasicMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaEmbeddableUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaEmbeddedIdMappingUDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaEmbeddedMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaEntityUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaManyToManyMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaManyToOneMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaMappedSuperclassUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaOneToManyMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaOneToOneMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaTransientMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.JavaVersionMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.java.NullJavaAttributeMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.jpa2.details.java.JavaElementCollectionMapping2_0UiDefinition; + +public class EclipseLink2_3JavaResourceUiDefinition + extends AbstractJavaResourceUiDefinition +{ + // singleton + private static final ResourceUiDefinition INSTANCE = new EclipseLink2_3JavaResourceUiDefinition(); + + + /** + * Return the singleton. + */ + public static ResourceUiDefinition instance() { + return INSTANCE; + } + + + /** + * zero-argument constructor + */ + protected EclipseLink2_3JavaResourceUiDefinition() { + super(); + } + + + @Override + protected JavaUiFactory buildJavaUiFactory() { + return new EclipseLink2_3JavaUiFactory(); + } + + @Override + protected void addSpecifiedAttributeMappingUiDefinitionsTo( + List<JavaAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) { + + definitions.add(JavaEclipseLinkIdMapping2_0UiDefinition.instance()); + definitions.add(JavaEmbeddedIdMappingUDefinition.instance()); + definitions.add(JavaBasicMappingUiDefinition.instance()); + definitions.add(JavaVersionMappingUiDefinition.instance()); + definitions.add(JavaManyToOneMappingUiDefinition.instance()); + definitions.add(JavaOneToManyMappingUiDefinition.instance()); + definitions.add(JavaOneToOneMappingUiDefinition.instance()); + definitions.add(JavaManyToManyMappingUiDefinition.instance()); + definitions.add(JavaEmbeddedMappingUiDefinition.instance()); + definitions.add(JavaTransientMappingUiDefinition.instance()); + + definitions.add(JavaEclipseLinkBasicCollectionMappingUiDefinition.instance()); + definitions.add(JavaEclipseLinkBasicMapMappingUiDefinition.instance()); + definitions.add(JavaEclipseLinkVariableOneToOneMappingUiDefinition.instance()); + definitions.add(JavaEclipseLinkTransformationMappingUiDefinition.instance()); + + definitions.add(JavaElementCollectionMapping2_0UiDefinition.instance()); + } + + @Override + protected void addDefaultAttributeMappingUiDefinitionsTo( + List<DefaultJavaAttributeMappingUiDefinition<?>> definitions) { + + definitions.add(DefaultBasicMappingUiDefinition.instance()); + definitions.add(DefaultEmbeddedMappingUiDefinition.instance()); + definitions.add(NullJavaAttributeMappingUiDefinition.instance()); + definitions.add(DefaultJavaEclipseLinkOneToOneMappingUiDefinition.instance()); + definitions.add(DefaultJavaEclipseLinkOneToManyMappingUiDefinition.instance()); + definitions.add(DefaultJavaEclipseLinkVariableOneToOneMappingUiDefinition.instance()); + } + + @Override + protected void addSpecifiedTypeMappingUiDefinitionsTo( + List<JavaTypeMappingUiDefinition<? extends TypeMapping>> definitions) { + + definitions.add(JavaEntityUiDefinition.instance()); + definitions.add(JavaMappedSuperclassUiDefinition.instance()); + definitions.add(JavaEmbeddableUiDefinition.instance()); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/EclipseLink2_3JavaUiFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/EclipseLink2_3JavaUiFactory.java new file mode 100644 index 0000000000..044d308da8 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/EclipseLink2_3JavaUiFactory.java @@ -0,0 +1,48 @@ +/******************************************************************************* +* Copyright (c) 2011 Oracle. All rights reserved. +* This program and the accompanying materials are made available under the +* terms of the Eclipse Public License v1.0, which accompanies this distribution +* and is available at http://www.eclipse.org/legal/epl-v10.html. +* +* Contributors: +* Oracle - initial API and implementation +*******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java; + +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.java.JavaEntity; +import org.eclipse.jpt.jpa.core.context.java.JavaMappedSuperclass; +import org.eclipse.jpt.jpa.ui.details.JpaComposite; +import org.eclipse.jpt.jpa.ui.jpa2.details.java.JavaUiFactory2_0; +import org.eclipse.swt.widgets.Composite; + +/** + * EclipseLink2_0JpaUiFactory + */ +public class EclipseLink2_3JavaUiFactory + extends EclipseLink2_0JavaUiFactory + implements JavaUiFactory2_0 +{ + public EclipseLink2_3JavaUiFactory() { + super(); + } + + + // **************** java type mapping composites *************************** + + @Override + public JpaComposite createJavaEntityComposite( + PropertyValueModel<JavaEntity> subjectHolder, + Composite parent, WidgetFactory widgetFactory) { + return new JavaEclipseLinkEntity2_3Composite(subjectHolder, parent, widgetFactory); + } + + @Override + public JpaComposite createJavaMappedSuperclassComposite( + PropertyValueModel<JavaMappedSuperclass> subjectHolder, + Composite parent, WidgetFactory widgetFactory) { + return new JavaEclipseLinkMappedSuperclass2_3Composite(subjectHolder, parent, widgetFactory); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkEntity2_0Composite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkEntity2_0Composite.java index 257bab7af2..6bdc55c5bc 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkEntity2_0Composite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkEntity2_0Composite.java @@ -10,34 +10,22 @@ package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java; import org.eclipse.jpt.common.ui.WidgetFactory; -import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.jpa.core.context.AccessHolder; -import org.eclipse.jpt.jpa.core.context.GeneratorContainer; -import org.eclipse.jpt.jpa.core.context.QueryContainer; import org.eclipse.jpt.jpa.core.context.java.JavaEntity; -import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkCaching; import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkEntity; -import org.eclipse.jpt.jpa.ui.internal.details.AccessTypeComposite; -import org.eclipse.jpt.jpa.ui.internal.details.EntityNameComposite; -import org.eclipse.jpt.jpa.ui.internal.details.IdClassComposite; -import org.eclipse.jpt.jpa.ui.internal.details.TableComposite; -import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Entity2_0OverridesComposite; -import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Generation2_0Composite; -import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Queries2_0Composite; import org.eclipse.swt.widgets.Composite; /** - * The pane used for an EclipseLink1.1 Java entity. + * The pane used for an EclipseLink 2.0 Java entity. * * @see JavaEclipseLinkEntity * @see EclipselinkJpaUiFactory - The factory creating this pane * - * @version 2.3 + * @version 3.1 * @since 2.2 */ public class JavaEclipseLinkEntity2_0Composite - extends AbstractJavaEclipseLinkEntityComposite<JavaEntity> + extends AbstractJavaEclipseLinkEntity2_xComposite { /** * Creates a new <code>EclipseLinkJavaEntityComposite</code>. @@ -50,44 +38,8 @@ public class JavaEclipseLinkEntity2_0Composite PropertyValueModel<? extends JavaEntity> subjectHolder, Composite parent, WidgetFactory widgetFactory) { - - super(subjectHolder, parent, widgetFactory); - } - - @Override - protected void initializeEntitySection(Composite container) { - new TableComposite(this, container); - new EntityNameComposite(this, container); - new AccessTypeComposite(this, buildAccessHolder(), container); - new IdClassComposite(this, buildIdClassReferenceHolder(), container); - } - - protected PropertyValueModel<AccessHolder> buildAccessHolder() { - return new PropertyAspectAdapter<JavaEntity, AccessHolder>(getSubjectHolder()) { - @Override - protected AccessHolder buildValue_() { - return this.subject.getPersistentType(); - } - }; - } - - @Override - protected void initializeAttributeOverridesSection(Composite container) { - new Entity2_0OverridesComposite(this, container); - } - - @Override - protected void initializeGeneratorsSection(Composite container, PropertyValueModel<GeneratorContainer> generatorContainerHolder) { - new Generation2_0Composite(this, generatorContainerHolder, container); - } - @Override - protected void initializeCachingSection(Composite container, PropertyValueModel<JavaEclipseLinkCaching> cachingHolder) { - new JavaEclipseLinkCaching2_0Composite(this, cachingHolder, container); + super(subjectHolder, parent, widgetFactory); } - @Override - protected void initializeQueriesSection(Composite container, PropertyValueModel<QueryContainer> queryContainerHolder) { - new Queries2_0Composite(this, queryContainerHolder, container); - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkEntity2_3Composite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkEntity2_3Composite.java new file mode 100644 index 0000000000..cb8ec5d7aa --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkEntity2_3Composite.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java; + +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.java.JavaEntity; +import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkEntity; +import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkMultitenancy2_3; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkMultitenancyComposite; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages; +import org.eclipse.swt.widgets.Composite; + +/** + * The pane used for an EclipseLink 2.3 Java entity. + * + * @version 3.1 + * @since 3.1 + */ +public class JavaEclipseLinkEntity2_3Composite + extends AbstractJavaEclipseLinkEntity2_xComposite +{ + public JavaEclipseLinkEntity2_3Composite( + PropertyValueModel<? extends JavaEntity> subjectHolder, + Composite parent, + WidgetFactory widgetFactory) { + + super(subjectHolder, parent, widgetFactory); + } + + @Override + protected void initializeLayout(Composite container) { + this.initializeEntityCollapsibleSection(container); + this.initializeCachingCollapsibleSectionPane(container); + this.initializeQueriesCollapsibleSection(container); + this.initializeInheritanceCollapsibleSection(container); + this.initializeAttributeOverridesCollapsibleSection(container); + this.initializeMultitenancyCollapsibleSectionPane(container); + this.initializeGeneratorsCollapsibleSection(container); + this.initializeConvertersCollapsibleSection(container); + this.initializeSecondaryTablesCollapsibleSection(container); + this.initializeAdvancedCollapsibleSection(container); + } + + protected void initializeMultitenancyCollapsibleSectionPane(Composite container) { + container = addCollapsibleSection( + container, + EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_multitenancy); + this.initializeMultitenancySection(container, buildMultitenancyHolder()); + } + + protected void initializeMultitenancySection(Composite container, PropertyValueModel<JavaEclipseLinkMultitenancy2_3> multitenancyHolder) { + new EclipseLinkMultitenancyComposite(this, multitenancyHolder, container); + } + + private PropertyAspectAdapter<JavaEntity, JavaEclipseLinkMultitenancy2_3> buildMultitenancyHolder() { + return new PropertyAspectAdapter<JavaEntity, JavaEclipseLinkMultitenancy2_3>(getSubjectHolder()) { + @Override + protected JavaEclipseLinkMultitenancy2_3 buildValue_() { + return ((JavaEclipseLinkEntity) this.subject).getMultitenancy(); + } + }; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkMappedSuperclass2_3Composite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkMappedSuperclass2_3Composite.java new file mode 100644 index 0000000000..b58a546bd6 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/java/JavaEclipseLinkMappedSuperclass2_3Composite.java @@ -0,0 +1,103 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java; + +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.AccessHolder; +import org.eclipse.jpt.jpa.core.context.java.JavaMappedSuperclass; +import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkMappedSuperclass; +import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkCaching; +import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkMappedSuperclass; +import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkMultitenancy2_3; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkMultitenancyComposite; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages; +import org.eclipse.jpt.jpa.ui.internal.details.AccessTypeComposite; +import org.eclipse.jpt.jpa.ui.internal.details.IdClassComposite; +import org.eclipse.swt.widgets.Composite; + +/** + * The pane used for an EclipseLink 2.3 Java Mapped Superclass. + * + * @see EclipseLinkMappedSuperclass + * @see EclipselinkJpaUiFactory - The factory creating this pane + * + * @version 3.1 + * @since 3.1 + */ +public class JavaEclipseLinkMappedSuperclass2_3Composite + extends AbstractJavaEclipseLinkMappedSuperclassComposite +{ + /** + * Creates a new <code>MappedSuperclassComposite</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 JavaEclipseLinkMappedSuperclass2_3Composite( + PropertyValueModel<? extends JavaMappedSuperclass> subjectHolder, + Composite parent, + WidgetFactory widgetFactory) { + + super(subjectHolder, parent, widgetFactory); + } + + @Override + protected void initializeLayout(Composite container) { + this.initializeMappedSuperclassCollapsibleSection(container); + this.initializeCachingCollapsibleSection(container); + this.initializeQueriesCollapsibleSection(container); + this.initializeMultitenancyCollapsibleSection(container); + this.initializeConvertersCollapsibleSection(container); + this.initializeAdvancedCollapsibleSection(container); + } + + @Override + protected void initializeMappedSuperclassSection(Composite container) { + new AccessTypeComposite(this, buildAccessHolder(), container); + new IdClassComposite(this, buildIdClassReferenceHolder(), container); + } + + protected PropertyValueModel<AccessHolder> buildAccessHolder() { + return new PropertyAspectAdapter<JavaMappedSuperclass, AccessHolder>(getSubjectHolder()) { + @Override + protected AccessHolder buildValue_() { + return this.subject.getPersistentType(); + } + }; + } + + @Override + protected void initializeCachingSection(Composite container, PropertyValueModel<JavaEclipseLinkCaching> cachingHolder) { + new JavaEclipseLinkCaching2_0Composite(this, cachingHolder, container); + } + + protected void initializeMultitenancyCollapsibleSection(Composite container) { + container = addCollapsibleSection( + container, + EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_multitenancy); + this.initializeMultitenancySection(container, buildMultitenancyHolder()); + } + + protected void initializeMultitenancySection(Composite container, PropertyValueModel<JavaEclipseLinkMultitenancy2_3> multitenancyHolder) { + new EclipseLinkMultitenancyComposite(this, multitenancyHolder, container); + } + + private PropertyAspectAdapter<JavaMappedSuperclass, JavaEclipseLinkMultitenancy2_3> buildMultitenancyHolder() { + return new PropertyAspectAdapter<JavaMappedSuperclass, JavaEclipseLinkMultitenancy2_3>(getSubjectHolder()) { + @Override + protected JavaEclipseLinkMultitenancy2_3 buildValue_() { + return ((JavaEclipseLinkMappedSuperclass) this.subject).getMultitenancy(); + } + }; + } +}
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/AbstractOrmEclipseLinkEntity2_xComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/AbstractOrmEclipseLinkEntity2_xComposite.java new file mode 100644 index 0000000000..4c2c1df450 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/AbstractOrmEclipseLinkEntity2_xComposite.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Oracle - initial API and implementation + *******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; + +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.GeneratorContainer; +import org.eclipse.jpt.jpa.core.context.QueryContainer; +import org.eclipse.jpt.jpa.core.context.orm.OrmEntity; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkCaching; +import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Entity2_0OverridesComposite; +import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Generation2_0Composite; +import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Queries2_0Composite; +import org.eclipse.swt.widgets.Composite; + +public abstract class AbstractOrmEclipseLinkEntity2_xComposite extends AbstractOrmEclipseLinkEntityComposite +{ + protected AbstractOrmEclipseLinkEntity2_xComposite( + PropertyValueModel<? extends OrmEntity> subjectHolder, + Composite parent, WidgetFactory widgetFactory) { + super(subjectHolder, parent, widgetFactory); + } + + @Override + protected void initializeAttributeOverridesSection(Composite container) { + new Entity2_0OverridesComposite(this, container); + } + + @Override + protected void initializeGeneratorsSection(Composite container, PropertyValueModel<GeneratorContainer> generatorContainerHolder) { + new Generation2_0Composite(this, generatorContainerHolder, container); + } + + @Override + protected void initializeCachingSection(Composite container, PropertyValueModel<OrmEclipseLinkCaching> cachingHolder) { + new OrmEclipseLinkCaching2_0Composite(this, cachingHolder, container); + } + + @Override + protected void initializeQueriesSection(Composite container, PropertyValueModel<QueryContainer> queryContainerHolder) { + new Queries2_0Composite(this, queryContainerHolder, container); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLink2_3PersistenceUnitMetadataComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLink2_3PersistenceUnitMetadataComposite.java new file mode 100644 index 0000000000..c9f7117712 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLink2_3PersistenceUnitMetadataComposite.java @@ -0,0 +1,218 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; + +import org.eclipse.jpt.common.ui.internal.utility.swt.SWTTools; +import org.eclipse.jpt.common.ui.internal.widgets.EnumFormComboViewer; +import org.eclipse.jpt.common.ui.internal.widgets.Pane; +import org.eclipse.jpt.common.utility.internal.iterables.EmptyListIterable; +import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; +import org.eclipse.jpt.common.utility.internal.iterables.SuperListIterableWrapper; +import org.eclipse.jpt.common.utility.internal.model.value.TransformationPropertyValueModel; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.orm.OrmPersistenceUnitDefaults; +import org.eclipse.jpt.jpa.core.context.orm.OrmPersistenceUnitMetadata; +import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkPersistenceUnitDefaults; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmTenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.TenantDiscriminatorColumnsComposite; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.TenantDiscriminatorColumnsComposite.TenantDiscriminatorColumnsEditor; +import org.eclipse.jpt.jpa.ui.internal.JpaHelpContextIds; +import org.eclipse.jpt.jpa.ui.internal.details.db.CatalogCombo; +import org.eclipse.jpt.jpa.ui.internal.details.db.SchemaCombo; +import org.eclipse.jpt.jpa.ui.internal.details.orm.EntityMappingsDetailsPage; +import org.eclipse.jpt.jpa.ui.internal.details.orm.JptUiDetailsOrmMessages; +import org.eclipse.jpt.jpa.ui.internal.details.orm.PersistenceUnitMetadataComposite; +import org.eclipse.jpt.jpa.ui.internal.jpa2.Jpa2_0ProjectFlagModel; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Group; + +/** + * Here the layout of this pane: + * <pre> + * ----------------------------------------------------------------------------- + * | | + * | - Persistence Unit ------------------------------------------------------ | + * | | + * | x XML Mapping Metadata Complete | + * | | + * | x Cascade Persist | + * | | + * | ------------------------------------------------------------ | + * | Schema: | SchemaCombo | | + * | ------------------------------------------------------------ | + * | ------------------------------------------------------------ | + * | Catalog: | CatalogCombo | | + * | ------------------------------------------------------------ | + * | ------------------------------------------------------------ | + * | Access Type: | |v| | + * | ------------------------------------------------------------ | + * -----------------------------------------------------------------------------</pre> + * + * @see PersistenceUnitMetadata + * @see OrmPersistenceUnitDefaults + * @see EntityMappingsDetailsPage - The parent container + * @see CatalogCombo + * @see SchemaCombo + * @see EnumFormComboViewer + * + * @version 3.1 + * @since 3.1 + */ +public class EclipseLink2_3PersistenceUnitMetadataComposite extends PersistenceUnitMetadataComposite +{ + + protected TenantDiscriminatorColumnsComposite<OrmPersistenceUnitDefaults> tenantDiscriminatorColumnsComposite; + + public EclipseLink2_3PersistenceUnitMetadataComposite(Pane<?> parentPane, + PropertyValueModel<? extends OrmPersistenceUnitMetadata> subjectHolder, + Composite parent) { + + super(parentPane, subjectHolder, parent); + } + + @Override + protected void initializeLayout(Composite container) { + + // Section + container = addCollapsibleSection( + container, + JptUiDetailsOrmMessages.PersistenceUnitMetadataComposite_persistenceUnitSection + ); + + // XML mapping metadata complete check box + addCheckBox( + container, + JptUiDetailsOrmMessages.PersistenceUnitMetadataComposite_xmlMappingMetadataCompleteCheckBox, + buildXmlMappingMetadataCompleteHolder(), + JpaHelpContextIds.ENTITY_ORM_XML + ); + + // Cascade Persist check-box + addCheckBox( + container, + JptUiDetailsOrmMessages.PersistenceUnitMetadataComposite_cascadePersistCheckBox, + buildCascadePersistHolder(), + JpaHelpContextIds.ENTITY_ORM_CASCADE + ); + + // Schema widgets + addLabeledComposite( + container, + JptUiDetailsOrmMessages.PersistenceUnitMetadataComposite_schema, + addSchemaCombo(container), + JpaHelpContextIds.ENTITY_ORM_SCHEMA + ); + + // Catalog widgets + addLabeledComposite( + container, + JptUiDetailsOrmMessages.PersistenceUnitMetadataComposite_catalog, + addCatalogCombo(container), + JpaHelpContextIds.ENTITY_ORM_CATALOG + ); + + // Access Type widgets + addLabeledComposite( + container, + JptUiDetailsOrmMessages.PersistenceUnitMetadataComposite_access, + addAccessTypeCombo(container), + JpaHelpContextIds.ENTITY_ORM_ACCESS + ); + + // Delimited Identifiers check-box + Button diCheckBox = this.addCheckBox( + container, + JptUiDetailsOrmMessages.PersistenceUnitMetadataComposite_delimitedIdentifiersCheckBox, + this.buildDelimitedIdentifiersHolder(), + JpaHelpContextIds.ENTITY_ORM_DELIMITED_IDENTIFIERS + ); + + SWTTools.controlVisibleState(new Jpa2_0ProjectFlagModel<OrmPersistenceUnitMetadata>(this.getSubjectHolder()), diCheckBox); + + + // Tenant discriminator columns group pane + Group tenantDiscriminatorColumnGroupPane = addTitledGroup( + container, + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumns_groupLabel + ); + + this.tenantDiscriminatorColumnsComposite = new TenantDiscriminatorColumnsComposite<OrmPersistenceUnitDefaults>( + getPersistenceUnitDefaultsHolder(), + tenantDiscriminatorColumnGroupPane, + getWidgetFactory(), + buildTenantDiscriminatorColumnsEditor() + ); + + installTenantDiscriminatorColumnsPaneEnabler(this.tenantDiscriminatorColumnsComposite); + } + + protected void installTenantDiscriminatorColumnsPaneEnabler(TenantDiscriminatorColumnsComposite<OrmPersistenceUnitDefaults> pane) { + pane.installListPaneEnabler(buildPaneEnablerHolder()); + } + + private PropertyValueModel<Boolean> buildPaneEnablerHolder() { + return new TransformationPropertyValueModel<OrmPersistenceUnitDefaults, Boolean>(getPersistenceUnitDefaultsHolder()) { + @Override + protected Boolean transform(OrmPersistenceUnitDefaults value) { + return Boolean.valueOf(value != null); + } + }; + } + + protected TenantDiscriminatorColumnsEditor<OrmPersistenceUnitDefaults> buildTenantDiscriminatorColumnsEditor() { + return new TenantDiscriminatorColumnsProvider(); + } + + class TenantDiscriminatorColumnsProvider implements TenantDiscriminatorColumnsEditor<OrmPersistenceUnitDefaults> { + + public void addTenantDiscriminatorColumn(OrmPersistenceUnitDefaults subject) { + OrmTenantDiscriminatorColumn2_3 column = ((EclipseLinkPersistenceUnitDefaults) subject).addTenantDiscriminatorColumn(); + column.setSpecifiedName(ReadOnlyTenantDiscriminatorColumn2_3.DEFAULT_NAME); + } + + public ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getDefaultTenantDiscriminatorColumns(OrmPersistenceUnitDefaults subject) { + return EmptyListIterable.instance(); + } + + public int getDefaultTenantDiscriminatorColumnsSize(OrmPersistenceUnitDefaults subject) { + return 0; + } + + public String getDefaultTenantDiscriminatorsListPropertyName() { + return ""; //$NON-NLS-1$ + } + + public ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getSpecifiedTenantDiscriminatorColumns(OrmPersistenceUnitDefaults subject) { + return new SuperListIterableWrapper<ReadOnlyTenantDiscriminatorColumn2_3>(((EclipseLinkPersistenceUnitDefaults) subject).getTenantDiscriminatorColumns()); + } + + public int getSpecifiedTenantDiscriminatorColumnsSize(OrmPersistenceUnitDefaults subject) { + return ((EclipseLinkPersistenceUnitDefaults) subject).getTenantDiscriminatorColumnsSize(); + } + + public String getSpecifiedTenantDiscriminatorsListPropertyName() { + return EclipseLinkPersistenceUnitDefaults.TENANT_DISCRIMINATOR_COLUMNS_LIST; + } + + public boolean hasSpecifiedTenantDiscriminatorColumns(OrmPersistenceUnitDefaults subject) { + return ((EclipseLinkPersistenceUnitDefaults) subject).hasTenantDiscriminatorColumns(); + } + + public void removeTenantDiscriminatorColumns(OrmPersistenceUnitDefaults subject, int[] selectedIndices) { + for (int index = selectedIndices.length; index-- > 0; ) { + ((EclipseLinkPersistenceUnitDefaults) subject).removeTenantDiscriminatorColumn(selectedIndices[index]); + } + } + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_0DetailsProvider.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_0DetailsProvider.java index eebe5ceeee..393e154fdb 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_0DetailsProvider.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_0DetailsProvider.java @@ -23,7 +23,7 @@ import org.eclipse.swt.widgets.Composite; * when the information comes from the XML file (either from the persistence * configuration or from the Mappings Descriptor). * - * @version 2.2 + * @version 3.1 * @since 2.2 */ public class EclipseLinkEntityMappings2_0DetailsProvider @@ -53,9 +53,7 @@ public class EclipseLinkEntityMappings2_0DetailsProvider protected boolean providesDetails(JptResourceType resourceType) { return resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_0_RESOURCE_TYPE) || resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_1_RESOURCE_TYPE) || - resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_2_RESOURCE_TYPE) || - resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_3_RESOURCE_TYPE) || - resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_4_RESOURCE_TYPE); + resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_2_RESOURCE_TYPE); } public JpaDetailsPage<? extends JpaStructureNode> buildDetailsPage( diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_3DetailsPage.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_3DetailsPage.java new file mode 100644 index 0000000000..fb5f43a3e1 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_3DetailsPage.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; + +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.jpa.ui.internal.jpa2.details.orm.EntityMappingsGenerators2_0Composite; +import org.eclipse.jpt.jpa.ui.internal.jpa2.details.orm.OrmQueries2_0Composite; +import org.eclipse.swt.widgets.Composite; + +/** + * Here the layout of this pane: + * <pre> + * ----------------------------------------------------------------------------- + * | ------------------------------------------------------------------------- | + * | | | | + * | | XmlPackageChooser | | + * | | | | + * | ------------------------------------------------------------------------- | + * | ------------------------------------------------------------ | + * | Schema: | SchemaCombo | | + * | ------------------------------------------------------------ | + * | ------------------------------------------------------------ | + * | Catalog: | CatalogCombo | | + * | ------------------------------------------------------------ | + * | ------------------------------------------------------------ | + * | Access Type: | |v| | + * | ------------------------------------------------------------ | + * | | + * | ------------------------------------------------------------------------- | + * | | | | + * | | PersistenceUnitMetadataComposite | | + * | | | | + * | ------------------------------------------------------------------------- | + * | ------------------------------------------------------------------------- | + * | | | | + * | | OrmGeneratorsComposite | | + * | | | | + * | ------------------------------------------------------------------------- | + * | ------------------------------------------------------------------------- | + * | | | | + * | | OrmQueriesComposite | | + * | | | | + * | ------------------------------------------------------------------------- | + * | ------------------------------------------------------------------------- | + * | | | | + * | | ConvertersComposite | | + * | | | | + * | ------------------------------------------------------------------------- | + * | ------------------------------------------------------------------------- | + * | | | | + * | | TenantDiscriminatorColumnsComposite | | + * | | | | + * | ------------------------------------------------------------------------- | + * -----------------------------------------------------------------------------</pre> + * + * + * @version 3.1 + * @since 3.1 + */ +public class EclipseLinkEntityMappings2_3DetailsPage extends AbstractEclipseLinkEntityMappingsDetailsPage +{ + /** + * Creates a new <code>EclipseLinkEntityMappingsDetailsPage</code>. + * + * @param parent The parent container + * @param widgetFactory The factory used to create various common widgets + */ + public EclipseLinkEntityMappings2_3DetailsPage(Composite parent, + WidgetFactory widgetFactory) { + + super(parent, widgetFactory); + } + + @Override + protected void initializeLayout(Composite container) { + this.initializeEntityMappingsCollapsibleSection(container); + this.initializePersistenceUnitMetadataCollapsibleSection(container); + this.initializeGeneratorsCollapsibleSection(container); + this.initializeQueriesCollapsibleSection(container); + this.initializeConvertersCollapsibleSection(container); + this.initializeMultitenancyCollapsibleSection(container); + } + + @Override + protected void initializeGeneratorsCollapsibleSection(Composite container) { + new EntityMappingsGenerators2_0Composite(this, container); + } + + @Override + protected void initializeQueriesCollapsibleSection(Composite container) { + new OrmQueries2_0Composite(this, container); + } + + @Override + protected void initializePersistenceUnitMetadataCollapsibleSection(Composite container) { + new EclipseLink2_3PersistenceUnitMetadataComposite( + this, + buildPersistentUnitMetadataHolder(), + addSubPane(container, 5) + ); + } + + protected void initializeMultitenancyCollapsibleSection(Composite container) { + new EclipseLinkEntityMappingsTenantDiscriminatorColumnsComposite(this, container).getControl(); + } + +}
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_3DetailsProvider.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_3DetailsProvider.java new file mode 100644 index 0000000000..f52aa8b2ac --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappings2_3DetailsProvider.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; + +import org.eclipse.jpt.common.core.JptResourceType; +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.jpa.core.JpaStructureNode; +import org.eclipse.jpt.jpa.eclipselink.core.JptJpaEclipseLinkCorePlugin; +import org.eclipse.jpt.jpa.ui.details.JpaDetailsPage; +import org.eclipse.jpt.jpa.ui.details.JpaDetailsProvider; +import org.eclipse.jpt.jpa.ui.internal.details.AbstractEntityMappingsDetailsProvider; +import org.eclipse.swt.widgets.Composite; + +/** + * This provider is responsible for creating the {@link JpaDetailsPage} + * when the information comes from the XML file (either from the persistence + * configuration or from the Mappings Descriptor). + * + * @version 3.1 + * @since 3.1 + */ +public class EclipseLinkEntityMappings2_3DetailsProvider + extends AbstractEntityMappingsDetailsProvider +{ + // singleton + private static final JpaDetailsProvider INSTANCE = new EclipseLinkEntityMappings2_3DetailsProvider(); + + + /** + * Return the singleton + */ + public static JpaDetailsProvider instance() { + return INSTANCE; + } + + + /** + * Enforce singleton usage + */ + private EclipseLinkEntityMappings2_3DetailsProvider() { + super(); + } + + + @Override + protected boolean providesDetails(JptResourceType resourceType) { + return resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_3_RESOURCE_TYPE) || + resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_4_RESOURCE_TYPE); + } + + public JpaDetailsPage<? extends JpaStructureNode> buildDetailsPage( + Composite parent, + WidgetFactory widgetFactory) { + + return new EclipseLinkEntityMappings2_3DetailsPage(parent, widgetFactory); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappingsTenantDiscriminatorColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappingsTenantDiscriminatorColumnsComposite.java new file mode 100644 index 0000000000..bdc6fb4156 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkEntityMappingsTenantDiscriminatorColumnsComposite.java @@ -0,0 +1,247 @@ +/******************************************************************************* +* Copyright (c) 2011 Oracle. All rights reserved. +* This program and the accompanying materials are made available under the +* terms of the Eclipse Public License v1.0, which accompanies this distribution +* and is available at http://www.eclipse.org/legal/epl-v10.html. +* +* Contributors: +* Oracle - initial API and implementation +*******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; + +import org.eclipse.jpt.common.ui.internal.widgets.Pane; +import org.eclipse.jpt.common.utility.internal.iterables.ListIterable; +import org.eclipse.jpt.common.utility.internal.iterables.SuperListIterableWrapper; +import org.eclipse.jpt.common.utility.internal.model.value.CachingTransformationPropertyValueModel; +import org.eclipse.jpt.common.utility.internal.model.value.ListAspectAdapter; +import org.eclipse.jpt.common.utility.internal.model.value.ListPropertyValueModelAdapter; +import org.eclipse.jpt.common.utility.internal.model.value.ReadOnlyWritablePropertyValueModelWrapper; +import org.eclipse.jpt.common.utility.internal.model.value.ValueListAdapter; +import org.eclipse.jpt.common.utility.model.event.StateChangeEvent; +import org.eclipse.jpt.common.utility.model.listener.StateChangeListener; +import org.eclipse.jpt.common.utility.model.value.ListValueModel; +import org.eclipse.jpt.common.utility.model.value.WritablePropertyValueModel; +import org.eclipse.jpt.jpa.core.context.orm.EntityMappings; +import org.eclipse.jpt.jpa.eclipselink.core.context.ReadOnlyTenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.TenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkEntityMappings; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmTenantDiscriminatorColumn2_3; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.TenantDiscriminatorColumnsComposite; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.TenantDiscriminatorColumnsComposite.TenantDiscriminatorColumnsEditor; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Group; + +public class EclipseLinkEntityMappingsTenantDiscriminatorColumnsComposite extends Pane<EntityMappings> { + + private TenantDiscriminatorColumnsComposite<EntityMappings> tenantDiscriminatorColumnsComposite; + + public EclipseLinkEntityMappingsTenantDiscriminatorColumnsComposite(Pane<? extends EntityMappings> parentPane, + Composite parent) { + + super(parentPane, parent); + } + + + @Override + protected void initializeLayout(Composite container) { + + container = this.addCollapsibleSection( + container, + EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_multitenancy + ); + + // Tenant discriminator columns group pane + Group tenantDiscriminatorColumnGroupPane = addTitledGroup( + container, + EclipseLinkUiDetailsMessages.TenantDiscriminatorColumns_groupLabel + ); + + // Override Default Tenant Discriminator Columns check box + addCheckBox( + addSubPane(tenantDiscriminatorColumnGroupPane, 8), + EclipseLinkUiDetailsMessages.EclipseLinkMultitenancy_overrideDefaultTenantDiscriminatorColumns, + buildOverrideDefaultTenantDiscriminatorColumnHolder(), + null + ); + + this.tenantDiscriminatorColumnsComposite = this.buildTenantDiscriminatorColumnsComposite(tenantDiscriminatorColumnGroupPane); + + this.tenantDiscriminatorColumnsComposite.installListPaneEnabler(new TenantDiscriminatorColumnPaneEnablerHolder()); + } + + protected TenantDiscriminatorColumnsComposite<EntityMappings> buildTenantDiscriminatorColumnsComposite(Composite container) { + return new TenantDiscriminatorColumnsComposite<EntityMappings>( + getSubjectHolder(), + container, + getWidgetFactory(), + buildTenantDiscriminatorColumnsEditor()); + } + + + protected TenantDiscriminatorColumnsEditor<EntityMappings> buildTenantDiscriminatorColumnsEditor() { + return new TenantDiscriminatorColumnsProvider(); + } + + class TenantDiscriminatorColumnsProvider implements TenantDiscriminatorColumnsEditor<EntityMappings> { + + public void addTenantDiscriminatorColumn(EntityMappings subject) { + OrmTenantDiscriminatorColumn2_3 column = ((EclipseLinkEntityMappings) subject).addSpecifiedTenantDiscriminatorColumn(); + column.setSpecifiedName(ReadOnlyTenantDiscriminatorColumn2_3.DEFAULT_NAME); + } + + public ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getDefaultTenantDiscriminatorColumns(EntityMappings subject) { + return new SuperListIterableWrapper<ReadOnlyTenantDiscriminatorColumn2_3>(((EclipseLinkEntityMappings) subject).getDefaultTenantDiscriminatorColumns()); + } + + public int getDefaultTenantDiscriminatorColumnsSize(EntityMappings subject) { + return ((EclipseLinkEntityMappings) subject).getDefaultTenantDiscriminatorColumnsSize(); + } + + public String getDefaultTenantDiscriminatorsListPropertyName() { + return EclipseLinkEntityMappings.DEFAULT_TENANT_DISCRIMINATOR_COLUMNS_LIST; + } + + public ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getSpecifiedTenantDiscriminatorColumns(EntityMappings subject) { + return new SuperListIterableWrapper<ReadOnlyTenantDiscriminatorColumn2_3>(((EclipseLinkEntityMappings) subject).getSpecifiedTenantDiscriminatorColumns()); + } + + public int getSpecifiedTenantDiscriminatorColumnsSize(EntityMappings subject) { + return ((EclipseLinkEntityMappings) subject).getSpecifiedTenantDiscriminatorColumnsSize(); + } + + public String getSpecifiedTenantDiscriminatorsListPropertyName() { + return EclipseLinkEntityMappings.SPECIFIED_TENANT_DISCRIMINATOR_COLUMNS_LIST; + } + + public boolean hasSpecifiedTenantDiscriminatorColumns(EntityMappings subject) { + return ((EclipseLinkEntityMappings) subject).hasSpecifiedTenantDiscriminatorColumns(); + } + + public void removeTenantDiscriminatorColumns(EntityMappings subject, int[] selectedIndices) { + for (int index = selectedIndices.length; index-- > 0; ) { + ((EclipseLinkEntityMappings) subject).removeSpecifiedTenantDiscriminatorColumn(selectedIndices[index]); + } + } + } + + void setSelectedTenantDiscriminatorColumn(ReadOnlyTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn) { + this.tenantDiscriminatorColumnsComposite.setSelectedTenantDiscriminatorColumn(tenantDiscriminatorColumn); + } + + private WritablePropertyValueModel<Boolean> buildOverrideDefaultTenantDiscriminatorColumnHolder() { + return new OverrideDefaultTenantDiscriminatorColumnHolder(); + } + + ListValueModel<ReadOnlyTenantDiscriminatorColumn2_3> buildSpecifiedTenantDiscriminatorColumnsListHolder() { + return new ListAspectAdapter<EntityMappings, ReadOnlyTenantDiscriminatorColumn2_3>( + getSubjectHolder(), EclipseLinkEntityMappings.SPECIFIED_TENANT_DISCRIMINATOR_COLUMNS_LIST) { + @Override + protected ListIterable<ReadOnlyTenantDiscriminatorColumn2_3> getListIterable() { + return new SuperListIterableWrapper<ReadOnlyTenantDiscriminatorColumn2_3>(((EclipseLinkEntityMappings) this.subject).getSpecifiedTenantDiscriminatorColumns()); + } + + @Override + protected int size_() { + return ((EclipseLinkEntityMappings) this.subject).getSpecifiedTenantDiscriminatorColumnsSize(); + } + }; + } + + private class OverrideDefaultTenantDiscriminatorColumnHolder + extends ListPropertyValueModelAdapter<Boolean> + implements WritablePropertyValueModel<Boolean> + { + public OverrideDefaultTenantDiscriminatorColumnHolder() { + super(buildSpecifiedTenantDiscriminatorColumnsListHolder()); + } + + @Override + protected Boolean buildValue() { + return Boolean.valueOf(this.listHolder.size() > 0); + } + + public void setValue(Boolean value) { + updateTenantDiscriminatorColumns(value.booleanValue()); + } + + private void updateTenantDiscriminatorColumns(boolean selected) { + if (isPopulating()) { + return; + } + + setPopulating(true); + + try { + EclipseLinkEntityMappings subject = (EclipseLinkEntityMappings) getSubject(); + + if (selected) { + TenantDiscriminatorColumn2_3 newTenantDiscriminatorColumn = subject.addSpecifiedTenantDiscriminatorColumn(); + newTenantDiscriminatorColumn.setSpecifiedName(ReadOnlyTenantDiscriminatorColumn2_3.DEFAULT_NAME); + } + // Remove all the specified tenant discriminator columns + else { + for (int index = subject.getSpecifiedTenantDiscriminatorColumnsSize(); --index >= 0; ) { + subject.removeSpecifiedTenantDiscriminatorColumn(index); + } + } + } + finally { + setPopulating(false); + } + } + } + + private class TenantDiscriminatorColumnPaneEnablerHolder + extends CachingTransformationPropertyValueModel<EntityMappings, Boolean> + { + private StateChangeListener stateChangeListener; + + public TenantDiscriminatorColumnPaneEnablerHolder() { + super( + new ValueListAdapter<EntityMappings>( + new ReadOnlyWritablePropertyValueModelWrapper<EntityMappings>(getSubjectHolder()), + EclipseLinkEntityMappings.SPECIFIED_TENANT_DISCRIMINATOR_COLUMNS_LIST)); + this.stateChangeListener = buildStateChangeListener(); + } + + private StateChangeListener buildStateChangeListener() { + return new StateChangeListener() { + public void stateChanged(StateChangeEvent event) { + valueStateChanged(); + } + }; + } + + void valueStateChanged() { + Object oldValue = this.cachedValue; + Object newValue = transformNew(this.valueHolder.getValue()); + firePropertyChanged(VALUE, oldValue, newValue); + } + + @Override + protected Boolean transform(EntityMappings value) { + if (value == null) { + return Boolean.FALSE; + } + return super.transform(value); + } + + @Override + protected Boolean transform_(EntityMappings value) { + return Boolean.valueOf(((EclipseLinkEntityMappings) value).getSpecifiedTenantDiscriminatorColumnsSize() > 0); + } + + @Override + protected void engageModel() { + super.engageModel(); + this.valueHolder.addStateChangeListener(this.stateChangeListener); + } + + @Override + protected void disengageModel() { + this.valueHolder.removeStateChangeListener(this.stateChangeListener); + super.disengageModel(); + } + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_1UiDefinition.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_1UiDefinition.java index 87f3f2dbb4..582b4c1251 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_1UiDefinition.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_1UiDefinition.java @@ -28,6 +28,7 @@ import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmEntityUiDefinition; import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmIdMappingUiDefinition; import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmManyToManyMappingUiDefinition; import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmManyToOneMappingUiDefinition; +import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmMappedSuperclassUiDefinition; import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmOneToManyMappingUiDefinition; import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmOneToOneMappingUiDefinition; import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmTransientMappingUiDefinition; @@ -52,7 +53,7 @@ public class EclipseLinkOrmXml2_1UiDefinition extends AbstractOrmXmlResourceUiDe /** * Enforce singleton usage */ - private EclipseLinkOrmXml2_1UiDefinition() { + protected EclipseLinkOrmXml2_1UiDefinition() { super(); } @@ -94,7 +95,7 @@ public class EclipseLinkOrmXml2_1UiDefinition extends AbstractOrmXmlResourceUiDe @Override protected void addOrmTypeMappingUiDefinitionsTo(List<OrmTypeMappingUiDefinition<? extends TypeMapping>> definitions) { definitions.add(OrmEntityUiDefinition.instance()); - definitions.add(OrmEclipseLinkMappedSuperclass2_1UiDefinition.instance()); + definitions.add(OrmMappedSuperclassUiDefinition.instance()); definitions.add(OrmEmbeddableUiDefinition.instance()); } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_1UiFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_1UiFactory.java index e16c8322c9..837f7e82d6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_1UiFactory.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_1UiFactory.java @@ -11,8 +11,8 @@ package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; import org.eclipse.jpt.common.ui.WidgetFactory; import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.orm.OrmMappedSuperclass; import org.eclipse.jpt.jpa.core.jpa2.context.orm.OrmElementCollectionMapping2_0; -import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMappedSuperclass; import org.eclipse.jpt.jpa.ui.details.JpaComposite; import org.eclipse.swt.widgets.Composite; @@ -20,7 +20,6 @@ public class EclipseLinkOrmXml2_1UiFactory extends EclipseLinkOrmXml2_0UiFactory { - @Override public JpaComposite createOrmElementCollectionMapping2_0Composite( PropertyValueModel<OrmElementCollectionMapping2_0> subjectHolder, @@ -28,9 +27,10 @@ public class EclipseLinkOrmXml2_1UiFactory WidgetFactory widgetFactory) { return new OrmEclipseLinkElementCollectionMapping2_1Composite(subjectHolder, parent, widgetFactory); } - - public JpaComposite createOrmEclipseLinkMappedSuperclass2_1Composite( - PropertyValueModel<OrmEclipseLinkMappedSuperclass> subjectHolder, + + @Override + public JpaComposite createOrmMappedSuperclassComposite( + PropertyValueModel<OrmMappedSuperclass> subjectHolder, Composite parent, WidgetFactory widgetFactory) { return new OrmEclipseLinkMappedSuperclass2_1Composite(subjectHolder, parent, widgetFactory); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_2UiDefinition.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_2UiDefinition.java index 4505b52c9b..56eb710775 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_2UiDefinition.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_2UiDefinition.java @@ -9,34 +9,11 @@ ******************************************************************************/ package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; -import java.util.List; - import org.eclipse.jpt.common.core.JptResourceType; -import org.eclipse.jpt.jpa.core.context.AttributeMapping; -import org.eclipse.jpt.jpa.core.context.TypeMapping; import org.eclipse.jpt.jpa.eclipselink.core.JptJpaEclipseLinkCorePlugin; -import org.eclipse.jpt.jpa.eclipselink.ui.internal.structure.EclipseLinkOrmResourceModelStructureProvider; import org.eclipse.jpt.jpa.ui.ResourceUiDefinition; -import org.eclipse.jpt.jpa.ui.details.orm.OrmAttributeMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.details.orm.OrmTypeMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.details.orm.OrmXmlUiFactory; -import org.eclipse.jpt.jpa.ui.internal.details.orm.AbstractOrmXmlResourceUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmBasicMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmEmbeddableUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmEmbeddedIdMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmEmbeddedMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmEntityUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmIdMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmManyToManyMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmManyToOneMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmOneToManyMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmOneToOneMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmTransientMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.details.orm.OrmVersionMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.internal.jpa2.details.orm.OrmElementCollectionMapping2_0UiDefinition; -import org.eclipse.jpt.jpa.ui.structure.JpaStructureProvider; -public class EclipseLinkOrmXml2_2UiDefinition extends AbstractOrmXmlResourceUiDefinition +public class EclipseLinkOrmXml2_2UiDefinition extends EclipseLinkOrmXml2_1UiDefinition { // singleton private static final ResourceUiDefinition INSTANCE = new EclipseLinkOrmXml2_2UiDefinition(); @@ -53,49 +30,13 @@ public class EclipseLinkOrmXml2_2UiDefinition extends AbstractOrmXmlResourceUiDe /** * Enforce singleton usage */ - protected EclipseLinkOrmXml2_2UiDefinition() { + private EclipseLinkOrmXml2_2UiDefinition() { super(); } @Override - protected OrmXmlUiFactory buildOrmXmlUiFactory() { - return new EclipseLinkOrmXml2_1UiFactory(); - } - public boolean providesUi(JptResourceType resourceType) { return resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_2_RESOURCE_TYPE); } - - public JpaStructureProvider getStructureProvider() { - return EclipseLinkOrmResourceModelStructureProvider.instance(); - } - - @Override - protected void addOrmAttributeMappingUiDefinitionsTo(List<OrmAttributeMappingUiDefinition<? extends AttributeMapping>> definitions) { - definitions.add(OrmIdMappingUiDefinition.instance()); - definitions.add(OrmEmbeddedIdMappingUiDefinition.instance()); - definitions.add(OrmBasicMappingUiDefinition.instance()); - definitions.add(OrmVersionMappingUiDefinition.instance()); - definitions.add(OrmManyToOneMappingUiDefinition.instance()); - definitions.add(OrmOneToManyMappingUiDefinition.instance()); - definitions.add(OrmOneToOneMappingUiDefinition.instance()); - definitions.add(OrmManyToManyMappingUiDefinition.instance()); - definitions.add(OrmEmbeddedMappingUiDefinition.instance()); - definitions.add(OrmTransientMappingUiDefinition.instance()); - - definitions.add(OrmEclipseLinkBasicCollectionMappingUiDefinition.instance()); - definitions.add(OrmEclipseLinkBasicMapMappingUiDefinition.instance()); - definitions.add(OrmEclipseLinkVariableOneToOneMappingUiDefinition.instance()); - definitions.add(OrmEclipseLinkTransformationMappingUiDefinition.instance()); - - definitions.add(OrmElementCollectionMapping2_0UiDefinition.instance()); - } - - @Override - protected void addOrmTypeMappingUiDefinitionsTo(List<OrmTypeMappingUiDefinition<? extends TypeMapping>> definitions) { - definitions.add(OrmEntityUiDefinition.instance()); - definitions.add(OrmEclipseLinkMappedSuperclass2_1UiDefinition.instance()); - definitions.add(OrmEmbeddableUiDefinition.instance()); - } } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_3UiDefinition.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_3UiDefinition.java index 750582b888..53d212bb9a 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_3UiDefinition.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_3UiDefinition.java @@ -12,31 +12,36 @@ package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; import org.eclipse.jpt.common.core.JptResourceType; import org.eclipse.jpt.jpa.eclipselink.core.JptJpaEclipseLinkCorePlugin; import org.eclipse.jpt.jpa.ui.ResourceUiDefinition; +import org.eclipse.jpt.jpa.ui.details.orm.OrmXmlUiFactory; public class EclipseLinkOrmXml2_3UiDefinition - extends EclipseLinkOrmXml2_2UiDefinition { + extends EclipseLinkOrmXml2_1UiDefinition { // singleton private static final ResourceUiDefinition INSTANCE = new EclipseLinkOrmXml2_3UiDefinition(); - - + + /** * Return the singleton */ public static ResourceUiDefinition instance() { return INSTANCE; } - - + + /** * Enforce singleton usage */ private EclipseLinkOrmXml2_3UiDefinition() { super(); } - - + + @Override + protected OrmXmlUiFactory buildOrmXmlUiFactory() { + return new EclipseLinkOrmXml2_3UiFactory(); + } + @Override public boolean providesUi(JptResourceType resourceType) { return resourceType.equals(JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_2_3_RESOURCE_TYPE); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_3UiFactory.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_3UiFactory.java new file mode 100644 index 0000000000..fe0ce5fc9a --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_3UiFactory.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; + +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.orm.OrmEntity; +import org.eclipse.jpt.jpa.core.context.orm.OrmMappedSuperclass; +import org.eclipse.jpt.jpa.ui.details.JpaComposite; +import org.eclipse.swt.widgets.Composite; + +public class EclipseLinkOrmXml2_3UiFactory + extends EclipseLinkOrmXml2_0UiFactory +{ + @Override + public JpaComposite createOrmEntityComposite( + PropertyValueModel<OrmEntity> subjectHolder, + Composite parent, + WidgetFactory widgetFactory) { + return new OrmEclipseLinkEntity2_3Composite(subjectHolder, parent, widgetFactory); + } + + @Override + public JpaComposite createOrmMappedSuperclassComposite( + PropertyValueModel<OrmMappedSuperclass> subjectHolder, + Composite parent, + WidgetFactory widgetFactory) { + return new OrmEclipseLinkMappedSuperclass2_3Composite(subjectHolder, parent, widgetFactory); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_4UiDefinition.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_4UiDefinition.java index afa224f5ec..72e191efb0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_4UiDefinition.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/EclipseLinkOrmXml2_4UiDefinition.java @@ -12,10 +12,11 @@ package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; import org.eclipse.jpt.common.core.JptResourceType; import org.eclipse.jpt.jpa.eclipselink.core.JptJpaEclipseLinkCorePlugin; import org.eclipse.jpt.jpa.ui.ResourceUiDefinition; +import org.eclipse.jpt.jpa.ui.details.orm.OrmXmlUiFactory; public class EclipseLinkOrmXml2_4UiDefinition - extends EclipseLinkOrmXml2_2UiDefinition { + extends EclipseLinkOrmXml2_1UiDefinition { // singleton private static final ResourceUiDefinition INSTANCE = new EclipseLinkOrmXml2_4UiDefinition(); @@ -36,6 +37,10 @@ public class EclipseLinkOrmXml2_4UiDefinition super(); } + @Override + protected OrmXmlUiFactory buildOrmXmlUiFactory() { + return new EclipseLinkOrmXml2_3UiFactory(); + } @Override public boolean providesUi(JptResourceType resourceType) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntity2_0Composite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntity2_0Composite.java index ab5dbf0bb1..280bd08ab1 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntity2_0Composite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntity2_0Composite.java @@ -12,16 +12,10 @@ package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; import org.eclipse.jpt.common.ui.WidgetFactory; import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.jpa.core.context.GeneratorContainer; -import org.eclipse.jpt.jpa.core.context.QueryContainer; import org.eclipse.jpt.jpa.core.context.orm.OrmEntity; -import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkCaching; -import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Entity2_0OverridesComposite; -import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Generation2_0Composite; -import org.eclipse.jpt.jpa.ui.internal.jpa2.details.Queries2_0Composite; import org.eclipse.swt.widgets.Composite; -public class OrmEclipseLinkEntity2_0Composite extends AbstractOrmEclipseLinkEntityComposite +public class OrmEclipseLinkEntity2_0Composite extends AbstractOrmEclipseLinkEntity2_xComposite { public OrmEclipseLinkEntity2_0Composite( PropertyValueModel<? extends OrmEntity> subjectHolder, @@ -29,24 +23,4 @@ public class OrmEclipseLinkEntity2_0Composite extends AbstractOrmEclipseLinkEnti super(subjectHolder, parent, widgetFactory); } - @Override - protected void initializeAttributeOverridesSection(Composite container) { - new Entity2_0OverridesComposite(this, container); - } - - @Override - protected void initializeGeneratorsSection(Composite container, PropertyValueModel<GeneratorContainer> generatorContainerHolder) { - new Generation2_0Composite(this, generatorContainerHolder, container); - } - - @Override - protected void initializeCachingSection(Composite container, PropertyValueModel<OrmEclipseLinkCaching> cachingHolder) { - new OrmEclipseLinkCaching2_0Composite(this, cachingHolder, container); - } - - @Override - protected void initializeQueriesSection(Composite container, PropertyValueModel<QueryContainer> queryContainerHolder) { - new Queries2_0Composite(this, queryContainerHolder, container); - } - } diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntity2_3Composite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntity2_3Composite.java new file mode 100644 index 0000000000..f2195a2840 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkEntity2_3Composite.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Oracle - initial API and implementation + *******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; + +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.orm.OrmEntity; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkEntity; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMultitenancy2_3; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkMultitenancyComposite; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages; +import org.eclipse.swt.widgets.Composite; + +public class OrmEclipseLinkEntity2_3Composite extends AbstractOrmEclipseLinkEntity2_xComposite +{ + public OrmEclipseLinkEntity2_3Composite( + PropertyValueModel<? extends OrmEntity> subjectHolder, + Composite parent, WidgetFactory widgetFactory) { + super(subjectHolder, parent, widgetFactory); + } + + @Override + protected void initializeLayout(Composite container) { + this.initializeEntityCollapsibleSection(container); + this.initializeCachingCollapsibleSectionPane(container); + this.initializeQueriesCollapsibleSection(container); + this.initializeInheritanceCollapsibleSection(container); + this.initializeAttributeOverridesCollapsibleSection(container); + this.initializeMultitenancyCollapsibleSectionPane(container); + this.initializeGeneratorsCollapsibleSection(container); + this.initializeConvertersCollapsibleSection(container); + this.initializeSecondaryTablesCollapsibleSection(container); + this.initializeAdvancedCollapsibleSection(container); + } + + protected void initializeMultitenancyCollapsibleSectionPane(Composite container) { + container = addCollapsibleSection( + container, + EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_multitenancy); + initializeMultitenancySection(container, buildMultitenancyHolder()); + } + + protected void initializeMultitenancySection(Composite container, PropertyValueModel<OrmEclipseLinkMultitenancy2_3> multitenancyHolder) { + new EclipseLinkMultitenancyComposite(this, multitenancyHolder, container); + } + + private PropertyAspectAdapter<OrmEntity, OrmEclipseLinkMultitenancy2_3> buildMultitenancyHolder() { + return new PropertyAspectAdapter<OrmEntity, OrmEclipseLinkMultitenancy2_3>(getSubjectHolder()) { + @Override + protected OrmEclipseLinkMultitenancy2_3 buildValue_() { + return ((OrmEclipseLinkEntity) this.subject).getMultitenancy(); + } + }; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_1Composite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_1Composite.java index 0b58d22e92..858af0c74e 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_1Composite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_1Composite.java @@ -24,9 +24,9 @@ public class OrmEclipseLinkMappedSuperclass2_1Composite extends AbstractOrmEclipseLinkMappedSuperclassComposite { public OrmEclipseLinkMappedSuperclass2_1Composite( - PropertyValueModel<? extends OrmEclipseLinkMappedSuperclass> subjectHolder, + PropertyValueModel<? extends OrmMappedSuperclass> subjectHolder, Composite parent, WidgetFactory widgetFactory) { - + super(subjectHolder, parent, widgetFactory); } @@ -38,7 +38,7 @@ public class OrmEclipseLinkMappedSuperclass2_1Composite this.initializeConvertersCollapsibleSection(container); this.initializeAdvancedCollapsibleSection(container); } - + @Override protected void initializeCachingSection(Composite container, PropertyValueModel<OrmEclipseLinkCaching> cachingHolder) { new OrmEclipseLinkCaching2_0Composite(this, cachingHolder, container); @@ -55,7 +55,7 @@ public class OrmEclipseLinkMappedSuperclass2_1Composite protected void initializeQueriesSection(Composite container, PropertyValueModel<QueryContainer> queryContainerHolder) { new QueriesComposite(this, queryContainerHolder, container); } - + private PropertyValueModel<QueryContainer> buildQueryContainerHolder() { return new PropertyAspectAdapter<OrmMappedSuperclass, QueryContainer>( getSubjectHolder()) { diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_1UiDefinition.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_1UiDefinition.java deleted file mode 100644 index 13f132f89c..0000000000 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_1UiDefinition.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; - -import org.eclipse.jpt.common.ui.WidgetFactory; -import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; -import org.eclipse.jpt.jpa.core.context.PersistentType; -import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMappedSuperclass; -import org.eclipse.jpt.jpa.ui.details.JpaComposite; -import org.eclipse.jpt.jpa.ui.details.orm.OrmTypeMappingUiDefinition; -import org.eclipse.jpt.jpa.ui.details.orm.OrmXmlUiFactory; -import org.eclipse.jpt.jpa.ui.internal.details.AbstractMappedSuperclassUiDefinition; -import org.eclipse.swt.widgets.Composite; - -public class OrmEclipseLinkMappedSuperclass2_1UiDefinition extends - AbstractMappedSuperclassUiDefinition<PersistentType, OrmEclipseLinkMappedSuperclass> implements - OrmTypeMappingUiDefinition<OrmEclipseLinkMappedSuperclass> { - - // singleton - private static final OrmEclipseLinkMappedSuperclass2_1UiDefinition INSTANCE = - new OrmEclipseLinkMappedSuperclass2_1UiDefinition(); - - - /** - * Return the singleton. - */ - public static OrmTypeMappingUiDefinition<OrmEclipseLinkMappedSuperclass> instance() { - return INSTANCE; - } - - - /** - * Ensure single instance. - */ - private OrmEclipseLinkMappedSuperclass2_1UiDefinition() { - super(); - } - - - public JpaComposite buildTypeMappingComposite( - OrmXmlUiFactory factory, - PropertyValueModel<OrmEclipseLinkMappedSuperclass> subjectHolder, - Composite parent, - WidgetFactory widgetFactory) { - - return ((EclipseLinkOrmXml2_1UiFactory)factory). - createOrmEclipseLinkMappedSuperclass2_1Composite(subjectHolder, parent, widgetFactory); - } -} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_3Composite.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_3Composite.java new file mode 100644 index 0000000000..da19c373fc --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/details/orm/OrmEclipseLinkMappedSuperclass2_3Composite.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * Copyright (c) 2011 Oracle. All rights reserved. + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0, which accompanies this distribution + * and is available at http://www.eclipse.org/legal/epl-v10.html. + * + * Contributors: + * Oracle - initial API and implementation + ******************************************************************************/ +package org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm; + +import org.eclipse.jpt.common.ui.WidgetFactory; +import org.eclipse.jpt.common.utility.internal.model.value.PropertyAspectAdapter; +import org.eclipse.jpt.common.utility.model.value.PropertyValueModel; +import org.eclipse.jpt.jpa.core.context.QueryContainer; +import org.eclipse.jpt.jpa.core.context.orm.OrmMappedSuperclass; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkCaching; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMappedSuperclass; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMultitenancy2_3; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkMultitenancyComposite; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.EclipseLinkUiDetailsMessages; +import org.eclipse.jpt.jpa.ui.internal.details.QueriesComposite; +import org.eclipse.swt.widgets.Composite; + +public class OrmEclipseLinkMappedSuperclass2_3Composite + extends AbstractOrmEclipseLinkMappedSuperclassComposite { + + public OrmEclipseLinkMappedSuperclass2_3Composite( + PropertyValueModel<? extends OrmMappedSuperclass> subjectHolder, + Composite parent, WidgetFactory widgetFactory) { + + super(subjectHolder, parent, widgetFactory); + } + + @Override + protected void initializeLayout(Composite container) { + this.initializeMappedSuperclassCollapsibleSection(container); + this.initializeCachingCollapsibleSection(container); + this.initializeQueriesCollapsibleSection(container); + this.initializeMultitenancyCollapsibleSection(container); + this.initializeConvertersCollapsibleSection(container); + this.initializeAdvancedCollapsibleSection(container); + } + + @Override + protected void initializeCachingSection(Composite container, PropertyValueModel<OrmEclipseLinkCaching> cachingHolder) { + new OrmEclipseLinkCaching2_0Composite(this, cachingHolder, container); + } + + protected void initializeQueriesCollapsibleSection(Composite container) { + container = addCollapsibleSection( + container, + EclipseLinkUiDetailsMessages.EclipseLinkMappedSuperclassComposite_queries); + this.initializeQueriesSection(container, buildQueryContainerHolder()); + + } + + protected void initializeQueriesSection(Composite container, PropertyValueModel<QueryContainer> queryContainerHolder) { + new QueriesComposite(this, queryContainerHolder, container); + } + + private PropertyValueModel<QueryContainer> buildQueryContainerHolder() { + return new PropertyAspectAdapter<OrmMappedSuperclass, QueryContainer>( + getSubjectHolder()) { + @Override + protected QueryContainer buildValue_() { + return ((OrmEclipseLinkMappedSuperclass) this.subject).getQueryContainer(); + } + }; + } + + protected void initializeMultitenancyCollapsibleSection(Composite container) { + container = addCollapsibleSection( + container, + EclipseLinkUiDetailsMessages.EclipseLinkTypeMappingComposite_multitenancy); + this.initializeMultitenancySection(container, buildMultitenancyHolder()); + } + + protected void initializeMultitenancySection(Composite container, PropertyValueModel<OrmEclipseLinkMultitenancy2_3> multitenancyHolder) { + new EclipseLinkMultitenancyComposite(this, multitenancyHolder, container); + } + + private PropertyAspectAdapter<OrmMappedSuperclass, OrmEclipseLinkMultitenancy2_3> buildMultitenancyHolder() { + return new PropertyAspectAdapter<OrmMappedSuperclass, OrmEclipseLinkMultitenancy2_3>(getSubjectHolder()) { + @Override + protected OrmEclipseLinkMultitenancy2_3 buildValue_() { + return ((OrmEclipseLinkMappedSuperclass) this.subject).getMultitenancy(); + } + }; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/platform/EclipseLink2_3JpaPlatformUiProvider.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/platform/EclipseLink2_3JpaPlatformUiProvider.java index f289fec85c..f875175ff0 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/platform/EclipseLink2_3JpaPlatformUiProvider.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/platform/EclipseLink2_3JpaPlatformUiProvider.java @@ -10,8 +10,9 @@ package org.eclipse.jpt.jpa.eclipselink.ui.internal.platform; import java.util.List; -import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java.EclipseLink2_0JavaResourceUiDefinition; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java.EclipseLink2_3JavaResourceUiDefinition; import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappings2_0DetailsProvider; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappings2_3DetailsProvider; import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappingsDetailsProvider; import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkOrmXml1_1UiDefinition; import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkOrmXml1_2UiDefinition; @@ -71,6 +72,7 @@ public class EclipseLink2_3JpaPlatformUiProvider providers.add(EntityMappings2_0DetailsProvider.instance()); providers.add(EclipseLinkEntityMappingsDetailsProvider.instance()); providers.add(EclipseLinkEntityMappings2_0DetailsProvider.instance()); + providers.add(EclipseLinkEntityMappings2_3DetailsProvider.instance()); } @@ -78,7 +80,7 @@ public class EclipseLink2_3JpaPlatformUiProvider @Override protected void addResourceUiDefinitionsTo(List<ResourceUiDefinition> definitions) { - definitions.add(EclipseLink2_0JavaResourceUiDefinition.instance()); + definitions.add(EclipseLink2_3JavaResourceUiDefinition.instance()); definitions.add(OrmXmlUiDefinition.instance()); definitions.add(OrmXml2_0UiDefinition.instance()); definitions.add(EclipseLinkOrmXmlUiDefinition.instance()); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/platform/EclipseLink2_4JpaPlatformUiProvider.java b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/platform/EclipseLink2_4JpaPlatformUiProvider.java index 8e8139b8e3..f236928ee6 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/platform/EclipseLink2_4JpaPlatformUiProvider.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.eclipselink.ui/src/org/eclipse/jpt/jpa/eclipselink/ui/internal/platform/EclipseLink2_4JpaPlatformUiProvider.java @@ -10,8 +10,9 @@ package org.eclipse.jpt.jpa.eclipselink.ui.internal.platform; import java.util.List; -import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java.EclipseLink2_0JavaResourceUiDefinition; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.java.EclipseLink2_3JavaResourceUiDefinition; import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappings2_0DetailsProvider; +import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappings2_3DetailsProvider; import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkEntityMappingsDetailsProvider; import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkOrmXml1_1UiDefinition; import org.eclipse.jpt.jpa.eclipselink.ui.internal.details.orm.EclipseLinkOrmXml1_2UiDefinition; @@ -72,6 +73,7 @@ public class EclipseLink2_4JpaPlatformUiProvider providers.add(EntityMappings2_0DetailsProvider.instance()); providers.add(EclipseLinkEntityMappingsDetailsProvider.instance()); providers.add(EclipseLinkEntityMappings2_0DetailsProvider.instance()); + providers.add(EclipseLinkEntityMappings2_3DetailsProvider.instance()); } @@ -79,7 +81,7 @@ public class EclipseLink2_4JpaPlatformUiProvider @Override protected void addResourceUiDefinitionsTo(List<ResourceUiDefinition> definitions) { - definitions.add(EclipseLink2_0JavaResourceUiDefinition.instance()); + definitions.add(EclipseLink2_3JavaResourceUiDefinition.instance()); definitions.add(OrmXmlUiDefinition.instance()); definitions.add(OrmXml2_0UiDefinition.instance()); definitions.add(EclipseLinkOrmXmlUiDefinition.instance()); diff --git a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/orm/PersistenceUnitMetadataComposite.java b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/orm/PersistenceUnitMetadataComposite.java index cd52166754..dfd2d2ca4b 100644 --- a/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/orm/PersistenceUnitMetadataComposite.java +++ b/jpa/plugins/org.eclipse.jpt.jpa.ui/src/org/eclipse/jpt/jpa/ui/internal/details/orm/PersistenceUnitMetadataComposite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2010 Oracle. All rights reserved. + * Copyright (c) 2006, 2011 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. @@ -65,6 +65,8 @@ import org.eclipse.swt.widgets.Composite; */ public class PersistenceUnitMetadataComposite extends Pane<OrmPersistenceUnitMetadata> { + PropertyValueModel<OrmPersistenceUnitDefaults> persistenceUnitDefaultsHolder; + /** * Creates a new <code>PersistenceUnitMetadataComposite</code>. * @@ -79,9 +81,19 @@ public class PersistenceUnitMetadataComposite extends Pane<OrmPersistenceUnitMet super(parentPane, subjectHolder, parent, false); } - private EnumFormComboViewer<OrmPersistenceUnitDefaults, AccessType> addAccessTypeCombo(Composite container) { + @Override + protected void initialize() { + super.initialize(); + this.persistenceUnitDefaultsHolder = this.buildPersistenceUnitDefaultsHolder(); + } + + protected PropertyValueModel<OrmPersistenceUnitDefaults> getPersistenceUnitDefaultsHolder() { + return this.persistenceUnitDefaultsHolder; + } + + protected EnumFormComboViewer<OrmPersistenceUnitDefaults, AccessType> addAccessTypeCombo(Composite container) { - return new EnumFormComboViewer<OrmPersistenceUnitDefaults, AccessType>(this, buildPersistenceUnitDefaultsHolder(), container) { + return new EnumFormComboViewer<OrmPersistenceUnitDefaults, AccessType>(this, getPersistenceUnitDefaultsHolder(), container) { @Override protected void addPropertyNames(Collection<String> propertyNames) { @@ -103,7 +115,7 @@ public class PersistenceUnitMetadataComposite extends Pane<OrmPersistenceUnitMet protected String displayString(AccessType value) { return buildDisplayString( JptUiDetailsOrmMessages.class, - PersistenceUnitMetadataComposite.this, + PersistenceUnitMetadataComposite.class, value ); } @@ -120,8 +132,8 @@ public class PersistenceUnitMetadataComposite extends Pane<OrmPersistenceUnitMet }; } - private WritablePropertyValueModel<Boolean> buildCascadePersistHolder() { - return new PropertyAspectAdapter<OrmPersistenceUnitDefaults, Boolean>(buildPersistenceUnitDefaultsHolder(), OrmPersistenceUnitDefaults.CASCADE_PERSIST_PROPERTY) { + protected WritablePropertyValueModel<Boolean> buildCascadePersistHolder() { + return new PropertyAspectAdapter<OrmPersistenceUnitDefaults, Boolean>(getPersistenceUnitDefaultsHolder(), OrmPersistenceUnitDefaults.CASCADE_PERSIST_PROPERTY) { @Override protected Boolean buildValue_() { return Boolean.valueOf(this.subject.isCascadePersist()); @@ -134,9 +146,9 @@ public class PersistenceUnitMetadataComposite extends Pane<OrmPersistenceUnitMet }; } - private CatalogCombo<OrmPersistenceUnitDefaults> addCatalogCombo(Composite container) { + protected CatalogCombo<OrmPersistenceUnitDefaults> addCatalogCombo(Composite container) { - return new CatalogCombo<OrmPersistenceUnitDefaults>(this, buildPersistenceUnitDefaultsHolder(), container) { + return new CatalogCombo<OrmPersistenceUnitDefaults>(this, getPersistenceUnitDefaultsHolder(), container) { @Override protected void addPropertyNames(Collection<String> propertyNames) { @@ -171,9 +183,9 @@ public class PersistenceUnitMetadataComposite extends Pane<OrmPersistenceUnitMet }; } - private SchemaCombo<OrmPersistenceUnitDefaults> addSchemaCombo(Composite container) { + protected SchemaCombo<OrmPersistenceUnitDefaults> addSchemaCombo(Composite container) { - return new SchemaCombo<OrmPersistenceUnitDefaults>(this, buildPersistenceUnitDefaultsHolder(), container) { + return new SchemaCombo<OrmPersistenceUnitDefaults>(this, getPersistenceUnitDefaultsHolder(), container) { @Override protected void addPropertyNames(Collection<String> propertyNames) { @@ -205,7 +217,7 @@ public class PersistenceUnitMetadataComposite extends Pane<OrmPersistenceUnitMet }; } - private WritablePropertyValueModel<Boolean> buildXmlMappingMetadataCompleteHolder() { + protected WritablePropertyValueModel<Boolean> buildXmlMappingMetadataCompleteHolder() { return new PropertyAspectAdapter<OrmPersistenceUnitMetadata, Boolean>(getSubjectHolder(), OrmPersistenceUnitMetadata.XML_MAPPING_METADATA_COMPLETE_PROPERTY) { @Override protected Boolean buildValue_() { @@ -219,8 +231,8 @@ public class PersistenceUnitMetadataComposite extends Pane<OrmPersistenceUnitMet }; } - private WritablePropertyValueModel<Boolean> buildDelimitedIdentifiersHolder() { - return new PropertyAspectAdapter<OrmPersistenceUnitDefaults, Boolean>(buildPersistenceUnitDefaultsHolder(), OrmPersistenceUnitDefaults2_0.DELIMITED_IDENTIFIERS_PROPERTY) { + protected WritablePropertyValueModel<Boolean> buildDelimitedIdentifiersHolder() { + return new PropertyAspectAdapter<OrmPersistenceUnitDefaults, Boolean>(getPersistenceUnitDefaultsHolder(), OrmPersistenceUnitDefaults2_0.DELIMITED_IDENTIFIERS_PROPERTY) { @Override protected Boolean buildValue_() { return Boolean.valueOf(this.buildBooleanValue_()); diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/java/EclipseLink2_3JavaMultitenancyTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/java/EclipseLink2_3JavaMultitenancyTests.java index 99b0879243..24c8908fd9 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/java/EclipseLink2_3JavaMultitenancyTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/java/EclipseLink2_3JavaMultitenancyTests.java @@ -27,7 +27,7 @@ import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkEntity; import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaEclipseLinkMultitenancy2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.java.JavaTenantDiscriminatorColumn2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkEntityMappings; -import org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm.OrmEclipseLinkPersistenceUnitDefaults; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkPersistenceUnitDefaults; import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLink; import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLinkMultitenantAnnotation2_3; import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLinkTenantDiscriminatorColumnAnnotation2_3; @@ -526,7 +526,7 @@ public class EclipseLink2_3JavaMultitenancyTests extends EclipseLink2_3ContextMo assertFalse(multitenancy.isSpecifiedMultitenant()); assertEquals(0, multitenancy.getTenantDiscriminatorColumnsSize()); - OrmEclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (OrmEclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); + EclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (EclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); persistenceUnitDefaults.addTenantDiscriminatorColumn().setSpecifiedName("PU_TENANT_ID"); assertFalse(multitenancy.isMultitenant()); //not multitenant since inheritance strategy is table per class assertFalse(multitenancy.isSpecifiedMultitenant()); @@ -551,7 +551,7 @@ public class EclipseLink2_3JavaMultitenancyTests extends EclipseLink2_3ContextMo createTestEntity(); addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME); - OrmEclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (OrmEclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); + EclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (EclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); persistenceUnitDefaults.addTenantDiscriminatorColumn().setSpecifiedName("PU_TENANT_ID"); JavaEclipseLinkMultitenancy2_3 multitenancy = getJavaMultitenancy(); @@ -609,7 +609,7 @@ public class EclipseLink2_3JavaMultitenancyTests extends EclipseLink2_3ContextMo assertEquals(0, multitenancy.getTenantDiscriminatorColumnsSize()); - OrmEclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (OrmEclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); + EclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (EclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); persistenceUnitDefaults.addTenantDiscriminatorColumn().setSpecifiedName("PU_TENANT_ID"); multitenancy.setSpecifiedType(EclipseLinkMultitenantType2_3.SINGLE_TABLE); diff --git a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_3OrmMultitenancyTests.java b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_3OrmMultitenancyTests.java index 67bc93f53d..63d91583eb 100644 --- a/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_3OrmMultitenancyTests.java +++ b/jpa/tests/org.eclipse.jpt.jpa.eclipselink.core.tests/src/org/eclipse/jpt/jpa/eclipselink/core/tests/internal/context/orm/EclipseLink2_3OrmMultitenancyTests.java @@ -22,11 +22,11 @@ import org.eclipse.jpt.jpa.core.resource.java.JPA; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkEntity; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkMultitenantType2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkEntityMappings; +import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkPersistenceUnitDefaults; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkEntity; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMappedSuperclass; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkMultitenancy2_3; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmTenantDiscriminatorColumn2_3; -import org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm.OrmEclipseLinkPersistenceUnitDefaults; import org.eclipse.jpt.jpa.eclipselink.core.resource.java.EclipseLink; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.EclipseLinkOrmFactory; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlMultitenant; @@ -429,7 +429,7 @@ public class EclipseLink2_3OrmMultitenancyTests assertFalse(multitenancy.isSpecifiedMultitenant()); assertEquals(0, multitenancy.getTenantDiscriminatorColumnsSize()); - OrmEclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (OrmEclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); + EclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (EclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); persistenceUnitDefaults.addTenantDiscriminatorColumn().setSpecifiedName("PU_TENANT_ID"); assertFalse(multitenancy.isMultitenant()); //not multitenant since inheritance strategy is table per class assertFalse(multitenancy.isSpecifiedMultitenant()); @@ -454,7 +454,7 @@ public class EclipseLink2_3OrmMultitenancyTests createTestEntity(); OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, FULLY_QUALIFIED_TYPE_NAME); - OrmEclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (OrmEclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); + EclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (EclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); persistenceUnitDefaults.addTenantDiscriminatorColumn().setSpecifiedName("PU_TENANT_ID"); OrmEclipseLinkMultitenancy2_3 multitenancy = ((OrmEclipseLinkEntity) ormPersistentType.getMapping()).getMultitenancy(); @@ -504,7 +504,7 @@ public class EclipseLink2_3OrmMultitenancyTests assertEquals(0, multitenancy.getTenantDiscriminatorColumnsSize()); - OrmEclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (OrmEclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); + EclipseLinkPersistenceUnitDefaults persistenceUnitDefaults = (EclipseLinkPersistenceUnitDefaults) getMappingFile().getRoot().getPersistenceUnitMetadata().getPersistenceUnitDefaults(); persistenceUnitDefaults.addTenantDiscriminatorColumn().setSpecifiedName("PU_TENANT_ID"); multitenancy.setSpecifiedType(EclipseLinkMultitenantType2_3.SINGLE_TABLE); |