blob: db6ff8ff9b4e6b133d5f556885f054f32319f01b [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.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;
}
}