| /******************************************************************************* |
| * 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.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.IBasic; |
| import org.eclipse.jpt.core.internal.mappings.IEmbedded; |
| import org.eclipse.jpt.core.internal.mappings.IId; |
| import org.eclipse.jpt.core.internal.mappings.IMultiRelationshipMapping; |
| 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()); |
| } |
| |
| //TODO we're not putting the translator in the translator map in this situation |
| public Translator getDelegateFor(EObject o) { |
| Translator translator = super.getDelegateFor(o); |
| |
| if (translator != null) { |
| return translator; |
| } |
| |
| switch (o.eClass().getClassifierID()) { |
| case OrmPackage.XML_ID : |
| translator = new IdTranslator(); |
| ((IdTranslator) translator).setId(((IId) o)); |
| break; |
| case OrmPackage.XML_BASIC : |
| translator = new BasicTranslator(); |
| ((BasicTranslator) translator).setBasic(((IBasic) o)); |
| break; |
| case OrmPackage.XML_ONE_TO_MANY : |
| translator = new OneToManyTranslator(); |
| ((OneToManyTranslator) translator).setMapping((IMultiRelationshipMapping) o); |
| break; |
| case OrmPackage.XML_MANY_TO_MANY : |
| translator = new ManyToManyTranslator(); |
| ((ManyToManyTranslator) translator).setMapping((IMultiRelationshipMapping) o); |
| break; |
| case OrmPackage.XML_MANY_TO_ONE : |
| translator = new ManyToOneTranslator(); |
| break; |
| case OrmPackage.XML_TRANSIENT : |
| translator = new TransientTranslator(); |
| break; |
| case OrmPackage.XML_EMBEDDED : |
| translator = new EmbeddedTranslator(); |
| ((EmbeddedTranslator) translator).setEmbedded((IEmbedded) o); |
| break; |
| case OrmPackage.XML_EMBEDDED_ID : |
| translator = new EmbeddedIdTranslator(); |
| break; |
| case OrmPackage.XML_ONE_TO_ONE : |
| translator = new OneToOneTranslator(); |
| break; |
| case OrmPackage.XML_VERSION : |
| translator = new VersionTranslator(); |
| break; |
| } |
| |
| setDelegateFor(o, translator); |
| return translator; |
| } |
| |
| |
| @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 EStructuralFeature getDependencyFeature() { |
| return JPA_CORE_XML_PKG.getXmlAttributeMapping_PersistentAttribute(); |
| } |
| |
| @Override |
| public EObject basicGetDependencyObject(EObject parent) { |
| Translator delegate = getDelegateFor(parent); |
| |
| if (delegate != null) { |
| return delegate.basicGetDependencyObject(parent); |
| } |
| else { |
| return super.basicGetDependencyObject(parent); |
| } |
| } |
| } |