blob: 94ba20c0ce4bddbe6163ba6dd222309206e37018 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2016 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0, which accompanies this distribution
* and is available at https://www.eclipse.org/legal/epl-2.0/.
*
* Contributors:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jpt.common.core.utility.TextRange;
import org.eclipse.jpt.common.utility.internal.ObjectTools;
import org.eclipse.jpt.common.utility.internal.iterable.EmptyIterable;
import org.eclipse.jpt.common.utility.internal.iterable.EmptyListIterable;
import org.eclipse.jpt.common.utility.internal.iterable.IterableTools;
import org.eclipse.jpt.common.utility.iterable.ListIterable;
import org.eclipse.jpt.jpa.core.context.DiscriminatorType;
import org.eclipse.jpt.jpa.core.context.JpaContextModel;
import org.eclipse.jpt.jpa.core.context.NamedColumn;
import org.eclipse.jpt.jpa.core.context.NamedDiscriminatorColumn;
import org.eclipse.jpt.jpa.core.context.orm.OrmPersistenceUnitMetadata;
import org.eclipse.jpt.jpa.core.internal.context.JpaValidator;
import org.eclipse.jpt.jpa.core.internal.context.NullJpaValidator;
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.EclipseLinkTenantDiscriminatorColumn2_3;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3;
import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkPersistenceUnitDefaults;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.EclipseLinkOrmFactory;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlAccessMethods;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlPersistenceUnitDefaults;
import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlTenantDiscriminatorColumn;
/**
* EclipseLink <code>orm.xml</code> file
* <br>
* <code>persistence-unit-defaults</code> element
*/
public class EclipseLinkOrmPersistenceUnitDefaults
extends AbstractOrmPersistenceUnitDefaults
implements EclipseLinkPersistenceUnitDefaults
{
protected final ContextListContainer<EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3, XmlTenantDiscriminatorColumn> tenantDiscriminatorColumnContainer;
protected final EclipseLinkTenantDiscriminatorColumn2_3.ParentAdapter tenantDiscriminatorColumnParentAdapter;
protected String specifiedGetMethod;
protected String specifiedSetMethod;
// ********** constructor/initialization **********
public EclipseLinkOrmPersistenceUnitDefaults(OrmPersistenceUnitMetadata parent) {
super(parent);
this.tenantDiscriminatorColumnParentAdapter = this.buildTenantDiscriminatorColumnParentAdapter();
this.tenantDiscriminatorColumnContainer = this.buildTenantDiscriminatorColumnContainer();
this.specifiedGetMethod = this.buildSpecifiedGetMethod();
this.specifiedSetMethod = this.buildSpecifiedSetMethod();
}
@Override
protected XmlPersistenceUnitDefaults buildXmlPersistenceUnitDefaults() {
return EclipseLinkOrmFactory.eINSTANCE.createXmlPersistenceUnitDefaults();
}
@Override
protected XmlPersistenceUnitDefaults getXmlDefaults() {
return (XmlPersistenceUnitDefaults) super.getXmlDefaults();
}
@Override
protected XmlPersistenceUnitDefaults getXmlDefaultsForUpdate() {
return (XmlPersistenceUnitDefaults) super.getXmlDefaultsForUpdate();
}
// ********** synchronize/update **********
@Override
public void synchronizeWithResourceModel(IProgressMonitor monitor) {
super.synchronizeWithResourceModel(monitor);
this.syncTenantDiscriminatorColumns(monitor);
this.setSpecifiedGetMethod_(this.buildSpecifiedGetMethod());
this.setSpecifiedSetMethod_(this.buildSpecifiedSetMethod());
}
@Override
public void update(IProgressMonitor monitor) {
super.update(monitor);
this.updateModels(this.getTenantDiscriminatorColumns(), monitor);
}
// ********** tenant discriminator columns **********
public ListIterable<EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3> getTenantDiscriminatorColumns() {
return this.tenantDiscriminatorColumnContainer;
}
public int getTenantDiscriminatorColumnsSize() {
return this.tenantDiscriminatorColumnContainer.size();
}
public boolean hasTenantDiscriminatorColumns() {
return this.getTenantDiscriminatorColumnsSize() != 0;
}
public EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3 getTenantDiscriminatorColumn(int index) {
return this.tenantDiscriminatorColumnContainer.get(index);
}
public EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3 addTenantDiscriminatorColumn() {
return this.addTenantDiscriminatorColumn(this.getTenantDiscriminatorColumnsSize());
}
public EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3 addTenantDiscriminatorColumn(int index) {
XmlTenantDiscriminatorColumn xmlJoinColumn = this.buildXmlTenantDiscriminatorColumn();
EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3 joinColumn = this.tenantDiscriminatorColumnContainer.addContextElement(index, xmlJoinColumn);
this.getXmlDefaultsForUpdate().getTenantDiscriminatorColumns().add(index, xmlJoinColumn);
return joinColumn;
}
protected XmlTenantDiscriminatorColumn buildXmlTenantDiscriminatorColumn() {
return EclipseLinkOrmFactory.eINSTANCE.createXmlTenantDiscriminatorColumn();
}
public void removeTenantDiscriminatorColumn(EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn) {
this.removeTenantDiscriminatorColumn(this.tenantDiscriminatorColumnContainer.indexOf(tenantDiscriminatorColumn));
}
public void removeTenantDiscriminatorColumn(int index) {
this.tenantDiscriminatorColumnContainer.remove(index);
this.getXmlDefaults().getTenantDiscriminatorColumns().remove(index);
}
public void moveTenantDiscriminatorColumn(int targetIndex, int sourceIndex) {
this.tenantDiscriminatorColumnContainer.move(targetIndex, sourceIndex);
this.getXmlDefaults().getTenantDiscriminatorColumns().move(targetIndex, sourceIndex);
}
protected void syncTenantDiscriminatorColumns(IProgressMonitor monitor) {
this.tenantDiscriminatorColumnContainer.synchronizeWithResourceModel(monitor);
}
protected ListIterable<XmlTenantDiscriminatorColumn> getXmlTenantDiscriminatorColumns() {
if (getXmlDefaults() == null) {
return EmptyListIterable.instance();
}
// clone to reduce chance of concurrency problems
return IterableTools.cloneLive(this.getXmlDefaults().getTenantDiscriminatorColumns());
}
protected ContextListContainer<EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3, XmlTenantDiscriminatorColumn> buildTenantDiscriminatorColumnContainer() {
return this.buildSpecifiedContextListContainer(TENANT_DISCRIMINATOR_COLUMNS_LIST, new TenantDiscriminatorColumnContainerAdapter());
}
/**
* tenant discriminator column container adapter
*/
public class TenantDiscriminatorColumnContainerAdapter
extends AbstractContainerAdapter<EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3, XmlTenantDiscriminatorColumn>
{
public EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3 buildContextElement(XmlTenantDiscriminatorColumn resourceElement) {
return EclipseLinkOrmPersistenceUnitDefaults.this.buildTenantDiscriminatorColumn(resourceElement);
}
public ListIterable<XmlTenantDiscriminatorColumn> getResourceElements() {
return EclipseLinkOrmPersistenceUnitDefaults.this.getXmlTenantDiscriminatorColumns();
}
public XmlTenantDiscriminatorColumn extractResourceElement(EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3 contextElement) {
return contextElement.getXmlColumn();
}
}
protected EclipseLinkTenantDiscriminatorColumn2_3.ParentAdapter buildTenantDiscriminatorColumnParentAdapter() {
return new TenantDiscriminatorColumnParentAdapter();
}
protected EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3 buildTenantDiscriminatorColumn(XmlTenantDiscriminatorColumn xmlTenantDiscriminatorColumn) {
return new EclipseLinkOrmTenantDiscriminatorColumn2_3(this.tenantDiscriminatorColumnParentAdapter, xmlTenantDiscriminatorColumn);
}
// ********** tenant discriminator column parent adapter **********
public class TenantDiscriminatorColumnParentAdapter
implements EclipseLinkTenantDiscriminatorColumn2_3.ParentAdapter
{
public JpaContextModel getColumnParent() {
return EclipseLinkOrmPersistenceUnitDefaults.this;
}
public String getDefaultContextPropertyName() {
return EclipseLinkTenantDiscriminatorColumn2_3.DEFAULT_CONTEXT_PROPERTY;
}
public boolean getDefaultPrimaryKey() {
return EclipseLinkTenantDiscriminatorColumn2_3.DEFAULT_PRIMARY_KEY;
}
public int getDefaultLength() {
return NamedDiscriminatorColumn.DEFAULT_LENGTH;
}
public DiscriminatorType getDefaultDiscriminatorType() {
return NamedDiscriminatorColumn.DEFAULT_DISCRIMINATOR_TYPE;
}
/**
* No default table name in the context of the persistence unit defaults
*/
public String getDefaultTableName() {
return null;
}
public String getDefaultColumnName(NamedColumn column) {
return EclipseLinkTenantDiscriminatorColumn2_3.DEFAULT_NAME;
}
/**
* No table in the context of the persistence unit defaults
*/
public Table resolveDbTable(String tableName) {
return null;
}
public Iterable<String> getCandidateTableNames() {
return EmptyIterable.instance();
}
public boolean tableNameIsInvalid(String tableName) {
return false;
}
/**
* no column validation can be done in the context of the persistence unit defaults
*/
public JpaValidator buildColumnValidator(NamedColumn column) {
return NullJpaValidator.instance();
}
public TextRange getValidationTextRange() {
return EclipseLinkOrmPersistenceUnitDefaults.this.getValidationTextRange();
}
}
//*************** get method *****************
public String getGetMethod() {
return this.getSpecifiedGetMethod();
}
public String getDefaultGetMethod() {
return null;
}
public String getSpecifiedGetMethod() {
return this.specifiedGetMethod;
}
public void setSpecifiedGetMethod(String getMethod) {
if (ObjectTools.notEquals(this.specifiedGetMethod, getMethod)) {
XmlAccessMethods xmlAccessMethods = this.getXmlAccessMethodsForUpdate();
this.setSpecifiedGetMethod_(getMethod);
xmlAccessMethods.setGetMethod(getMethod);
this.removeXmlAccessMethodsIfUnset();
}
}
protected void setSpecifiedGetMethod_(String getMethod) {
String old = this.specifiedGetMethod;
this.specifiedGetMethod = getMethod;
this.firePropertyChanged(SPECIFIED_GET_METHOD_PROPERTY, old, getMethod);
}
protected String buildSpecifiedGetMethod() {
XmlAccessMethods accessMethods = this.getXmlAccessMethods();
return accessMethods != null ? accessMethods.getGetMethod() : null;
}
//*************** set method *****************
public String getSetMethod() {
return this.getSpecifiedSetMethod();
}
public String getDefaultSetMethod() {
return null;
}
public String getSpecifiedSetMethod() {
return this.specifiedSetMethod;
}
public void setSpecifiedSetMethod(String setMethod) {
if (ObjectTools.notEquals(this.specifiedSetMethod, setMethod)) {
XmlAccessMethods xmlAccessMethods = this.getXmlAccessMethodsForUpdate();
this.setSpecifiedSetMethod_(setMethod);
xmlAccessMethods.setSetMethod(setMethod);
this.removeXmlAccessMethodsIfUnset();
}
}
protected void setSpecifiedSetMethod_(String setMethod) {
String old = this.specifiedSetMethod;
this.specifiedSetMethod = setMethod;
this.firePropertyChanged(SPECIFIED_SET_METHOD_PROPERTY, old, setMethod);
}
protected String buildSpecifiedSetMethod() {
XmlAccessMethods accessMethods = this.getXmlAccessMethods();
return accessMethods != null ? accessMethods.getSetMethod() : null;
}
//*************** XML access methods *****************
protected XmlAccessMethods getXmlAccessMethods() {
XmlPersistenceUnitDefaults xmlDefaults = getXmlDefaults();
return xmlDefaults != null ? getXmlDefaults().getAccessMethods() : null;
}
/**
* Build the XML access methods (and XML defaults and XML metadata if necessary) if it does not exist.
*/
protected XmlAccessMethods getXmlAccessMethodsForUpdate() {
XmlPersistenceUnitDefaults xmlDefaults = this.getXmlDefaultsForUpdate();
XmlAccessMethods xmlAccessMethods = xmlDefaults.getAccessMethods();
return (xmlAccessMethods != null) ? xmlAccessMethods : this.buildXmlAccessMethods();
}
protected XmlAccessMethods buildXmlAccessMethods() {
XmlAccessMethods xmlAccessMethods = this.buildXmlAccessMethods_();
this.getXmlDefaults().setAccessMethods(xmlAccessMethods);
return xmlAccessMethods;
}
protected XmlAccessMethods buildXmlAccessMethods_() {
return EclipseLinkOrmFactory.eINSTANCE.createXmlAccessMethods();
}
/**
* clear the XML access methods (and the XML defaults and XML metadata) if appropriate
*/
protected void removeXmlAccessMethodsIfUnset() {
if (this.getXmlAccessMethods().isUnset()) {
this.getXmlDefaults().setAccessMethods(null);
this.removeXmlDefaultsIfUnset();
}
}
// ********** completion proposals **********
@Override
public Iterable<String> getCompletionProposals(int pos) {
Iterable<String> result = super.getCompletionProposals(pos);
if (result != null) {
return result;
}
for (EclipseLinkOrmSpecifiedTenantDiscriminatorColumn2_3 tenantDiscriminatorColumn : this.getTenantDiscriminatorColumns()) {
result = tenantDiscriminatorColumn.getCompletionProposals(pos);
if (result != null) {
return result;
}
}
return null;
}
}