blob: bc4a1e0da1d27950dabee7457a486ac67142c1d7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 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.core.internal.content.orm.resource;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jpt.core.internal.content.orm.OrmFactory;
import org.eclipse.jpt.core.internal.content.orm.resource.AssociationOverrideTranslator.AssociationOverrideBuilder;
import org.eclipse.jpt.core.internal.content.orm.resource.AttributeOverrideTranslator.AttributeOverrideBuilder;
import org.eclipse.jpt.core.internal.content.orm.resource.PrimaryKeyJoinColumnTranslator.PrimaryKeyJoinColumnBuilder;
import org.eclipse.jpt.core.internal.mappings.IAssociationOverride;
import org.eclipse.jpt.core.internal.mappings.IAttributeOverride;
import org.eclipse.jpt.core.internal.mappings.IEntity;
import org.eclipse.jpt.core.internal.mappings.IPrimaryKeyJoinColumn;
import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage;
import org.eclipse.wst.common.internal.emf.resource.IDTranslator;
import org.eclipse.wst.common.internal.emf.resource.Translator;
public class EntityTranslator extends TypeMappingTranslator
{
protected static final JpaCoreMappingsPackage MAPPINGS_PKG =
JpaCoreMappingsPackage.eINSTANCE;
private TableTranslator tableTranslator;
private SecondaryTableTranslator secondaryTableTranslator;
private DiscriminatorColumnTranslator discriminatorColumnTranslator;
private IEntity entity;
public EntityTranslator() {
super(ENTITY);
this.tableTranslator = createTableTranslator();
this.secondaryTableTranslator = createSecondaryTableTranslator();
this.discriminatorColumnTranslator = createDiscriminatorColumnTranslator();
}
@Override
public EObject createEMFObject(String nodeName, String readAheadName) {
this.entity = JPA_CORE_XML_FACTORY.createXmlEntityInternal();
this.tableTranslator.setEntity(this.entity);
this.secondaryTableTranslator.setEntity(this.entity);
this.discriminatorColumnTranslator.setEntity(this.entity);
return this.entity;
}
@Override
protected Translator[] createChildren() {
return new Translator[] {
IDTranslator.INSTANCE,
createNameTranslator(),
createJavaClassTranslator(),
createAccessTypeTranslator(),
createMetadataCompleteTranslator(),
createPlaceHolderTranslator(ENTITY__DESCRIPTION),
getTableTranslator(),
getSecondaryTableTranslator(),
createPrimaryKeyJoinColumnsTranslator(),
createPlaceHolderTranslator(ENTITY__ID_CLASS),
createInheritanceTranslator(),
createDiscriminatorValueTranslator(),
getDiscriminatorColumnTranslator(),
createSequenceGeneratorTranslator(),
createTableGeneratorTranslator(),
createNamedQueryTranslator(),
createNamedNativeQueryTranslator(),
createPlaceHolderTranslator(ENTITY__SQL_RESULT_SET_MAPPING),
createPlaceHolderTranslator(ENTITY__EXCLUDE_DEFAULT_LISTENERS),
createPlaceHolderTranslator(ENTITY__EXCLUDE_SUPERCLASS_LISTENERS),
createPlaceHolderTranslator(ENTITY__ENTITY_LISTENERS),
createPlaceHolderTranslator(ENTITY__PRE_PERSIST),
createPlaceHolderTranslator(ENTITY__POST_PERSIST),
createPlaceHolderTranslator(ENTITY__PRE_REMOVE),
createPlaceHolderTranslator(ENTITY__POST_REMOVE),
createPlaceHolderTranslator(ENTITY__PRE_UPDATE),
createPlaceHolderTranslator(ENTITY__POST_UPDATE),
createPlaceHolderTranslator(ENTITY__POST_LOAD),
createAttributeOverridesTranslator(),
createAssociationOverridesTranslator(),
createPersistentAttributesTranslator()
};
}
private Translator createNameTranslator() {
return new Translator(NAME, MAPPINGS_PKG.getIEntity_SpecifiedName(), DOM_ATTRIBUTE);
}
private Translator getTableTranslator() {
return this.tableTranslator;
}
private Translator getSecondaryTableTranslator() {
return this.secondaryTableTranslator;
}
private Translator getDiscriminatorColumnTranslator() {
return this.discriminatorColumnTranslator;
}
private TableTranslator createTableTranslator() {
return new TableTranslator();
}
private SecondaryTableTranslator createSecondaryTableTranslator() {
return new SecondaryTableTranslator();
}
private DiscriminatorColumnTranslator createDiscriminatorColumnTranslator() {
return new DiscriminatorColumnTranslator();
}
private Translator createTableGeneratorTranslator() {
return new TableGeneratorTranslator(TABLE_GENERATOR, JpaCoreMappingsPackage.eINSTANCE.getIEntity_TableGenerator());
}
private Translator createSequenceGeneratorTranslator() {
return new SequenceGeneratorTranslator(SEQUENCE_GENERATOR, JpaCoreMappingsPackage.eINSTANCE.getIEntity_SequenceGenerator());
}
private Translator createNamedQueryTranslator() {
return new NamedQueryTranslator(NAMED_QUERY, JpaCoreMappingsPackage.eINSTANCE.getIEntity_NamedQueries());
}
private Translator createNamedNativeQueryTranslator() {
return new NamedNativeQueryTranslator(NAMED_NATIVE_QUERY, JpaCoreMappingsPackage.eINSTANCE.getIEntity_NamedNativeQueries());
}
protected Translator createDiscriminatorValueTranslator() {
return new Translator(ENTITY__DISCRIMINATOR_VALUE, MAPPINGS_PKG.getIEntity_SpecifiedDiscriminatorValue(), NO_STYLE);
}
protected Translator createInheritanceTranslator() {
return new EnumeratorTranslator(ENTITY__INHERITANCE + "/" + STRATEGY, MAPPINGS_PKG.getIEntity_InheritanceStrategy(), DOM_ATTRIBUTE);
}
protected Translator createPrimaryKeyJoinColumnsTranslator() {
return new PrimaryKeyJoinColumnTranslator(
ENTITY__PRIMARY_KEY_JOIN_COLUMN,
JpaCoreMappingsPackage.eINSTANCE.getIEntity_SpecifiedPrimaryKeyJoinColumns(),
buildPrimaryKeyJoinColumnsBuilder());
}
private PrimaryKeyJoinColumnBuilder buildPrimaryKeyJoinColumnsBuilder() {
return new PrimaryKeyJoinColumnBuilder() {
public IPrimaryKeyJoinColumn createPrimaryKeyJoinColumn() {
return OrmFactory.eINSTANCE.createXmlPrimaryKeyJoinColumn(new IEntity.PrimaryKeyJoinColumnOwner(entity));
}
};
}
private Translator createAttributeOverridesTranslator() {
return new AttributeOverrideTranslator(ENTITY__ATTRIBUTE_OVERRIDE, MAPPINGS_PKG.getIEntity_SpecifiedAttributeOverrides(), buildAttributeOverrideBuilder());
}
private AttributeOverrideBuilder buildAttributeOverrideBuilder() {
return new AttributeOverrideBuilder() {
public IAttributeOverride createAttributeOverride() {
return EntityTranslator.this.entity.createAttributeOverride(0);
}
};
}
private Translator createAssociationOverridesTranslator() {
return new AssociationOverrideTranslator(ENTITY__ASSOCIATION_OVERRIDE, MAPPINGS_PKG.getIEntity_SpecifiedAssociationOverrides(), buildAssociationOverrideBuilder());
}
private AssociationOverrideBuilder buildAssociationOverrideBuilder() {
return new AssociationOverrideBuilder() {
public IAssociationOverride createAssociationOverride() {
return EntityTranslator.this.entity.createAssociationOverride(0);
}
};
}
}