diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource')
55 files changed, 3940 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AbstractColumnTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AbstractColumnTranslator.java new file mode 100644 index 0000000000..41596b036b --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AbstractColumnTranslator.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * 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.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public abstract class AbstractColumnTranslator extends Translator + implements OrmXmlMapper +{ + private Translator[] children; + + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + protected static final OrmFactory JPA_CORE_XML_FACTORY = + OrmFactory.eINSTANCE; + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + + public AbstractColumnTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature, END_TAG_NO_INDENT); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + + protected abstract Translator[] createChildren(); + + protected Translator createNameTranslator() { + return new Translator(COLUMN__NAME, JPA_CORE_XML_PKG.getAbstractXmlNamedColumn_SpecifiedNameForXml(), DOM_ATTRIBUTE); + } + + protected Translator createTableTranslator() { + return new Translator(COLUMN__TABLE, JPA_CORE_XML_PKG.getAbstractXmlColumn_SpecifiedTableForXml(), DOM_ATTRIBUTE); + } + + protected Translator createUniqueTranslator() { + return new Translator(COLUMN__UNIQUE, JPA_CORE_XML_PKG.getAbstractXmlColumn_UniqueForXml(), DOM_ATTRIBUTE); + } + + protected Translator createNullableTranslator() { + return new Translator(COLUMN__NULLABLE, JPA_CORE_XML_PKG.getAbstractXmlColumn_NullableForXml(), DOM_ATTRIBUTE); + } + + protected Translator createInsertableTranslator() { + return new Translator(COLUMN__INSERTABLE, JPA_CORE_XML_PKG.getAbstractXmlColumn_InsertableForXml(), DOM_ATTRIBUTE); + } + + protected Translator createUpdatableTranslator() { + return new Translator(COLUMN__UPDATABLE, JPA_CORE_XML_PKG.getAbstractXmlColumn_UpdatableForXml(), DOM_ATTRIBUTE); + } + + protected Translator createColumnDefinitionTranslator() { + return new Translator(COLUMN__COLUMN_DEFINITION, JPA_CORE_XML_PKG.getAbstractXmlNamedColumn_ColumnDefinitionForXml(), DOM_ATTRIBUTE); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AbstractTableTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AbstractTableTranslator.java new file mode 100644 index 0000000000..4a21640d86 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AbstractTableTranslator.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2007 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.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public abstract class AbstractTableTranslator extends Translator + implements OrmXmlMapper +{ + private Translator[] children; + + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + protected static final OrmFactory JPA_CORE_XML_FACTORY = + OrmFactory.eINSTANCE; + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + + public AbstractTableTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath,aFeature); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + + protected abstract Translator[] createChildren(); + + protected Translator createNameTranslator() { + return new Translator(NAME, JPA_CORE_XML_PKG.getAbstractXmlTable_SpecifiedNameForXml(), DOM_ATTRIBUTE); + } + + protected Translator createCatalogTranslator() { + return new Translator(CATALOG, JPA_CORE_XML_PKG.getAbstractXmlTable_SpecifiedCatalogForXml(), DOM_ATTRIBUTE); + } + + protected Translator createSchemaTranslator() { + return new Translator(SCHEMA, JPA_CORE_XML_PKG.getAbstractXmlTable_SpecifiedSchemaForXml(), DOM_ATTRIBUTE); + } + + //placeholder until we support unique-constraint + protected Translator createUniqueConstraintTranslator() { + return new Translator(UNIQUE_CONSTRAINT, (EStructuralFeature) null); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AccessTypeElementTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AccessTypeElementTranslator.java new file mode 100644 index 0000000000..d1f57c7dd1 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AccessTypeElementTranslator.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * 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 java.util.Collections; +import java.util.List; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.AccessType; + +/** + * There is a bug in the translator framework that causes + * enumerators in xml elements and enumerators in xml attributes + * to be treated differently. When the enumerator is an attribute + * setting the model to the default causes the attribute to be removed. + * With an element is causes the default literal to be placed in + * the tag. + * + * The problem is wrapped up in the emf unsettable attribute as well. + * For attributes the eIsSet method returns false for the default value + * For elements the eIsSet method returns true for the default value. + * I don't want to have to use the unsettable option in emf since that would + * require that I call different api. I am not sure yet what the bug is in + * the translator, so I have entered one ~KFM + */ +public class AccessTypeElementTranslator extends EnumeratorTranslator +{ + + public AccessTypeElementTranslator(String domNameAndPath, EStructuralFeature aFeature, int style) { + super(domNameAndPath, aFeature, style); + } + + @Override + public Object getMOFValue(EObject mofObject) { + AccessType access = (AccessType) super.getMOFValue(mofObject); + if (access == AccessType.DEFAULT) { + return null; + } + return access; + } + + @Override + public List getMOFChildren(EObject mofObject) { + List result = super.getMOFChildren(mofObject); + if(result != null && result.size() > 0) { + AccessType accessType = (AccessType) result.get(0); + if(accessType.getValue() == AccessType.DEFAULT_VALUE) + result = Collections.EMPTY_LIST; + } + return result; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AssociationOverrideTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AssociationOverrideTranslator.java new file mode 100644 index 0000000000..faba3fa29e --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AssociationOverrideTranslator.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.jpt.core.internal.content.orm.resource.JoinColumnTranslator.JoinColumnBuilder; +import org.eclipse.jpt.core.internal.mappings.IAssociationOverride; +import org.eclipse.jpt.core.internal.mappings.IJoinColumn; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.jpt.core.internal.mappings.IAssociationOverride.JoinColumnOwner; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class AssociationOverrideTranslator extends Translator implements OrmXmlMapper +{ + private AssociationOverrideBuilder associationOverrideBuilder; + + private IAssociationOverride associationOverride; + + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + + private Translator[] children; + private JoinColumnTranslator joinColumnsTranslator; + + public AssociationOverrideTranslator(String domNameAndPath, EStructuralFeature aFeature, AssociationOverrideBuilder associationOverrideBuilder) { + super(domNameAndPath, aFeature); + this.associationOverrideBuilder = associationOverrideBuilder; + this.joinColumnsTranslator = createJoinColumnsTranslator(); + } + + protected JoinColumnTranslator createJoinColumnsTranslator() { + return new JoinColumnTranslator( + JOIN_COLUMN, + JpaCoreMappingsPackage.eINSTANCE.getIAssociationOverride_SpecifiedJoinColumns(), + buildJoinColumnsBuilder()); + } + + private JoinColumnBuilder buildJoinColumnsBuilder() { + return new JoinColumnBuilder() { + public IJoinColumn createJoinColumn() { + return OrmFactory.eINSTANCE.createXmlJoinColumn(new JoinColumnOwner(associationOverride)); + } + }; + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + joinColumnsTranslator, + }; + } + protected Translator createNameTranslator() { + return new Translator(ATTRIBUTE_OVERRIDE_NAME, MAPPINGS_PKG.getIOverride_Name(), DOM_ATTRIBUTE); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + this.associationOverride = this.associationOverrideBuilder.createAssociationOverride(); + return this.associationOverride; + } + + public interface AssociationOverrideBuilder { + IAssociationOverride createAssociationOverride(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingTranslator.java new file mode 100644 index 0000000000..566293e8ba --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingTranslator.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * 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.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public abstract class AttributeMappingTranslator extends Translator + implements OrmXmlMapper +{ + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + protected static final OrmFactory JPA_CORE_XML_FACTORY = + OrmFactory.eINSTANCE; + + + private Translator[] children; + + + public AttributeMappingTranslator(String domNameAndPath, int style) { + super(domNameAndPath, JPA_CORE_XML_PKG.getXmlPersistentType_SpecifiedAttributeMappings(), style); + dependencyFeature = JPA_CORE_XML_PKG.getXmlAttributeMapping_PersistentAttribute(); + } + + + public Translator[] getChildren(Object target, int versionID) { + if (this.children == null) { + this.children = createChildren(); + } + return this.children; + } + + protected abstract Translator[] createChildren(); + + + protected Translator createNameTranslator() { + return new AttributeNameTranslator(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingsTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingsTranslator.java new file mode 100644 index 0000000000..9c754cdd68 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeMappingsTranslator.java @@ -0,0 +1,119 @@ +/******************************************************************************* + * 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.OrmPackage; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class AttributeMappingsTranslator extends MultiObjectDependencyTranslator + implements OrmXmlMapper +{ + public static final String ATTRIBUTES_PATH = + ATTRIBUTES + '/' + ID + ',' + EMBEDDED_ID + ','+ BASIC + ',' + VERSION +',' + MANY_TO_ONE + "," + ONE_TO_MANY + ',' + ONE_TO_ONE + ',' + MANY_TO_MANY + ',' + EMBEDDED+ ',' + TRANSIENT; + + private static final OrmPackage JPA_CORE_XML_PKG = OrmPackage.eINSTANCE; + + public AttributeMappingsTranslator() { + super(ATTRIBUTES_PATH, JPA_CORE_XML_PKG.getXmlPersistentType_SpecifiedAttributeMappings(), JPA_CORE_XML_PKG.getXmlTypeMapping_PersistentType()); + } + + public Translator getDelegateFor(EObject o) { + Translator translator = super.getDelegateFor(o); + if (translator != null) { + return translator; + } + switch (o.eClass().getClassifierID()) { + case OrmPackage.XML_ID : + return new IdTranslator(); + + case OrmPackage.XML_BASIC : + return new BasicTranslator(); + + case OrmPackage.XML_ONE_TO_MANY : + return new OneToManyTranslator(); + + case OrmPackage.XML_MANY_TO_MANY : + return new ManyToManyTranslator(); + + case OrmPackage.XML_MANY_TO_ONE : + return new ManyToOneTranslator(); + + case OrmPackage.XML_TRANSIENT : + return new TransientTranslator(); + + case OrmPackage.XML_EMBEDDED : + return new EmbeddedTranslator(); + + case OrmPackage.XML_EMBEDDED_ID : + return new EmbeddedIdTranslator(); + + case OrmPackage.XML_ONE_TO_ONE : + return new OneToOneTranslator(); + + case OrmPackage.XML_VERSION : + return new VersionTranslator(); + } + + return null; + } + + + @Override + public Translator getDelegateFor(String domName, String readAheadName) { + if (domName.equals(ID)) { + return new IdTranslator(); + } + if (domName.equals(BASIC)) { + return new BasicTranslator(); + } + if (domName.equals(MANY_TO_ONE)) { + return new ManyToOneTranslator(); + } + if (domName.equals(ONE_TO_MANY)) { + return new OneToManyTranslator(); + } + if (domName.equals(MANY_TO_MANY)) { + return new ManyToManyTranslator(); + } + if (domName.equals(TRANSIENT)) { + return new TransientTranslator(); + } + if (domName.equals(EMBEDDED)) { + return new EmbeddedTranslator(); + } + if (domName.equals(EMBEDDED_ID)) { + return new EmbeddedIdTranslator(); + } + if (domName.equals(ONE_TO_ONE)) { + return new OneToOneTranslator(); + } + if (domName.equals(VERSION)) { + return new VersionTranslator(); + } + throw new IllegalStateException("Illegal dom name: " + domName); //$NON-NLS-1$ + } + + @Override + public boolean isDependencyParent() { + return true; + } + + @Override + public EObject basicGetDependencyObject(EObject parent) { + Translator delegate = getDelegateFor(parent); + + if (delegate != null) { + return delegate.basicGetDependencyObject(parent); + } + else { + return super.basicGetDependencyObject(parent); + } + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeNameTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeNameTranslator.java new file mode 100644 index 0000000000..2278da6527 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeNameTranslator.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2006, 2007 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.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.wst.common.internal.emf.resource.DependencyTranslator; + +public class AttributeNameTranslator extends DependencyTranslator + implements OrmXmlMapper +{ + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + + public AttributeNameTranslator() { + super(NAME, JPA_CORE_XML_PKG.getXmlPersistentAttribute_Name(), + JPA_CORE_XML_PKG.getXmlAttributeMapping_PersistentAttribute()); + fStyle = DOM_ATTRIBUTE; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeOverrideTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeOverrideTranslator.java new file mode 100644 index 0000000000..824b14e04d --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/AttributeOverrideTranslator.java @@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.jpt.core.internal.mappings.IAttributeOverride; +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 AttributeOverrideTranslator extends Translator implements OrmXmlMapper +{ + private AttributeOverrideBuilder attributeOverrideBuilder; + + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + + private Translator[] children; + private ColumnTranslator columnTranslator; + + public AttributeOverrideTranslator(String domNameAndPath, EStructuralFeature aFeature, AttributeOverrideBuilder attributeOverrideBuilder) { + super(domNameAndPath, aFeature); + this.attributeOverrideBuilder = attributeOverrideBuilder; + this.columnTranslator = createColumnTranslator(); + } + + private ColumnTranslator createColumnTranslator() { + return new ColumnTranslator(ATTRIBUTE_OVERRIDE_COLUMN, JPA_CORE_XML_PKG.getIXmlColumnMapping_ColumnForXml()); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + columnTranslator, + }; + } + protected Translator createNameTranslator() { + return new Translator(ATTRIBUTE_OVERRIDE_NAME, MAPPINGS_PKG.getIOverride_Name(), DOM_ATTRIBUTE); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + IAttributeOverride attributeOverride = this.attributeOverrideBuilder.createAttributeOverride(); + this.columnTranslator.setColumnMapping(attributeOverride); + return attributeOverride; + } + + public interface AttributeOverrideBuilder { + IAttributeOverride createAttributeOverride(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/BasicTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/BasicTranslator.java new file mode 100644 index 0000000000..2f563bf12a --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/BasicTranslator.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.IBasic; +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 BasicTranslator extends AttributeMappingTranslator +{ + private ColumnTranslator columnTranslator; + + + public BasicTranslator() { + super(BASIC, NO_STYLE); + this.columnTranslator = createColumnTranslator(); + } + + private ColumnTranslator createColumnTranslator() { + return new ColumnTranslator(COLUMN, JPA_CORE_XML_PKG.getIXmlColumnMapping_ColumnForXml()); + } + + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + IBasic xmlBasic = JPA_CORE_XML_FACTORY.createXmlBasic(); + this.columnTranslator.setColumnMapping(xmlBasic); + return xmlBasic; + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createFetchTypeTranslator(), + createOptionalTranslator(), + columnTranslator, + createLobTranslator(), + createTemporalTranslator(), + createEnumeratedTranslator(), + }; + } + + private Translator createPlaceHolderTranslator(String domNameAndPath) { + return new Translator(domNameAndPath, (EStructuralFeature) null); + } + + private Translator createFetchTypeTranslator() { + return new EnumeratorTranslator(FETCH, JpaCoreMappingsPackage.eINSTANCE.getIBasic_Fetch(), DOM_ATTRIBUTE); + } + + private Translator createOptionalTranslator() { + return new BooleanEnumeratorTranslator(OPTIONAL, JpaCoreMappingsPackage.eINSTANCE.getIBasic_Optional(), DOM_ATTRIBUTE); + } + + private Translator createLobTranslator() { + return new EmptyTagBooleanTranslator(LOB, JpaCoreMappingsPackage.eINSTANCE.getIBasic_Lob()); + } + + private Translator createTemporalTranslator() { + return new TemporalTypeElementTranslator(TEMPORAL, JpaCoreMappingsPackage.eINSTANCE.getIBasic_Temporal(), NO_STYLE); + } + + private Translator createEnumeratedTranslator() { + return new EnumeratedTypeElementTranslator(BASIC__ENUMERATED, JpaCoreMappingsPackage.eINSTANCE.getIBasic_Enumerated(), NO_STYLE); + } + + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/BooleanEnumeratorTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/BooleanEnumeratorTranslator.java new file mode 100644 index 0000000000..157f2f3409 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/BooleanEnumeratorTranslator.java @@ -0,0 +1,23 @@ +/******************************************************************************* + * 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.EStructuralFeature; + +public class BooleanEnumeratorTranslator extends EnumeratorTranslator +{ + public BooleanEnumeratorTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature, BOOLEAN_FEATURE | BOOLEAN_LOWERCASE); + } + + public BooleanEnumeratorTranslator(String domNameAndPath, EStructuralFeature aFeature, int style) { + super(domNameAndPath, aFeature, BOOLEAN_FEATURE | BOOLEAN_LOWERCASE | style); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/ColumnTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/ColumnTranslator.java new file mode 100644 index 0000000000..adf9ca1dcf --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/ColumnTranslator.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.IColumnMapping; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class ColumnTranslator extends AbstractColumnTranslator + implements OrmXmlMapper +{ + + private IColumnMapping columnMapping; + + public ColumnTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return getColumnMapping().getColumn(); + } + + private IColumnMapping getColumnMapping() { + return this.columnMapping; + } + + void setColumnMapping(IColumnMapping columnMapping) { + this.columnMapping = columnMapping; + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createUniqueTranslator(), + createNullableTranslator(), + createInsertableTranslator(), + createUpdatableTranslator(), + createColumnDefinitionTranslator(), + createTableTranslator(), + createLengthTranslator(), + createPrecisionTranslator(), + createScaleTranslator(), + }; + } + + protected Translator createLengthTranslator() { + return new Translator(COLUMN__LENGTH, JPA_CORE_XML_PKG.getXmlColumn_LengthForXml(), DOM_ATTRIBUTE); + } + + protected Translator createPrecisionTranslator() { + return new Translator(COLUMN__PRECISION, JPA_CORE_XML_PKG.getXmlColumn_PrecisionForXml(), DOM_ATTRIBUTE); + } + + protected Translator createScaleTranslator() { + return new Translator(COLUMN__SCALE, JPA_CORE_XML_PKG.getXmlColumn_ScaleForXml(), DOM_ATTRIBUTE); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/DebugTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/DebugTranslator.java new file mode 100644 index 0000000000..c080462564 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/DebugTranslator.java @@ -0,0 +1,431 @@ +/******************************************************************************* + * 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 java.util.List; +import org.eclipse.emf.common.notify.Notifier; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.wst.common.internal.emf.resource.ReadAheadHelper; +import org.eclipse.wst.common.internal.emf.resource.Translator; +import org.eclipse.wst.common.internal.emf.resource.TranslatorPath; +import org.eclipse.wst.common.internal.emf.resource.VariableTranslatorFactory; + +public class DebugTranslator extends Translator +{ + @Override + public String getDOMPath() { + // TODO Auto-generated method stub + return super.getDOMPath(); + } + + public DebugTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature); + // TODO Auto-generated constructor stub + } + + public DebugTranslator(String domNameAndPath, EStructuralFeature aFeature, int style) { + super(domNameAndPath, aFeature, style); + // TODO Auto-generated constructor stub + } + + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + // TODO Auto-generated method stub + return super.createEMFObject(nodeName, readAheadName); + } + + @Override + public Translator[] getChildren(Object target, int versionID) { + // TODO Auto-generated method stub + return super.getChildren(target, versionID); + } + + @Override + public String getDOMName(Object value) { + // TODO Auto-generated method stub + return super.getDOMName(value); + } + + @Override + public boolean isManagedByParent() { + // TODO Auto-generated method stub + return super.isManagedByParent(); + } + + @Override + public void addReadAheadHelper(ReadAheadHelper helper) { + // TODO Auto-generated method stub + super.addReadAheadHelper(helper); + } + + @Override + public EObject basicGetDependencyObject(EObject parent) { + // TODO Auto-generated method stub + return super.basicGetDependencyObject(parent); + } + + @Override + public void clearList(EObject mofObject) { + // TODO Auto-generated method stub + super.clearList(mofObject); + } + + @Override + public Object convertStringToValue(String strValue, EObject owner) { + // TODO Auto-generated method stub + return super.convertStringToValue(strValue, owner); + } + + @Override + public Object convertStringToValue(String nodeName, String readAheadName, + String value, Notifier owner) { + // TODO Auto-generated method stub + return super.convertStringToValue(nodeName, readAheadName, value, owner); + } + + @Override + public String convertValueToString(Object value, EObject owner) { + // TODO Auto-generated method stub + return super.convertValueToString(value, owner); + } + + @Override + public boolean equals(Object object) { + // TODO Auto-generated method stub + return super.equals(object); + } + + @Override + public String extractStringValue(EObject emfObject) { + // TODO Auto-generated method stub + return super.extractStringValue(emfObject); + } + + @Override + public boolean featureExists(EObject emfObject) { + // TODO Auto-generated method stub + return super.featureExists(emfObject); + } + + @Override + public Translator findChild(String tagName, Object target, int versionID) { + // TODO Auto-generated method stub + return super.findChild(tagName, target, versionID); + } + + @Override + protected Translator[] getChildren() { + // TODO Auto-generated method stub + return super.getChildren(); + } + + @Override + public EStructuralFeature getDependencyFeature() { + // TODO Auto-generated method stub + return super.getDependencyFeature(); + } + + @Override + public String[] getDOMNames() { + // TODO Auto-generated method stub + return super.getDOMNames(); + } + + @Override + public EStructuralFeature getFeature() { + // TODO Auto-generated method stub + return super.getFeature(); + } + + @Override + public List getMOFChildren(EObject mofObject) { + // TODO Auto-generated method stub + return super.getMOFChildren(mofObject); + } + + @Override + public Object getMOFValue(EObject mofObject) { + // TODO Auto-generated method stub + return super.getMOFValue(mofObject); + } + + @Override + public String getNameSpace() { + // TODO Auto-generated method stub + return super.getNameSpace(); + } + + @Override + public ReadAheadHelper getReadAheadHelper(String parentName) { + // TODO Auto-generated method stub + return super.getReadAheadHelper(parentName); + } + + @Override + public TranslatorPath[] getTranslatorPaths() { + // TODO Auto-generated method stub + return super.getTranslatorPaths(); + } + + @Override + public Translator[] getVariableChildren(Notifier target, int version) { + // TODO Auto-generated method stub + return super.getVariableChildren(target, version); + } + + @Override + public VariableTranslatorFactory getVariableTranslatorFactory() { + // TODO Auto-generated method stub + return super.getVariableTranslatorFactory(); + } + + @Override + public boolean hasDOMPath() { + // TODO Auto-generated method stub + return super.hasDOMPath(); + } + + @Override + public boolean hasReadAheadNames() { + // TODO Auto-generated method stub + return super.hasReadAheadNames(); + } + + @Override + protected void initializeDOMNameAndPath(String domNameAndPathArg) { + // TODO Auto-generated method stub + super.initializeDOMNameAndPath(domNameAndPathArg); + } + + @Override + public boolean isBooleanFeature() { + // TODO Auto-generated method stub + return super.isBooleanFeature(); + } + + @Override + public boolean isBooleanUppercase() { + // TODO Auto-generated method stub + return super.isBooleanUppercase(); + } + + @Override + public boolean isCDATAContent() { + // TODO Auto-generated method stub + return super.isCDATAContent(); + } + + @Override + public boolean isComment() { + // TODO Auto-generated method stub + return super.isComment(); + } + + @Override + public boolean isDataType() { + // TODO Auto-generated method stub + return super.isDataType(); + } + + @Override + public boolean isDependencyChild() { + // TODO Auto-generated method stub + return super.isDependencyChild(); + } + + @Override + public boolean isDependencyParent() { + // TODO Auto-generated method stub + return super.isDependencyParent(); + } + + @Override + public boolean isDOMAttribute() { + // TODO Auto-generated method stub + return super.isDOMAttribute(); + } + + @Override + public boolean isDOMTextValue() { + // TODO Auto-generated method stub + return super.isDOMTextValue(); + } + + @Override + public boolean isEmptyContentSignificant() { + // TODO Auto-generated method stub + return super.isEmptyContentSignificant(); + } + + @Override + public boolean isEmptyTag() { + // TODO Auto-generated method stub + return super.isEmptyTag(); + } + + @Override + public boolean isEnumFeature() { + // TODO Auto-generated method stub + return super.isEnumFeature(); + } + + @Override + public boolean isEnumWithHyphens() { + // TODO Auto-generated method stub + return super.isEnumWithHyphens(); + } + + @Override + public boolean isIDMap() { + // TODO Auto-generated method stub + return super.isIDMap(); + } + + @Override + public boolean isLinkMap() { + // TODO Auto-generated method stub + return super.isLinkMap(); + } + + @Override + public boolean isMapFor(Object aFeature, Object oldValue, Object newValue) { + // TODO Auto-generated method stub + return super.isMapFor(aFeature, oldValue, newValue); + } + + @Override + public boolean isMapFor(String domName) { + // TODO Auto-generated method stub + return super.isMapFor(domName); + } + + @Override + public boolean isMultiValued() { + // TODO Auto-generated method stub + return super.isMultiValued(); + } + + @Override + public boolean isObjectMap() { + // TODO Auto-generated method stub + return super.isObjectMap(); + } + + @Override + public boolean isSetMOFValue(EObject emfObject) { + // TODO Auto-generated method stub + return super.isSetMOFValue(emfObject); + } + + @Override + public boolean isShared() { + // TODO Auto-generated method stub + return super.isShared(); + } + + @Override + public boolean isTargetLinkMap() { + // TODO Auto-generated method stub + return super.isTargetLinkMap(); + } + + @Override + public boolean isUnsettable() { + // TODO Auto-generated method stub + return super.isUnsettable(); + } + + @Override + protected String[] parseDOMNames(String domNamesString) { + // TODO Auto-generated method stub + return super.parseDOMNames(domNamesString); + } + + @Override + public void removeMOFValue(Notifier owner, Object value) { + // TODO Auto-generated method stub + super.removeMOFValue(owner, value); + } + + @Override + protected void setEMFClass(EClass anEClass) { + // TODO Auto-generated method stub + super.setEMFClass(anEClass); + } + + @Override + protected void setFeature(EStructuralFeature aFeature) { + // TODO Auto-generated method stub + super.setFeature(aFeature); + } + + @Override + public void setMOFValue(EObject emfObject, Object value) { + // TODO Auto-generated method stub + super.setMOFValue(emfObject, value); + } + + @Override + public void setMOFValue(Notifier owner, Object value, int newIndex) { + // TODO Auto-generated method stub + super.setMOFValue(owner, value, newIndex); + } + + @Override + public void setMOFValue(Notifier owner, Object value) { + // TODO Auto-generated method stub + super.setMOFValue(owner, value); + } + + @Override + public void setMOFValue(Resource res, Object value) { + // TODO Auto-generated method stub + super.setMOFValue(res, value); + } + + @Override + public void setMOFValueFromEmptyDOMPath(EObject eObject) { + // TODO Auto-generated method stub + super.setMOFValueFromEmptyDOMPath(eObject); + } + + @Override + public void setNameSpace(String string) { + // TODO Auto-generated method stub + super.setNameSpace(string); + } + + @Override + public void setTextValueIfNecessary(String textValue, Notifier owner, int versionId) { + // TODO Auto-generated method stub + super.setTextValueIfNecessary(textValue, owner, versionId); + } + + @Override + public boolean shouldIndentEndTag() { + // TODO Auto-generated method stub + return super.shouldIndentEndTag(); + } + + @Override + public boolean shouldRenderEmptyDOMPath(EObject eObject) { + // TODO Auto-generated method stub + return super.shouldRenderEmptyDOMPath(eObject); + } + + @Override + public void unSetMOFValue(EObject emfObject) { + // TODO Auto-generated method stub + super.unSetMOFValue(emfObject); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/DiscriminatorColumnTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/DiscriminatorColumnTranslator.java new file mode 100644 index 0000000000..bf081918f4 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/DiscriminatorColumnTranslator.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * 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.OrmPackage; +import org.eclipse.jpt.core.internal.mappings.IEntity; +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 DiscriminatorColumnTranslator extends Translator + implements OrmXmlMapper +{ + private Translator[] children; + + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + protected static final OrmFactory JPA_CORE_XML_FACTORY = + OrmFactory.eINSTANCE; + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + + private IEntity entity; + + public DiscriminatorColumnTranslator() { + super(ENTITY__DISCRIMINATOR_COLUMN, JPA_CORE_XML_PKG.getXmlEntityForXml_DiscriminatorColumnForXml(), END_TAG_NO_INDENT); + } + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + + protected IEntity getEntity() { + return this.entity; + } + + void setEntity(IEntity entity) { + this.entity = entity; + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return getEntity().getDiscriminatorColumn(); + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createDiscrminiatorTypeTranslator(), + createColumnDefinitationTranslator(), + createLengthTranslator(), + }; + } + + protected Translator createNameTranslator() { + return new Translator(DISCRIMINATOR_COLUMN__NAME, JPA_CORE_XML_PKG.getXmlDiscriminatorColumn_SpecifiedNameForXml(), DOM_ATTRIBUTE); + } + + protected Translator createDiscrminiatorTypeTranslator() { + return new EnumeratorTranslator(DISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE, JPA_CORE_XML_PKG.getXmlDiscriminatorColumn_DiscriminatorTypeForXml(), DOM_ATTRIBUTE); + } + + protected Translator createColumnDefinitationTranslator() { + return new Translator(DISCRIMINATOR_COLUMN__COLUMN_DEFINITION, JPA_CORE_XML_PKG.getXmlDiscriminatorColumn_ColumnDefinitionForXml(), DOM_ATTRIBUTE); + } + + protected Translator createLengthTranslator() { + return new Translator(DISCRIMINATOR_COLUMN__LENGTH, JPA_CORE_XML_PKG.getXmlDiscriminatorColumn_SpecifiedLengthForXml(), DOM_ATTRIBUTE); + } + + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmbeddableTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmbeddableTranslator.java new file mode 100644 index 0000000000..2ea7194414 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmbeddableTranslator.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2007 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.OrmPackage; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class EmbeddableTranslator extends TypeMappingTranslator +{ + protected static final OrmPackage XML_PKG = + OrmPackage.eINSTANCE; + + + public EmbeddableTranslator() { + super(EMBEDDABLE); + } + + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return JPA_CORE_XML_FACTORY.createXmlEmbeddable(); + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createJavaClassTranslator(), + createAccessTypeTranslator(), + createMetadataCompleteTranslator(), + createPlaceHolderTranslator(EMBEDDABLE__DESCRIPTION), + createPersistentAttributesTranslator() + }; + } + + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmbeddedIdTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmbeddedIdTranslator.java new file mode 100644 index 0000000000..1874a2d58c --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmbeddedIdTranslator.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class EmbeddedIdTranslator extends AttributeMappingTranslator +{ + public EmbeddedIdTranslator() { + super(EMBEDDED_ID, NO_STYLE); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return JPA_CORE_XML_FACTORY.createXmlEmbeddedId(); + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createPlaceHolderTranslator(EMBEDDED_ID__ATTRIBUTE_OVERRIDE), + }; + } + private Translator createPlaceHolderTranslator(String domNameAndPath) { + return new Translator(domNameAndPath, (EStructuralFeature) null); + } + + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmbeddedTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmbeddedTranslator.java new file mode 100644 index 0000000000..0e20f58a5c --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmbeddedTranslator.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2007 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.resource.AttributeOverrideTranslator.AttributeOverrideBuilder; +import org.eclipse.jpt.core.internal.mappings.IAttributeOverride; +import org.eclipse.jpt.core.internal.mappings.IEmbedded; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class EmbeddedTranslator extends AttributeMappingTranslator +{ + private IEmbedded embedded; + + public EmbeddedTranslator() { + super(EMBEDDED, NO_STYLE); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + this.embedded = JPA_CORE_XML_FACTORY.createXmlEmbedded(); + return this.embedded; + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createAttributeOverridesTranslator(), + }; + } + private Translator createAttributeOverridesTranslator() { + return new AttributeOverrideTranslator(EMBEDDED__ATTRIBUTE_OVERRIDE, MAPPINGS_PKG.getIEmbedded_SpecifiedAttributeOverrides(), buildAttributeOverrideBuilder()); + } + + private AttributeOverrideBuilder buildAttributeOverrideBuilder() { + return new AttributeOverrideBuilder() { + public IAttributeOverride createAttributeOverride() { + return EmbeddedTranslator.this.embedded.createAttributeOverride(0); + } + }; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmptyTagBooleanTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmptyTagBooleanTranslator.java new file mode 100644 index 0000000000..c96a39095d --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EmptyTagBooleanTranslator.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * 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.emf.ecore.EStructuralFeature; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +/** + * This translator is to be used for empty xml tags that correspond + * to a boolean attribute in the emf model. + * cascade-persist is an example from the orm.xsd: + * + * <persistence-unit-defaults> + * <cascade-persist/> + * </persistence-unit-defaults> ==> cascadePersist == true + * + * vs. + * + * <persistence-unit-defaults> + * </persistence-unit-defaults> ==> cascadePersist == false + * + */ +public class EmptyTagBooleanTranslator extends Translator +{ + public EmptyTagBooleanTranslator(String domNameAndPath, EStructuralFeature feature) { + super(domNameAndPath, feature, EMPTY_TAG | BOOLEAN_FEATURE); + } + + public EmptyTagBooleanTranslator(String domNameAndPath, EStructuralFeature aFeature, int style) { + super(domNameAndPath, aFeature, style | EMPTY_TAG | BOOLEAN_FEATURE); + } + + @Override + public Object getMOFValue(EObject mofObject) { + // I am overriding this method. This is so the tag will be removed when + // the value is false. + // I'm not sure if this is a bug in the ecore or maybe in the translators, + // but I really don't think that we should have to depend on the boolean + // being "unset" to remove the tag. + Boolean value = (Boolean) super.getMOFValue(mofObject); + return (value == true) ? value : null; + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EntityMappingsTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EntityMappingsTranslator.java new file mode 100644 index 0000000000..4be35f1db5 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EntityMappingsTranslator.java @@ -0,0 +1,116 @@ +/******************************************************************************* + * 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.EntityMappings; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.wst.common.internal.emf.resource.ConstantAttributeTranslator; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.RootTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class EntityMappingsTranslator extends RootTranslator + implements OrmXmlMapper +{ + private Translator[] children; + + private PersistenceUnitMetadataTranslator persistenceUnitMetadataTranslator; + + public EntityMappingsTranslator() { + super(ENTITY_MAPPINGS, OrmPackage.eINSTANCE.getEntityMappingsInternal()); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + private Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + new ConstantAttributeTranslator(XML_NS, PERSISTENCE_NS_URL), + new ConstantAttributeTranslator(XML_NS_XSI, XSI_NS_URL), + new ConstantAttributeTranslator(XSI_SCHEMA_LOCATION, PERSISTENCE_NS_URL + ' ' + ORM_SCHEMA_LOC_1_0), + createVersionTranslator(), + createPlaceHolderTranslator(ENTITY_MAPPINGS__DESCRIPTION), + createPersistenceUnitMetadataTranslator(), + createPackageTranslator(), + createSchemaTranslator(), + createCatalogTranslator(), + createAccessTranslator(), + createSequenceGeneratorTranslator(), + createTableGeneratorTranslator(), + createNamedQueryTranslator(), + createNamedNativeQueryTranslator(), + createPlaceHolderTranslator(ENTITY_MAPPINGS__SQL_RESULT_SET_MAPPING), + createTypeMappingsTranslator() + }; + } + + private Translator createPlaceHolderTranslator(String domNameAndPath) { + return new Translator(domNameAndPath, (EStructuralFeature) null); + } + + protected Translator createVersionTranslator() { + return new Translator(VERSION, OrmPackage.eINSTANCE.getEntityMappingsInternal_Version(), DOM_ATTRIBUTE); + } + + protected Translator createPersistenceUnitMetadataTranslator() { + this.persistenceUnitMetadataTranslator = new PersistenceUnitMetadataTranslator(); + return this.persistenceUnitMetadataTranslator; + } + + protected Translator createPackageTranslator() { + return new Translator(ENTITY_MAPPINGS__PACKAGE, OrmPackage.eINSTANCE.getEntityMappingsForXml_PackageForXml()); + } + + protected Translator createSchemaTranslator() { + return new Translator(ENTITY_MAPPINGS__SCHEMA, OrmPackage.eINSTANCE.getEntityMappingsInternal_SpecifiedSchema()); + } + + protected Translator createCatalogTranslator() { + return new Translator(ENTITY_MAPPINGS__CATALOG, OrmPackage.eINSTANCE.getEntityMappingsInternal_SpecifiedCatalog()); + } + + protected Translator createAccessTranslator() { + return new AccessTypeElementTranslator(ENTITY_MAPPINGS__ACCESS, OrmPackage.eINSTANCE.getEntityMappingsInternal_SpecifiedAccess(), NO_STYLE); + } + + protected Translator createTypeMappingsTranslator() { + return new TypeMappingsTranslator(); + } + + private Translator createTableGeneratorTranslator() { + return new TableGeneratorTranslator(TABLE_GENERATOR, OrmPackage.eINSTANCE.getEntityMappingsInternal_TableGenerators()); + } + + private Translator createSequenceGeneratorTranslator() { + return new SequenceGeneratorTranslator(SEQUENCE_GENERATOR, OrmPackage.eINSTANCE.getEntityMappingsInternal_SequenceGenerators()); + } + + private Translator createNamedQueryTranslator() { + return new NamedQueryTranslator(NAMED_QUERY, OrmPackage.eINSTANCE.getEntityMappingsInternal_NamedQueries()); + } + + private Translator createNamedNativeQueryTranslator() { + return new NamedNativeQueryTranslator(NAMED_NATIVE_QUERY, OrmPackage.eINSTANCE.getEntityMappingsInternal_NamedNativeQueries()); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + EntityMappings entityMappings = (EntityMappings) super.createEMFObject(nodeName, readAheadName); + this.persistenceUnitMetadataTranslator.setEntityMappings(entityMappings); + return entityMappings; + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EntityTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EntityTranslator.java new file mode 100644 index 0000000000..bc4a1e0da1 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EntityTranslator.java @@ -0,0 +1,179 @@ +/******************************************************************************* + * 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); + } + }; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EnumeratedTypeElementTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EnumeratedTypeElementTranslator.java new file mode 100644 index 0000000000..c926b883d7 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EnumeratedTypeElementTranslator.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2007 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 java.util.Collections; +import java.util.List; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.EnumType; + +/** + * There is a bug in the translator framework that causes + * enumerators in xml elements and enumerators in xml attributes + * to be treated differently. When the enumerator is an attribute + * setting the model to the default causes the attribute to be removed. + * With an element is causes the default literal to be placed in + * the tag. + * + * The problem is wrapped up in the emf unsettable attribute as well. + * For attributes the eIsSet method returns false for the default value + * For elements the eIsSet method returns true for the default value. + * I don't want to have to use the unsettable option in emf since that would + * require that I call different api. I am not sure yet what the bug is in + * the translator, so I have entered one ~KFM + */ +public class EnumeratedTypeElementTranslator extends EnumeratorTranslator +{ + + public EnumeratedTypeElementTranslator(String domNameAndPath, EStructuralFeature aFeature, int style) { + super(domNameAndPath, aFeature, style); + } + + @Override + public Object getMOFValue(EObject mofObject) { + EnumType type = (EnumType) super.getMOFValue(mofObject); + if (type == EnumType.DEFAULT) { + return null; + } + return type; + } + + @Override + public List getMOFChildren(EObject mofObject) { + List result = super.getMOFChildren(mofObject); + if(result != null && result.size() > 0) { + EnumType type = (EnumType) result.get(0); + if(type.getValue() == EnumType.DEFAULT_VALUE) + result = Collections.EMPTY_LIST; + } + return result; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EnumeratorTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EnumeratorTranslator.java new file mode 100644 index 0000000000..2aed3cb282 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/EnumeratorTranslator.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * 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.common.util.Enumerator; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.wst.common.internal.emf.resource.Translator; +import org.eclipse.wst.common.internal.emf.resource.TranslatorPath; + +public class EnumeratorTranslator extends Translator +{ + + public EnumeratorTranslator(String domNameAndPath, EStructuralFeature aFeature, int style) { + super(domNameAndPath, aFeature, style); + } + + public EnumeratorTranslator(String domNameAndPath, EStructuralFeature aFeature, TranslatorPath translatorPath) { + super(domNameAndPath, aFeature, translatorPath); + } + + /** + * Overriding this because the default functionality is to return + * the toString of the Enumerator. This returns the literal value + * while we want to return the name instead. + * + * An example is fetchType where the literal value is going to be "Lazy" + * and the name is "LAZY". The xml needs "LAZY" to be placed in it + * while the ui wants to display "Lazy" + */ + @Override + public String convertValueToString(Object value, EObject owner) { + Enumerator enumerator = (Enumerator) value; + return enumerator.getName(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/GeneratedValueTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/GeneratedValueTranslator.java new file mode 100644 index 0000000000..64734dfd2e --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/GeneratedValueTranslator.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +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 GeneratedValueTranslator extends Translator implements OrmXmlMapper +{ + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + + private Translator[] children; + + public GeneratedValueTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createStrategyTranslator(), + createGeneratorTranslator(), + }; + } + + protected Translator createStrategyTranslator() { + return new Translator(GENERATED_VALUE__STRATEGY, MAPPINGS_PKG.getIGeneratedValue_Strategy(), DOM_ATTRIBUTE); + } + + protected Translator createGeneratorTranslator() { + return new Translator(GENERATED_VALUE__GENERATOR, MAPPINGS_PKG.getIGeneratedValue_Generator(), DOM_ATTRIBUTE); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return OrmFactory.eINSTANCE.createXmlGeneratedValue(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/GeneratorTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/GeneratorTranslator.java new file mode 100644 index 0000000000..0ad1f08982 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/GeneratorTranslator.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2007 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.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public abstract class GeneratorTranslator extends Translator implements OrmXmlMapper +{ + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + + private Translator[] children; + + public GeneratorTranslator(String domNameAndPath, EStructuralFeature aFeature, int style) { + super(domNameAndPath, aFeature, style); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + protected abstract Translator[] createChildren(); + + + protected Translator createNameTranslator() { + return new Translator(GENERATOR__NAME, MAPPINGS_PKG.getIGenerator_Name(), DOM_ATTRIBUTE); + } + + protected Translator createInitialValueTranslator() { + return new Translator(GENERATOR__INITIAL_VALUE, MAPPINGS_PKG.getIGenerator_SpecifiedInitialValue(), DOM_ATTRIBUTE); + } + + protected Translator createAllocationSizeTranslator() { + return new Translator(GENERATOR__ALLOCATION_SIZE, MAPPINGS_PKG.getIGenerator_SpecifiedAllocationSize(), DOM_ATTRIBUTE); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/IdTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/IdTranslator.java new file mode 100644 index 0000000000..076c1aead3 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/IdTranslator.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * 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.mappings.IId; +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 IdTranslator extends AttributeMappingTranslator +{ + private ColumnTranslator columnTranslator; + + public IdTranslator() { + super(ID, NO_STYLE); + this.columnTranslator = createColumnTranslator(); + } + + private ColumnTranslator createColumnTranslator() { + return new ColumnTranslator(COLUMN, JPA_CORE_XML_PKG.getIXmlColumnMapping_ColumnForXml()); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + IId xmlId = JPA_CORE_XML_FACTORY.createXmlId(); + this.columnTranslator.setColumnMapping(xmlId); + return xmlId; + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + columnTranslator, + createGeneratedValueTranslator(), + createTemporalTranslator(), + createTableGeneratorTranslator(), + createSequenceGeneratorTranslator(), + }; + } + + private Translator createGeneratedValueTranslator() { + return new GeneratedValueTranslator(GENERATED_VALUE, JpaCoreMappingsPackage.eINSTANCE.getIId_GeneratedValue()); + } + + private Translator createTemporalTranslator() { + return new TemporalTypeElementTranslator(ID__TEMPORAL, JpaCoreMappingsPackage.eINSTANCE.getIId_Temporal(), NO_STYLE); + } + + private Translator createTableGeneratorTranslator() { + return new TableGeneratorTranslator(TABLE_GENERATOR, JpaCoreMappingsPackage.eINSTANCE.getIId_TableGenerator()); + } + + private Translator createSequenceGeneratorTranslator() { + return new SequenceGeneratorTranslator(SEQUENCE_GENERATOR, JpaCoreMappingsPackage.eINSTANCE.getIId_SequenceGenerator()); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/JoinColumnTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/JoinColumnTranslator.java new file mode 100644 index 0000000000..95472e4324 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/JoinColumnTranslator.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.IJoinColumn; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class JoinColumnTranslator extends AbstractColumnTranslator + implements OrmXmlMapper +{ + private JoinColumnBuilder joinColumnBuilder; + + public JoinColumnTranslator(String domNameAndPath, EStructuralFeature aFeature, JoinColumnBuilder joinColumnBuilder) { + super(domNameAndPath, aFeature); + this.joinColumnBuilder = joinColumnBuilder; + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return joinColumnBuilder.createJoinColumn(); + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createReferencedColumnNameTranslator(), + createUniqueTranslator(), + createNullableTranslator(), + createInsertableTranslator(), + createUpdatableTranslator(), + createColumnDefinitionTranslator(), + createTableTranslator(), + }; + } + + protected Translator createReferencedColumnNameTranslator() { + return new Translator(REFERENCED_COLUMN_NAME, JPA_CORE_XML_PKG.getXmlJoinColumn_SpecifiedReferencedColumnNameForXml(), DOM_ATTRIBUTE); + } + + public interface JoinColumnBuilder { + IJoinColumn createJoinColumn(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/JoinTableTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/JoinTableTranslator.java new file mode 100644 index 0000000000..a84833a83d --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/JoinTableTranslator.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2007 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.JoinColumnTranslator.JoinColumnBuilder; +import org.eclipse.jpt.core.internal.mappings.IJoinColumn; +import org.eclipse.jpt.core.internal.mappings.IMultiRelationshipMapping; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.jpt.core.internal.mappings.IJoinTable.InverseJoinColumnOwner; +import org.eclipse.jpt.core.internal.mappings.IJoinTable.JoinColumnOwner; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class JoinTableTranslator extends AbstractTableTranslator +{ + + private IMultiRelationshipMapping mapping; + + + public JoinTableTranslator() { + super(JOIN_TABLE, JPA_CORE_XML_PKG.getXmlMultiRelationshipMappingForXml_JoinTableForXml()); + } + + protected IMultiRelationshipMapping getMapping() { + return this.mapping; + } + + void setMapping(IMultiRelationshipMapping mapping) { + this.mapping = mapping; + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return getMapping().getJoinTable(); + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createCatalogTranslator(), + createSchemaTranslator(), + createJoinColumnsTranslator(), + createInverseJoinColumnsTranslator(), + createUniqueConstraintTranslator(), + }; + } + + protected Translator createJoinColumnsTranslator() { + return new JoinColumnTranslator( + JOIN_COLUMN, + JpaCoreMappingsPackage.eINSTANCE.getIJoinTable_SpecifiedJoinColumns(), + buildJoinColumnsBuilder()); + } + + private JoinColumnBuilder buildJoinColumnsBuilder() { + return new JoinColumnBuilder() { + public IJoinColumn createJoinColumn() { + return OrmFactory.eINSTANCE.createXmlJoinColumn(new JoinColumnOwner(getMapping().getJoinTable())); + } + }; + } + + protected Translator createInverseJoinColumnsTranslator() { + return new JoinColumnTranslator( + INVERSE_JOIN_COLUMN, + JpaCoreMappingsPackage.eINSTANCE.getIJoinTable_SpecifiedInverseJoinColumns(), + buildInverseJoinColumnsBuilder()); + } + + private JoinColumnBuilder buildInverseJoinColumnsBuilder() { + return new JoinColumnBuilder() { + public IJoinColumn createJoinColumn() { + return OrmFactory.eINSTANCE.createXmlJoinColumn(new InverseJoinColumnOwner(getMapping().getJoinTable())); + } + }; + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/ManyToManyTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/ManyToManyTranslator.java new file mode 100644 index 0000000000..1321cf3537 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/ManyToManyTranslator.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * 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.XmlManyToMany; +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 ManyToManyTranslator extends MultiRelationshipTranslator +{ + public ManyToManyTranslator() { + super(MANY_TO_MANY); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + XmlManyToMany mapping = JPA_CORE_XML_FACTORY.createXmlManyToMany(); + this.getJoinTableTranslator().setMapping(mapping); + //this.getOrderByTranslator().setMapping(mapping); + return mapping; + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createTargetEntityTranslator(), + createFetchTypeTranslator(), + createMappedByTranslator(), + createOrderByTranslator(), + //getOrderByTranslator(), + createMapKeyTranslator(), + getJoinTableTranslator(), + createCascadeTranslator() + }; + } + protected Translator createMappedByTranslator() { + return new Translator(MAPPED_BY, JpaCoreMappingsPackage.eINSTANCE.getINonOwningMapping_MappedBy(), DOM_ATTRIBUTE); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/ManyToOneTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/ManyToOneTranslator.java new file mode 100644 index 0000000000..73929fe56f --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/ManyToOneTranslator.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * 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.jpt.core.internal.mappings.ISingleRelationshipMapping; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class ManyToOneTranslator extends SingleRelationshipTranslator +{ + public ManyToOneTranslator() { + super(MANY_TO_ONE); + } + + @Override + protected ISingleRelationshipMapping createMapping() { + return JPA_CORE_XML_FACTORY.createXmlManyToOne(); + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createTargetEntityTranslator(), + createFetchTypeTranslator(), + createJoinColumnsTranslator(), + createCascadeTranslator() + }; + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MappedSuperclassTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MappedSuperclassTranslator.java new file mode 100644 index 0000000000..9851844640 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MappedSuperclassTranslator.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * 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.OrmPackage; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class MappedSuperclassTranslator extends TypeMappingTranslator +{ + protected static final OrmPackage XML_PKG = + OrmPackage.eINSTANCE; + + + public MappedSuperclassTranslator() { + super(MAPPED_SUPERCLASS); + } + + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return JPA_CORE_XML_FACTORY.createXmlMappedSuperclass(); + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createJavaClassTranslator(), + createAccessTypeTranslator(), + createMetadataCompleteTranslator(), + createPlaceHolderTranslator(ENTITY__DESCRIPTION), + createPlaceHolderTranslator(ENTITY__ID_CLASS), + 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), + createPersistentAttributesTranslator() + }; + } + + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiObjectDependencyTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiObjectDependencyTranslator.java new file mode 100644 index 0000000000..41d8845714 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiObjectDependencyTranslator.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2006, 2007 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 java.util.HashMap; +import java.util.Map; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.wst.common.internal.emf.resource.DependencyTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public abstract class MultiObjectDependencyTranslator extends DependencyTranslator +{ + private static final Translator[] EMPTY_TRANSLATORS = new Translator[]{}; + + + private Map<EObject, Translator> translatorMap; + + public MultiObjectDependencyTranslator(String domNameAndPath, EStructuralFeature aFeature, EStructuralFeature aDependentFeature) { + super(domNameAndPath, aFeature, aDependentFeature); + this.translatorMap = new HashMap<EObject, Translator>(); + } + + + public Translator getDelegateFor(EObject o) { + return translatorMap.get(o); + } + + public abstract Translator getDelegateFor(String domName, String readAheadName); + + public EObject createEMFObject(String nodeName, String readAheadName) { + Translator translator = getDelegateFor(nodeName, readAheadName); + EObject eObject = translator.createEMFObject(nodeName, readAheadName); + this.translatorMap.put(eObject, translator); + return eObject; + } + + public Translator[] getChildren(Object o, int version) { + if (o == null) { + return EMPTY_TRANSLATORS; + } + Translator[] children = getDelegateFor((EObject) o).getChildren(o, version); + if (children == null) { + return EMPTY_TRANSLATORS; + } + return children; + } + + public String getDOMName(Object value) { + return getDelegateFor((EObject) value).getDOMName(value); + } + + public boolean isManagedByParent() { + return false; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiRelationshipTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiRelationshipTranslator.java new file mode 100644 index 0000000000..3a7de3df71 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/MultiRelationshipTranslator.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * 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.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public abstract class MultiRelationshipTranslator extends RelationshipTranslator +{ + private JoinTableTranslator tableTranslator; + + //private OrderByRefTranslator orderByTranslator; + + public MultiRelationshipTranslator(String domNameAndPath) { + super(domNameAndPath); + this.tableTranslator = createTableTranslator(); + //this.orderByTranslator = createOrderByTranslator(); + } + + protected Translator createFetchTypeTranslator() { + return new EnumeratorTranslator(FETCH, JpaCoreMappingsPackage.eINSTANCE.getIMultiRelationshipMapping_Fetch(), DOM_ATTRIBUTE); + } + + protected JoinTableTranslator getJoinTableTranslator() { + return this.tableTranslator; + } + + protected JoinTableTranslator createTableTranslator() { + this.tableTranslator = new JoinTableTranslator(); + return this.tableTranslator; + } + +// protected OrderByRefTranslator getOrderByTranslator() { +// return this.orderByTranslator; +// } +// +// protected OrderByRefTranslator createOrderByTranslator() { +// this.orderByTranslator = new OrderByRefTranslator(); +// return this.orderByTranslator; +// } + + protected Translator createOrderByTranslator() { + return new Translator(ORDER_BY , (EStructuralFeature) null); + } + + //placeholder until we support in our model, this allow us + //to keep the elements in the proper order + protected Translator createMapKeyTranslator() { + return new Translator(MAP_KEY , (EStructuralFeature) null); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/NamedNativeQueryTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/NamedNativeQueryTranslator.java new file mode 100644 index 0000000000..480a67f36b --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/NamedNativeQueryTranslator.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +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 NamedNativeQueryTranslator extends Translator implements OrmXmlMapper +{ + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + + private Translator[] children; + + public NamedNativeQueryTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature, NO_STYLE); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createResultClassTranslator(), + createResultSetMappingTranslator(), + createQueryTranslator(), + createQueryHintTranslator(), + }; + } + + protected Translator createNameTranslator() { + return new Translator(NAMED_NATIVE_QUERY__NAME, MAPPINGS_PKG.getIQuery_Name(), DOM_ATTRIBUTE); + } + + protected Translator createQueryTranslator() { + return new Translator(NAMED_NATIVE_QUERY__QUERY, MAPPINGS_PKG.getIQuery_Query(), NO_STYLE); + } + + protected Translator createResultClassTranslator() { + return new Translator(NAMED_NATIVE_QUERY__RESULT_CLASS, MAPPINGS_PKG.getINamedNativeQuery_ResultClass(), DOM_ATTRIBUTE); + } + + protected Translator createResultSetMappingTranslator() { + return new Translator(NAMED_NATIVE_QUERY__RESULT_SET_MAPPING, MAPPINGS_PKG.getINamedNativeQuery_ResultSetMapping(), DOM_ATTRIBUTE); + } + + protected Translator createQueryHintTranslator() { + return new QueryHintTranslator(NAMED_NATIVE_QUERY__HINT, MAPPINGS_PKG.getIQuery_Hints()); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return OrmFactory.eINSTANCE.createXmlNamedQuery(); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/NamedQueryTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/NamedQueryTranslator.java new file mode 100644 index 0000000000..44afa3ce69 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/NamedQueryTranslator.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +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 NamedQueryTranslator extends Translator implements OrmXmlMapper +{ + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + + private Translator[] children; + + public NamedQueryTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature, NO_STYLE); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createQueryTranslator(), + createQueryHintTranslator(), + }; + } + + protected Translator createNameTranslator() { + return new Translator(NAMED_QUERY__NAME, MAPPINGS_PKG.getIQuery_Name(), DOM_ATTRIBUTE); + } + + protected Translator createQueryTranslator() { + return new Translator(NAMED_QUERY__QUERY, MAPPINGS_PKG.getIQuery_Query(), NO_STYLE); + } + + protected Translator createQueryHintTranslator() { + return new QueryHintTranslator(NAMED_QUERY__HINT, MAPPINGS_PKG.getIQuery_Hints()); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return OrmFactory.eINSTANCE.createXmlNamedQuery(); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OneToManyTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OneToManyTranslator.java new file mode 100644 index 0000000000..53857d8d6f --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OneToManyTranslator.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * 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.XmlOneToMany; +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 OneToManyTranslator extends MultiRelationshipTranslator +{ + public OneToManyTranslator() { + super(ONE_TO_MANY); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + XmlOneToMany mapping = JPA_CORE_XML_FACTORY.createXmlOneToMany(); + this.getJoinTableTranslator().setMapping(mapping); + //this.getOrderByTranslator().setMapping(mapping); + return mapping; + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createTargetEntityTranslator(), + createFetchTypeTranslator(), + createMappedByTranslator(), + createOrderByTranslator(), + //getOrderByTranslator(), + createMapKeyTranslator(), + getJoinTableTranslator(), + createCascadeTranslator() + }; + } + + protected Translator createMappedByTranslator() { + return new Translator(MAPPED_BY, JpaCoreMappingsPackage.eINSTANCE.getINonOwningMapping_MappedBy(), DOM_ATTRIBUTE); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OneToOneTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OneToOneTranslator.java new file mode 100644 index 0000000000..6954e93e32 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OneToOneTranslator.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2007 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.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.ISingleRelationshipMapping; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class OneToOneTranslator extends SingleRelationshipTranslator +{ + public OneToOneTranslator() { + super(ONE_TO_ONE); + } + + @Override + protected ISingleRelationshipMapping createMapping() { + return JPA_CORE_XML_FACTORY.createXmlOneToOne(); + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createTargetEntityTranslator(), + createFetchTypeTranslator(), + createPlaceHolderTranslator(ONE_TO_ONE__PRIMARY_KEY_JOIN_COLUMNS), + createJoinColumnsTranslator(), + createPlaceHolderTranslator(ONE_TO_ONE__JOIN_TABLE), + createCascadeTranslator() + }; + } + private Translator createPlaceHolderTranslator(String domNameAndPath) { + return new Translator(domNameAndPath, (EStructuralFeature) null); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrderByRefTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrderByRefTranslator.java new file mode 100644 index 0000000000..a2a282ec02 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrderByRefTranslator.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2007 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.OrmPackage; +import org.eclipse.jpt.core.internal.mappings.IMultiRelationshipMapping; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.jpt.core.internal.mappings.OrderingType; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class OrderByRefTranslator extends Translator implements OrmXmlMapper +{ + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + private static Translator[] children; + + private IMultiRelationshipMapping mapping; + + public OrderByRefTranslator() { + super(ORDER_BY, JPA_CORE_XML_PKG.getXmlMultiRelationshipMappingForXml_OrderByForXml()); + this.fStyle = EMPTY_TAG; + } + + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + private static Translator[] createChildren() { + return new Translator[] { + new Translator(TEXT_ATTRIBUTE_VALUE, JpaCoreMappingsPackage.eINSTANCE.getIOrderBy_Value()) + }; + } + + public EObject createEMFObject(String nodeName, String readAheadName) { + return this.mapping.getOrderBy(); + } + + protected IMultiRelationshipMapping getMapping() { + return this.mapping; + } + + void setMapping(IMultiRelationshipMapping mapping) { + this.mapping = mapping; + } + + @Override + public Object convertStringToValue(String strValue, EObject owner) { + if (strValue == null) { + if (mapping.getOrderBy().getType() == OrderingType.PRIMARY_KEY) { + return Boolean.TRUE; + } + } + return super.convertStringToValue(strValue, owner); + } + + public boolean isSetMOFValue(EObject emfObject) { + boolean isSet = feature != null && emfObject.eIsSet(feature); + return isSet && (mapping.getOrderBy().getType() == OrderingType.PRIMARY_KEY); + } + + @Override + public boolean isManagedByParent() { + return (mapping.getOrderBy().getType() == OrderingType.PRIMARY_KEY); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlMapper.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlMapper.java new file mode 100644 index 0000000000..d45e5b3cec --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlMapper.java @@ -0,0 +1,168 @@ +/******************************************************************************* + * 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; + +public interface OrmXmlMapper +{ + String XML_NS = "xmlns"; //$NON-NLS-1$ + String XML_NS_XSI = "xmlns:xsi"; //$NON-NLS-1$ + String XSI_SCHEMA_LOCATION = "xsi:schemaLocation"; //$NON-NLS-1$ + String XSI_NS_URL = "http://www.w3.org/2001/XMLSchema-instance"; //$NON-NLS-1$ + String PERSISTENCE_NS_URL = "http://java.sun.com/xml/ns/persistence/orm"; //$NON-NLS-1$ + String ORM_SCHEMA_LOC_1_0 = "http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"; //$NON-NLS-1$ + + String FOO="foo"; //$NON-NLS-1$ + String BAR="bar"; //$NON-NLS-1$ + + String ACCESS = "access"; //$NON-NLS-1$ + String ATTRIBUTES = "attributes"; //$NON-NLS-1$ + String ATTRIBUTE_OVERRIDE_NAME = "name"; //$NON-NLS-1$ + String ATTRIBUTE_OVERRIDE_COLUMN = "column"; //$NON-NLS-1$ + String ASSOCIATION_OVERRIDE_NAME = "name"; //$NON-NLS-1$ + String ASSOCIATION_OVERRIDE_JOIN_COLUMN = "join-column"; //$NON-NLS-1$ + String BASIC = "basic"; //$NON-NLS-1$ + String BASIC__ENUMERATED = "enumerated"; //$NON-NLS-1$ + + String CASCADE = "cascade"; //$NON-NLS-1$ + String CASCADE_PERSIST = "cascade-persist"; //$NON-NLS-1$ + String CATALOG = "catalog"; //$NON-NLS-1$ + String CLASS = "class"; //$NON-NLS-1$ + String COLUMN = "column"; //$NON-NLS-1$ + String COLUMN__LENGTH = "length"; //$NON-NLS-1$ + String COLUMN__PRECISION= "precision"; //$NON-NLS-1$ + String COLUMN__SCALE= "scale"; //$NON-NLS-1$ + String COLUMN__COLUMN_DEFINITION= "column-definition"; //$NON-NLS-1$ + String COLUMN__NULLABLE = "nullable"; //$NON-NLS-1$ + String COLUMN__UNIQUE = "unique"; //$NON-NLS-1$ + String COLUMN__UPDATABLE = "updatable"; //$NON-NLS-1$ + String COLUMN__INSERTABLE = "insertable"; //$NON-NLS-1$ + String COLUMN__TABLE = "table"; //$NON-NLS-1$ + String COLUMN__NAME = "name"; //$NON-NLS-1$ + + String DISCRIMINATOR_COLUMN__NAME = "name"; //$NON-NLS-1$ + String DISCRIMINATOR_COLUMN__DISCRIMINATOR_TYPE = "discriminator-type"; //$NON-NLS-1$ + String DISCRIMINATOR_COLUMN__COLUMN_DEFINITION = "column-definition"; //$NON-NLS-1$ + String DISCRIMINATOR_COLUMN__LENGTH = "length"; //$NON-NLS-1$ + String EMBEDDABLE = "embeddable"; //$NON-NLS-1$ + String EMBEDDABLE__DESCRIPTION = "description"; //$NON-NLS-1$ + + String EMBEDDED = "embedded"; //$NON-NLS-1$ + String EMBEDDED__ATTRIBUTE_OVERRIDE = "attribute-override"; //$NON-NLS-1$ + String EMBEDDED_ID = "embedded-id"; //$NON-NLS-1$ + String EMBEDDED_ID__ATTRIBUTE_OVERRIDE = "attribute-override"; //$NON-NLS-1$ + + String ENTITY = "entity"; //$NON-NLS-1$ + String ENTITY__DESCRIPTION = "description"; //$NON-NLS-1$ + String ENTITY__TABLE = "table"; //$NON-NLS-1$ + String ENTITY__PRIMARY_KEY_JOIN_COLUMN = "primary-key-join-column"; //$NON-NLS-1$ + String ENTITY__ID_CLASS = "id-class"; //$NON-NLS-1$ + String ENTITY__INHERITANCE = "inheritance"; //$NON-NLS-1$ + String ENTITY__DISCRIMINATOR_VALUE = "discriminator-value"; //$NON-NLS-1$ + String ENTITY__DISCRIMINATOR_COLUMN = "discriminator-column"; //$NON-NLS-1$ + String ENTITY__SEQUENCE_GENERATOR = "sequence-generator"; //$NON-NLS-1$ + String ENTITY__TABLE_GENERATOR = "table-generator"; //$NON-NLS-1$ + String ENTITY__NAMED_QUERY = "named-query"; //$NON-NLS-1$ + String ENTITY__NAMED_NATIVE_QUERY = "named-native-query"; //$NON-NLS-1$ + String ENTITY__SQL_RESULT_SET_MAPPING = "sql-result-set-mapping"; //$NON-NLS-1$ + String ENTITY__EXCLUDE_DEFAULT_LISTENERS = "exclude-default-listeners"; //$NON-NLS-1$ + String ENTITY__EXCLUDE_SUPERCLASS_LISTENERS = "exclude-superclass-listeners"; //$NON-NLS-1$ + String ENTITY__ENTITY_LISTENERS = "entity-listeners"; //$NON-NLS-1$ + String ENTITY__PRE_PERSIST = "pre-persist"; //$NON-NLS-1$ + String ENTITY__POST_PERSIST = "post-persist"; //$NON-NLS-1$ + String ENTITY__PRE_REMOVE = "pre-remove"; //$NON-NLS-1$ + String ENTITY__POST_REMOVE = "post-remove"; //$NON-NLS-1$ + String ENTITY__PRE_UPDATE = "pre-update"; //$NON-NLS-1$ + String ENTITY__POST_UPDATE = "post-update"; //$NON-NLS-1$ + String ENTITY__POST_LOAD = "post-load"; //$NON-NLS-1$ + String ENTITY__ATTRIBUTE_OVERRIDE = "attribute-override"; //$NON-NLS-1$ + String ENTITY__ASSOCIATION_OVERRIDE = "association-override"; //$NON-NLS-1$ + + String ENTITY_MAPPINGS = "entity-mappings"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__DESCRIPTION = "description"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__PERSISTENCE_UNIT_METADATA = "persistence-unit-metadata"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__PACKAGE = "package"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__SCHEMA = "schema"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__CATALOG = "catalog"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__ACCESS = "access"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__SEQUENCE_GENERATOR = "sequence-generator"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__TABLE_GENERATOR = "table-generator"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__NAMED_QUERY = "named-query"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__NAMED_NATIVE_QUERY = "named-native-query"; //$NON-NLS-1$ + String ENTITY_MAPPINGS__SQL_RESULT_SET_MAPPING = "sql-result-set-mapping"; //$NON-NLS-1$ + + String FETCH = "fetch"; //$NON-NLS-1$ + String JOIN_COLUMN = "join-column"; //$NON-NLS-1$ + String JOIN_TABLE = "join-table"; //$NON-NLS-1$ + String ID = "id"; //$NON-NLS-1$ + String ID__TEMPORAL = "temporal"; //$NON-NLS-1$ + String GENERATED_VALUE = "generated-value"; //$NON-NLS-1$ + String GENERATED_VALUE__STRATEGY = "strategy"; //$NON-NLS-1$ + String GENERATED_VALUE__GENERATOR = "generator"; //$NON-NLS-1$ + String GENERATOR__NAME = "name"; //$NON-NLS-1$ + String GENERATOR__INITIAL_VALUE = "initial-value"; //$NON-NLS-1$ + String GENERATOR__ALLOCATION_SIZE = "allocation-size"; //$NON-NLS-1$ + + String INVERSE_JOIN_COLUMN = "inverse-join-column"; //$NON-NLS-1$ + String LOB = "lob"; //$NON-NLS-1$ + String MANY_TO_MANY = "many-to-many"; //$NON-NLS-1$ + String MANY_TO_ONE = "many-to-one"; //$NON-NLS-1$ + String MAP_KEY = "map-key"; //$NON-NLS-1$ + String MAPPED_BY = "mapped-by"; //$NON-NLS-1$ + String MAPPED_SUPERCLASS = "mapped-superclass"; //$NON-NLS-1$ + String METADATA_COMPLETE = "metadata-complete"; //$NON-NLS-1$ + String NAME = "name"; //$NON-NLS-1$ + + String NAMED_NATIVE_QUERY = "named-native-query"; //$NON-NLS-1$ + String NAMED_NATIVE_QUERY__NAME = "name"; //$NON-NLS-1$ + String NAMED_NATIVE_QUERY__QUERY = "query"; //$NON-NLS-1$ + String NAMED_NATIVE_QUERY__RESULT_CLASS = "result-class"; //$NON-NLS-1$ + String NAMED_NATIVE_QUERY__RESULT_SET_MAPPING = "result-set-mapping"; //$NON-NLS-1$ + String NAMED_NATIVE_QUERY__HINT = "hint"; //$NON-NLS-1$ + + String NAMED_QUERY = "named-query"; //$NON-NLS-1$ + String NAMED_QUERY__NAME = "name"; //$NON-NLS-1$ + String NAMED_QUERY__QUERY = "query"; //$NON-NLS-1$ + String NAMED_QUERY__HINT = "hint"; //$NON-NLS-1$ + + String QUERY_HINT__NAME = "name"; //$NON-NLS-1$ + String QUERY_HINT__VALUE = "value"; //$NON-NLS-1$ + + String ONE_TO_MANY = "one-to-many"; //$NON-NLS-1$ + String ONE_TO_ONE = "one-to-one"; //$NON-NLS-1$ + String ONE_TO_ONE__PRIMARY_KEY_JOIN_COLUMNS = "primary-key-join-columns"; //$NON-NLS-1$ + String ONE_TO_ONE__JOIN_TABLE = "join-table"; //$NON-NLS-1$ + + String OPTIONAL = "optional"; //$NON-NLS-1$ + String ORDER_BY = "order-by"; //$NON-NLS-1$ + String PACKAGE="package"; //$NON-NLS-1$ + String PERSISTENCE_UNIT_DEFAULTS="persistence-unit-defaults"; //$NON-NLS-1$ + String PERSISTENCE_UNIT_DEFAULTS__ENTITY_LISTENERS="entity-listeners"; //$NON-NLS-1$ + + String PERSISTENCE_UNIT_METADATA="persistence-unit-metadata"; //$NON-NLS-1$ + String REFERENCED_COLUMN_NAME="referenced-column-name"; //$NON-NLS-1$ + String SCHEMA="schema"; //$NON-NLS-1$ + String SECONDARY_TABLE = "secondary-table"; //$NON-NLS-1$ + String SECONDARY_TABLE__PRIMARY_KEY_JOIN_COLUMN = "primary-key-join-column"; //$NON-NLS-1$ + String SEQUENCE_GENERATOR = "sequence-generator"; //$NON-NLS-1$ + String SEQUENCE_GENERATOR__SEQUENCE_NAME = "sequence-name"; //$NON-NLS-1$ + String STRATEGY = "strategy"; //$NON-NLS-1$ + String TABLE_GENERATOR = "table-generator"; //$NON-NLS-1$ + String TABLE_GENERATOR__TABLE = "table"; //$NON-NLS-1$ + String TABLE_GENERATOR__CATALOG = "catalog"; //$NON-NLS-1$ + String TABLE_GENERATOR__SCHEMA = "schema"; //$NON-NLS-1$ + String TABLE_GENERATOR__PK_COLUMN_NAME = "pk-column-name"; //$NON-NLS-1$ + String TABLE_GENERATOR__VALUE_COLUMN_NAME = "value-column-name"; //$NON-NLS-1$ + String TABLE_GENERATOR__PK_COLUMN_VALUE = "pk-column-value"; //$NON-NLS-1$ + String TARGET_ENTITY = "target-entity"; //$NON-NLS-1$ + String TEMPORAL = "temporal"; //$NON-NLS-1$ + String TRANSIENT = "transient"; //$NON-NLS-1$ + String UNIQUE_CONSTRAINT = "unique-constraint"; //$NON-NLS-1$ + String VERSION = "version"; //$NON-NLS-1$ + String XML_MAPPING_METADATA_COMPLETE = "xml-mapping-metadata-complete"; //$NON-NLS-1$ +}
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceFactory.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceFactory.java new file mode 100644 index 0000000000..684c7d411c --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceFactory.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * 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.common.util.URI; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.wst.common.componentcore.internal.impl.WTPResourceFactoryRegistry; +import org.eclipse.wst.common.internal.emf.resource.Renderer; +import org.eclipse.wst.common.internal.emf.resource.RendererFactory; +import org.eclipse.wst.common.internal.emf.resource.TranslatorResource; +import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceFactory; +import org.eclipse.wst.xml.core.internal.emf2xml.EMF2DOMSSERendererFactory; + +public class OrmXmlResourceFactory extends TranslatorResourceFactory +{ + public static final String ORM_XML_FILE_NAME = "orm.xml"; //$NON-NLS-1$ + public static final URI ORM_XML_FILE_URI = URI.createURI(ORM_XML_FILE_NAME); //$NON-NLS-1$ + + /** + * Register myself with the Resource.Factory.Registry + */ + public static void registerWith(RendererFactory rendererFactory) { + WTPResourceFactoryRegistry.INSTANCE.registerLastFileSegment(ORM_XML_FILE_NAME, new OrmXmlResourceFactory(rendererFactory)); + } + + /** + * Register myself using the default renderer factory. + * @see #registerWith(RendererFactory) + */ + public static void register() { + registerWith(EMF2DOMSSERendererFactory.INSTANCE); + } + + public static Resource.Factory getRegisteredFactory() { + return WTPResourceFactoryRegistry.INSTANCE.getFactory(ORM_XML_FILE_URI); + } + + + public OrmXmlResourceFactory(RendererFactory aRendererFactory, boolean listeningForUpdates) { + super(aRendererFactory, listeningForUpdates); + } + + public OrmXmlResourceFactory(RendererFactory aRendererFactory) { + super(aRendererFactory); + } + + /** + * @see TranslatorResourceFactory#createResource(URI, Renderer) + */ + protected TranslatorResource createResource(URI uri, Renderer renderer) { + return new OrmXmlResourceImpl(uri, renderer); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceImpl.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceImpl.java new file mode 100644 index 0000000000..517725393b --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/OrmXmlResourceImpl.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * 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.common.util.URI; +import org.eclipse.jpt.core.internal.content.orm.EntityMappingsInternal; +import org.eclipse.jpt.core.internal.content.orm.OrmXmlResource; +import org.eclipse.wst.common.internal.emf.resource.Renderer; +import org.eclipse.wst.common.internal.emf.resource.Translator; +import org.eclipse.wst.common.internal.emf.resource.TranslatorResource; +import org.eclipse.wst.common.internal.emf.resource.TranslatorResourceImpl; + +public class OrmXmlResourceImpl extends TranslatorResourceImpl + implements OrmXmlResource +{ + + private Translator rootTranslator; + + public OrmXmlResourceImpl(Renderer aRenderer) { + super(aRenderer); + } + + public OrmXmlResourceImpl(URI uri, Renderer aRenderer) { + super(uri, aRenderer); + } + + /** + * @see TranslatorResourceImpl#getDefaultPublicId() + */ + protected String getDefaultPublicId() { + return null; + // only applicable for DTD-based files + } + + /** + * @see TranslatorResourceImpl#getDefaultSystemId() + */ + protected String getDefaultSystemId() { + return null; + // only applicable for DTD-based files + } + + /** + * @see TranslatorResourceImpl#getDefaultVersionId() + */ + protected int getDefaultVersionID() { + return 10; + // this seems to be the default version of the spec for this doc + // and the id 10 maps to the version 1.0 + } + + /** + * @see TranslatorResource#getDoctype() + */ + public String getDoctype() { + return null; + // only applicable for DTD-based files + } + + /** + * @see TranslatorResource#getRootTranslator() + */ + public Translator getRootTranslator() { + if (this.rootTranslator == null) { + this.rootTranslator = buildRootTranslator(); + } + return this.rootTranslator; + } + + protected Translator buildRootTranslator() { + return new EntityMappingsTranslator(); + } + + /** + * @see OrmXmlResource#getXmlFileContent() + */ + public EntityMappingsInternal getXmlFileContent() { + return (EntityMappingsInternal) getRootObject(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/PersistenceUnitDefaultsTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/PersistenceUnitDefaultsTranslator.java new file mode 100644 index 0000000000..b21860381d --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/PersistenceUnitDefaultsTranslator.java @@ -0,0 +1,100 @@ +/******************************************************************************* + * 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.jpt.core.internal.content.orm.PersistenceUnitMetadata; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class PersistenceUnitDefaultsTranslator extends Translator implements OrmXmlMapper +{ + private Translator[] children; + + private PersistenceUnitMetadata persistenceUnitMetadata; + + public PersistenceUnitDefaultsTranslator() { + super(PERSISTENCE_UNIT_DEFAULTS, OrmPackage.eINSTANCE.getPersistenceUnitMetadataForXml_PersistenceUnitDefaultsForXml()); + } + + public Translator[] getChildren(Object target, int versionID) { + if (this.children == null) { + this.children = createChildren(); + } + return this.children; + } + + private Translator[] createChildren() { + return new Translator[] { + createSchemaTranslator(), + createCatalogTranslator(), + createAccessTranslator(), + createCascadePersistTranslator(), + createPlaceHolderTranslator(PERSISTENCE_UNIT_DEFAULTS__ENTITY_LISTENERS), + }; + } + + private Translator createPlaceHolderTranslator(String domNameAndPath) { + return new Translator(domNameAndPath, (EStructuralFeature) null); + } + + private Translator createSchemaTranslator() { + return new Translator(SCHEMA, OrmPackage.eINSTANCE.getPersistenceUnitDefaultsForXml_SchemaForXml()); + } + + private Translator createCatalogTranslator() { + return new Translator(CATALOG, OrmPackage.eINSTANCE.getPersistenceUnitDefaultsForXml_CatalogForXml()); + } + + private Translator createAccessTranslator() { + return new AccessTypeElementTranslator(ACCESS, OrmPackage.eINSTANCE.getPersistenceUnitDefaultsForXml_AccessForXml(), NO_STYLE); + } + + private Translator createCascadePersistTranslator() { + return new EmptyTagBooleanTranslator(CASCADE_PERSIST, OrmPackage.eINSTANCE.getPersistenceUnitDefaultsForXml_CascadePersistForXml()); + } + + @Override + //This is called when the persistence-unit-defaults tag is added + //by hand through the xml editor. In this situation PersistenceUnitMetaData.persistenceUnitDefaultsForXml + //is null and we don't want to create a new PersistenceUnitDefaults object, we just want to + //reuse the one already created by our internal model + public EObject createEMFObject(String nodeName, String readAheadName) { + return getPersistenceUnitMetadata().getPersistenceUnitDefaults(); + } + + private PersistenceUnitMetadata getPersistenceUnitMetadata() { + return this.persistenceUnitMetadata; + } + + void setPersistenceUnitMetadata(PersistenceUnitMetadata persistenceUnitMetadata) { + this.persistenceUnitMetadata = persistenceUnitMetadata; + } + + @Override + //if my object has containtment = true then the translators clear out all adapters + //even the ones it didn't add. if i have containtment = false then the translators + //are not removing the adapter they added + // the shared flag gets set when containment=true. isShared() is called in + //EMF2DOMAdapterImpl.primUpdateMOFFeature which then calls removeMOFValue() if + //isShared() returns false. removeMOFValue() removes the EMF2DOMSSEAdapter + //and then since isContainment() = false the call to ExtendedEcoreUtil.unload(value); + // does not occur. In that method the adapters are all cleared out thus my UI + //no longer has listeners on the model. Talk to KFM about this and maybe + //she'll remember the details. \ + + //Need to enter a bug against the translators as well. Now one other + //adapter is not being removed, the AnnotationsAdapter, this is being added by the translators + //and never removed. not sure + public boolean isShared() { + return false; + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/PersistenceUnitMetadataTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/PersistenceUnitMetadataTranslator.java new file mode 100644 index 0000000000..16deb48060 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/PersistenceUnitMetadataTranslator.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * 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.EntityMappings; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.jpt.core.internal.content.orm.PersistenceUnitMetadata; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class PersistenceUnitMetadataTranslator extends Translator implements OrmXmlMapper +{ + private Translator[] children; + + private PersistenceUnitDefaultsTranslator persistenceUnitDefaultsTranslator; + private EntityMappings entityMappings; + + public PersistenceUnitMetadataTranslator() { + super(PERSISTENCE_UNIT_METADATA, OrmPackage.eINSTANCE.getEntityMappingsForXml_PersistenceUnitMetadataForXml()); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + private Translator[] createChildren() { + return new Translator[] { + createXmlMappingMetadataCompleteTranslator(), + createPersistenceUnitDefaultsTranslator(), + }; + } + + private Translator createXmlMappingMetadataCompleteTranslator() { + return new EmptyTagBooleanTranslator(XML_MAPPING_METADATA_COMPLETE, OrmPackage.eINSTANCE.getPersistenceUnitMetadataForXml_XmlMappingMetadataCompleteForXml()); + } + + private Translator createPersistenceUnitDefaultsTranslator() { + this.persistenceUnitDefaultsTranslator = new PersistenceUnitDefaultsTranslator(); + return this.persistenceUnitDefaultsTranslator; + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + PersistenceUnitMetadata persistenceUnitMetadata = getEntityMappings().getPersistenceUnitMetadata(); + this.persistenceUnitDefaultsTranslator.setPersistenceUnitMetadata(persistenceUnitMetadata); + return persistenceUnitMetadata; + } + + private EntityMappings getEntityMappings() { + return this.entityMappings; + } + + public void setEntityMappings(EntityMappings entityMappings) { + this.entityMappings = entityMappings; + } + + @Override + //if my object has containtment = true then the translators clear out all adapters + //even the ones it didn't add. if i have containtment = false then the translators + //are not removing the adapter they added + // the shared flag gets set when containment=true. isShared() is called in + //EMF2DOMAdapterImpl.primUpdateMOFFeature which then calls removeMOFValue() if + //isShared() returns false. removeMOFValue() removes the EMF2DOMSSEAdapter + //and then since isContainment() = false the call to ExtendedEcoreUtil.unload(value); + // does not occur. In that method the adapters are all cleared out thus my UI + //no longer has listeners on the model. Talk to KFM about this and maybe + //she'll remember the details. \ + + //Need to enter a bug against the translators as well. Now one other + //adapter is not being removed, the AnnotationsAdapter, this is being added by the translators + //and never removed. not sure + public boolean isShared() { + return false; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/PrimaryKeyJoinColumnTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/PrimaryKeyJoinColumnTranslator.java new file mode 100644 index 0000000000..74a14c07a8 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/PrimaryKeyJoinColumnTranslator.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.IPrimaryKeyJoinColumn; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class PrimaryKeyJoinColumnTranslator extends AbstractColumnTranslator + implements OrmXmlMapper +{ + private PrimaryKeyJoinColumnBuilder joinColumnBuilder; + + public PrimaryKeyJoinColumnTranslator(String domNameAndPath, EStructuralFeature aFeature, PrimaryKeyJoinColumnBuilder joinColumnBuilder) { + super(domNameAndPath, aFeature); + this.joinColumnBuilder = joinColumnBuilder; + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return joinColumnBuilder.createPrimaryKeyJoinColumn(); + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createReferencedColumnNameTranslator(), + createColumnDefinitionTranslator(), + }; + } + + protected Translator createReferencedColumnNameTranslator() { + return new Translator(REFERENCED_COLUMN_NAME, JPA_CORE_XML_PKG.getXmlPrimaryKeyJoinColumn_SpecifiedReferencedColumnNameForXml(), DOM_ATTRIBUTE); + } + + public interface PrimaryKeyJoinColumnBuilder { + IPrimaryKeyJoinColumn createPrimaryKeyJoinColumn(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/QueryHintTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/QueryHintTranslator.java new file mode 100644 index 0000000000..502440429f --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/QueryHintTranslator.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +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 QueryHintTranslator extends Translator implements OrmXmlMapper +{ + protected static final JpaCoreMappingsPackage MAPPINGS_PKG = + JpaCoreMappingsPackage.eINSTANCE; + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + + private Translator[] children; + + public QueryHintTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature, NO_STYLE); + } + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createValueTranslator(), + }; + } + + protected Translator createNameTranslator() { + return new Translator(QUERY_HINT__NAME, MAPPINGS_PKG.getIQueryHint_Name(), DOM_ATTRIBUTE); + } + + protected Translator createValueTranslator() { + return new Translator(QUERY_HINT__VALUE, MAPPINGS_PKG.getIQueryHint_Value(), DOM_ATTRIBUTE); + } + + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return OrmFactory.eINSTANCE.createXmlQueryHint(); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/RelationshipTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/RelationshipTranslator.java new file mode 100644 index 0000000000..bddf4eb67a --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/RelationshipTranslator.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * 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.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public abstract class RelationshipTranslator extends AttributeMappingTranslator +{ + public RelationshipTranslator(String domNameAndPath) { + super(domNameAndPath, NO_STYLE); + } + + protected Translator createTargetEntityTranslator() { + return new Translator(TARGET_ENTITY, JpaCoreMappingsPackage.eINSTANCE.getIRelationshipMapping_SpecifiedTargetEntity(), DOM_ATTRIBUTE); + } + + //placeholder until we support in our model, this allow us + //to keep the elements in the proper order + protected Translator createCascadeTranslator() { + return new Translator(CASCADE , (EStructuralFeature) null); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/SecondaryTableTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/SecondaryTableTranslator.java new file mode 100644 index 0000000000..169dc17ef3 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/SecondaryTableTranslator.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.IEntity; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class SecondaryTableTranslator extends AbstractTableTranslator +{ + + private IEntity entity; + + public SecondaryTableTranslator() { + super(SECONDARY_TABLE, JPA_CORE_XML_PKG.getXmlEntity_SpecifiedSecondaryTables()); + } + + + protected IEntity getEntity() { + return this.entity; + } + + void setEntity(IEntity entity) { + this.entity = entity; + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return getEntity().createSecondaryTable(0); + } + + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createCatalogTranslator(), + createSchemaTranslator(), + createPrimaryKeyJoinColumnTranslator(), + createUniqueConstraintTranslator(), + }; + } + + //placeholder until we support primaryKeyJoinColumns + protected Translator createPrimaryKeyJoinColumnTranslator() { + return new Translator(SECONDARY_TABLE__PRIMARY_KEY_JOIN_COLUMN, (EStructuralFeature) null); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/SequenceGeneratorTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/SequenceGeneratorTranslator.java new file mode 100644 index 0000000000..e9b3d69c4a --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/SequenceGeneratorTranslator.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class SequenceGeneratorTranslator extends GeneratorTranslator +{ + + public SequenceGeneratorTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature, NO_STYLE); + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createSequenceNameTranslator(), + createInitialValueTranslator(), + createAllocationSizeTranslator(), + }; + } + + protected Translator createSequenceNameTranslator() { + return new Translator(SEQUENCE_GENERATOR__SEQUENCE_NAME, MAPPINGS_PKG.getISequenceGenerator_SpecifiedSequenceName(), DOM_ATTRIBUTE); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return OrmFactory.eINSTANCE.createXmlSequenceGenerator(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/SingleRelationshipTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/SingleRelationshipTranslator.java new file mode 100644 index 0000000000..97851092f0 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/SingleRelationshipTranslator.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * 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.JoinColumnTranslator.JoinColumnBuilder; +import org.eclipse.jpt.core.internal.mappings.IJoinColumn; +import org.eclipse.jpt.core.internal.mappings.ISingleRelationshipMapping; +import org.eclipse.jpt.core.internal.mappings.JpaCoreMappingsPackage; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public abstract class SingleRelationshipTranslator extends RelationshipTranslator +{ + private ISingleRelationshipMapping singleRelationshipMapping; + + public SingleRelationshipTranslator(String domNameAndPath) { + super(domNameAndPath); + } + + @Override + public final EObject createEMFObject(String nodeName, String readAheadName) { + this.singleRelationshipMapping = createMapping(); + return this.singleRelationshipMapping; + } + + protected abstract ISingleRelationshipMapping createMapping(); + + protected Translator createFetchTypeTranslator() { + return new EnumeratorTranslator(FETCH, JpaCoreMappingsPackage.eINSTANCE.getISingleRelationshipMapping_Fetch(), DOM_ATTRIBUTE); + } + + protected Translator createJoinColumnsTranslator() { + return new JoinColumnTranslator( + JOIN_COLUMN, + JpaCoreMappingsPackage.eINSTANCE.getISingleRelationshipMapping_SpecifiedJoinColumns(), + buildJoinColumnsCreator()); + } + + private JoinColumnBuilder buildJoinColumnsCreator() { + return new JoinColumnBuilder() { + public IJoinColumn createJoinColumn() { + return OrmFactory.eINSTANCE.createXmlJoinColumn(new ISingleRelationshipMapping.JoinColumnOwner(singleRelationshipMapping)); + } + }; + } + + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TableGeneratorTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TableGeneratorTranslator.java new file mode 100644 index 0000000000..ab1e478805 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TableGeneratorTranslator.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2007 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.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class TableGeneratorTranslator extends GeneratorTranslator +{ + + public TableGeneratorTranslator(String domNameAndPath, EStructuralFeature aFeature) { + super(domNameAndPath, aFeature, NO_STYLE); + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createTableTranslator(), + createCatalogTranslator(), + createSchemaTranslator(), + createPkColumnNameTranslator(), + createValueColumnNameTranslator(), + createPkColumnValueTranslator(), + createInitialValueTranslator(), + createAllocationSizeTranslator(), + }; + } + + protected Translator createTableTranslator() { + return new Translator(TABLE_GENERATOR__TABLE, MAPPINGS_PKG.getITableGenerator_SpecifiedTable(), DOM_ATTRIBUTE); + } + + protected Translator createCatalogTranslator() { + return new Translator(TABLE_GENERATOR__CATALOG, MAPPINGS_PKG.getITableGenerator_SpecifiedCatalog(), DOM_ATTRIBUTE); + } + + protected Translator createSchemaTranslator() { + return new Translator(TABLE_GENERATOR__SCHEMA, MAPPINGS_PKG.getITableGenerator_SpecifiedSchema(), DOM_ATTRIBUTE); + } + + protected Translator createPkColumnNameTranslator() { + return new Translator(TABLE_GENERATOR__PK_COLUMN_NAME, MAPPINGS_PKG.getITableGenerator_SpecifiedPkColumnName(), DOM_ATTRIBUTE); + } + + protected Translator createValueColumnNameTranslator() { + return new Translator(TABLE_GENERATOR__VALUE_COLUMN_NAME, MAPPINGS_PKG.getITableGenerator_SpecifiedValueColumnName(), DOM_ATTRIBUTE); + } + + protected Translator createPkColumnValueTranslator() { + return new Translator(TABLE_GENERATOR__PK_COLUMN_VALUE, MAPPINGS_PKG.getITableGenerator_SpecifiedPkColumnValue(), DOM_ATTRIBUTE); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return OrmFactory.eINSTANCE.createXmlTableGenerator(); + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TableTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TableTranslator.java new file mode 100644 index 0000000000..2ee679f310 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TableTranslator.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * 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.mappings.IEntity; +import org.eclipse.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class TableTranslator extends AbstractTableTranslator + implements OrmXmlMapper +{ + + private IEntity entity; + + + public TableTranslator() { + super(ENTITY__TABLE, JPA_CORE_XML_PKG.getXmlEntityForXml_TableForXml()); + } + + protected IEntity getEntity() { + return this.entity; + } + + void setEntity(IEntity entity) { + this.entity = entity; + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return getEntity().getTable(); + } + + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + createCatalogTranslator(), + createSchemaTranslator(), + createUniqueConstraintTranslator(), + }; + } + + + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TemporalTypeElementTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TemporalTypeElementTranslator.java new file mode 100644 index 0000000000..2a6a50a61b --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TemporalTypeElementTranslator.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * 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 java.util.Collections; +import java.util.List; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.jpt.core.internal.mappings.TemporalType; + +/** + * There is a bug in the translator framework that causes + * enumerators in xml elements and enumerators in xml attributes + * to be treated differently. When the enumerator is an attribute + * setting the model to the default causes the attribute to be removed. + * With an element is causes the default literal to be placed in + * the tag. + * + * The problem is wrapped up in the emf unsettable attribute as well. + * For attributes the eIsSet method returns false for the default value + * For elements the eIsSet method returns true for the default value. + * I don't want to have to use the unsettable option in emf since that would + * require that I call different api. I am not sure yet what the bug is in + * the translator, so I have entered one ~KFM + */ +public class TemporalTypeElementTranslator extends EnumeratorTranslator +{ + + public TemporalTypeElementTranslator(String domNameAndPath, EStructuralFeature aFeature, int style) { + super(domNameAndPath, aFeature, style); + } + + @Override + public Object getMOFValue(EObject mofObject) { + TemporalType type = (TemporalType) super.getMOFValue(mofObject); + if (type == TemporalType.NULL) { + return null; + } + return type; + } + + @Override + public List getMOFChildren(EObject mofObject) { + List result = super.getMOFChildren(mofObject); + if(result != null && result.size() > 0) { + TemporalType type = (TemporalType) result.get(0); + if(type.getValue() == TemporalType.NULL_VALUE) + result = Collections.EMPTY_LIST; + } + return result; + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TransientTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TransientTranslator.java new file mode 100644 index 0000000000..461c9babf1 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TransientTranslator.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2007 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.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class TransientTranslator extends AttributeMappingTranslator +{ + public TransientTranslator() { + super(TRANSIENT, END_TAG_NO_INDENT); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return JPA_CORE_XML_FACTORY.createXmlTransient(); + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + }; + } + + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeJavaClassTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeJavaClassTranslator.java new file mode 100644 index 0000000000..cd392a6556 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeJavaClassTranslator.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2006, 2007 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.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.wst.common.internal.emf.resource.DependencyTranslator; + +public class TypeJavaClassTranslator extends DependencyTranslator + implements OrmXmlMapper +{ + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + + + public TypeJavaClassTranslator() { + super(CLASS, JPA_CORE_XML_PKG.getXmlPersistentType_Class(), + JPA_CORE_XML_PKG.getXmlTypeMapping_PersistentType()); + fStyle = DOM_ATTRIBUTE; + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingTranslator.java new file mode 100644 index 0000000000..5b582c3b2b --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingTranslator.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * 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.EStructuralFeature; +import org.eclipse.jpt.core.internal.content.orm.OrmFactory; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public abstract class TypeMappingTranslator extends Translator + implements OrmXmlMapper +{ + protected static final OrmPackage JPA_CORE_XML_PKG = + OrmPackage.eINSTANCE; + protected static final OrmFactory JPA_CORE_XML_FACTORY = + OrmFactory.eINSTANCE; + + + private Translator[] children; + + + public TypeMappingTranslator(String domNameAndPath) { + super(domNameAndPath, JPA_CORE_XML_PKG.getEntityMappingsInternal_TypeMappings()); + dependencyFeature = JPA_CORE_XML_PKG.getXmlTypeMapping_PersistentType(); + } + + + public Translator[] getChildren(Object target, int versionID) { + if (children == null) { + children = createChildren(); + } + return children; + } + + protected abstract Translator[] createChildren(); + + protected Translator createJavaClassTranslator() { + return new TypeJavaClassTranslator(); + } + + protected Translator createMetadataCompleteTranslator() { + return new BooleanEnumeratorTranslator(METADATA_COMPLETE, JPA_CORE_XML_PKG.getXmlTypeMapping_MetadataComplete(), DOM_ATTRIBUTE); + } + + protected Translator createAccessTypeTranslator() { + return new EnumeratorTranslator(ACCESS, JPA_CORE_XML_PKG.getXmlTypeMapping_SpecifiedAccess(), DOM_ATTRIBUTE); + } + + protected Translator createPersistentAttributesTranslator() { + return new AttributeMappingsTranslator(); + } + + + protected Translator createPlaceHolderTranslator(String domNameAndPath) { + return new Translator(domNameAndPath, (EStructuralFeature) null); + } + +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingsTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingsTranslator.java new file mode 100644 index 0000000000..b08ff5e9cc --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/TypeMappingsTranslator.java @@ -0,0 +1,93 @@ +/******************************************************************************* + * Copyright (c) 2006, 2007 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 java.util.HashMap; +import java.util.Map; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.jpt.core.internal.content.orm.OrmPackage; +import org.eclipse.wst.common.internal.emf.resource.MultiObjectTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class TypeMappingsTranslator extends MultiObjectTranslator + implements OrmXmlMapper +{ + public static final String ENTITY_MAPPINGS_PATH = + MAPPED_SUPERCLASS + ',' + ENTITY + ',' + EMBEDDABLE; + + private static final OrmPackage JPA_CORE_XML_PKG = OrmPackage.eINSTANCE; + + private Map<EObject, Translator> translatorMap; + + public TypeMappingsTranslator() { + super(ENTITY_MAPPINGS_PATH, JPA_CORE_XML_PKG.getEntityMappingsInternal_TypeMappings()); + this.translatorMap = new HashMap<EObject, Translator>(); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + Translator translator = getDelegateFor(nodeName, readAheadName); + EObject eObject = translator.createEMFObject(nodeName, readAheadName); + this.translatorMap.put(eObject, translator); + return eObject; + } + /* (non-Javadoc) + * @see MultiObjectTranslator#getDelegateFor(EObject) + */ + @Override + public Translator getDelegateFor(EObject o) { + Translator translator = translatorMap.get(o); + if (translator != null) { + return translator; + } + + switch (o.eClass().getClassifierID()) { + case OrmPackage.XML_ENTITY_INTERNAL : + return new EntityTranslator(); + case OrmPackage.XML_MAPPED_SUPERCLASS: + return new MappedSuperclassTranslator(); + case OrmPackage.XML_EMBEDDABLE: + return new EmbeddableTranslator(); + } + + return null; + } + + @Override + public Translator getDelegateFor(String domName, String readAheadName) { + if (domName.equals(ENTITY)) { + return new EntityTranslator(); + } + if (domName.equals(MAPPED_SUPERCLASS)) { + return new MappedSuperclassTranslator(); + } + if (domName.equals(EMBEDDABLE)) { + return new EmbeddableTranslator(); + } + throw new IllegalStateException("Illegal dom name: " + domName); //$NON-NLS-1$ + } + + @Override + public boolean isDependencyParent() { + return true; + } + + @Override + public EObject basicGetDependencyObject(EObject parent) { + Translator delegate = getDelegateFor(parent); + + if (delegate != null) { + return delegate.basicGetDependencyObject(parent); + } + else { + return super.basicGetDependencyObject(parent); + } + } +} diff --git a/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/VersionTranslator.java b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/VersionTranslator.java new file mode 100644 index 0000000000..b34af52439 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.core/src/org/eclipse/jpt/core/internal/content/orm/resource/VersionTranslator.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2007 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.wst.common.internal.emf.resource.IDTranslator; +import org.eclipse.wst.common.internal.emf.resource.Translator; + +public class VersionTranslator extends AttributeMappingTranslator +{ + public VersionTranslator() { + super(VERSION, NO_STYLE); + } + + @Override + public EObject createEMFObject(String nodeName, String readAheadName) { + return JPA_CORE_XML_FACTORY.createXmlVersion(); + } + + @Override + protected Translator[] createChildren() { + return new Translator[] { + IDTranslator.INSTANCE, + createNameTranslator(), + }; + } + + +} |