blob: 71d37e572dd62515ba045435338ad56566a546a0 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}
}