/******************************************************************************* * Copyright (c) 2008, 2010 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.jpa.eclipselink.core.internal.context.orm; import java.util.List; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.eclipse.jpt.common.utility.internal.iterables.CompositeIterable; import org.eclipse.jpt.common.utility.internal.iterables.TransformationIterable; import org.eclipse.jpt.jpa.core.context.orm.OrmTypeMapping; import org.eclipse.jpt.jpa.core.context.orm.OrmXml; import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractEntityMappings; import org.eclipse.jpt.jpa.eclipselink.core.JptJpaEclipseLinkCorePlugin; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkConverter; import org.eclipse.jpt.jpa.eclipselink.core.context.EclipseLinkTypeMapping; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.EclipseLinkEntityMappings; import org.eclipse.jpt.jpa.eclipselink.core.context.orm.OrmEclipseLinkConverterContainer; import org.eclipse.jpt.jpa.eclipselink.core.resource.orm.XmlEntityMappings; import org.eclipse.text.edits.ReplaceEdit; import org.eclipse.wst.validation.internal.provisional.core.IMessage; import org.eclipse.wst.validation.internal.provisional.core.IReporter; public class EclipseLinkEntityMappingsImpl extends AbstractEntityMappings implements EclipseLinkEntityMappings { protected final OrmEclipseLinkConverterContainer converterContainer; public EclipseLinkEntityMappingsImpl(OrmXml parent, XmlEntityMappings resource) { super(parent, resource); this.converterContainer = this.buildConverterContainer(); } // ********** synchronize/update ********** @Override public void synchronizeWithResourceModel() { super.synchronizeWithResourceModel(); this.converterContainer.synchronizeWithResourceModel(); } @Override public void update() { super.update(); this.converterContainer.update(); } // ********** converter container ********** public OrmEclipseLinkConverterContainer getConverterContainer() { return this.converterContainer; } protected OrmEclipseLinkConverterContainer buildConverterContainer() { return new OrmEclipseLinkConverterContainerImpl(this, (XmlEntityMappings) this.xmlEntityMappings); } @SuppressWarnings("unchecked") public Iterable getMappingFileConverters() { return new CompositeIterable( this.converterContainer.getConverters(), this.getTypeMappingConverters() ); } protected Iterable getTypeMappingConverters() { return new CompositeIterable(this.getTypeMappingConverterLists()); } protected Iterable> getTypeMappingConverterLists() { return new TransformationIterable>(this.getTypeMappings()) { @Override protected Iterable transform(OrmTypeMapping typeMapping) { return ((EclipseLinkTypeMapping) typeMapping).getConverters(); } }; } // ********** misc ********** @Override protected IContentType getContentType() { return JptJpaEclipseLinkCorePlugin.ECLIPSELINK_ORM_XML_CONTENT_TYPE; } // ********** refactoring ********** @SuppressWarnings("unchecked") @Override public Iterable createRenameTypeEdits(IType originalType, String newName) { return new CompositeIterable( super.createRenameTypeEdits(originalType, newName), this.createConverterRenameTypeEdits(originalType, newName)); } protected Iterable createConverterRenameTypeEdits(IType originalType, String newName) { return this.converterContainer.createRenameTypeEdits(originalType, newName); } @SuppressWarnings("unchecked") @Override public Iterable createMoveTypeEdits(IType originalType, IPackageFragment newPackage) { return new CompositeIterable( super.createMoveTypeEdits(originalType, newPackage), this.createConverterMoveTypeEdits(originalType, newPackage)); } protected Iterable createConverterMoveTypeEdits(IType originalType, IPackageFragment newPackage) { return this.converterContainer.createMoveTypeEdits(originalType, newPackage); } @SuppressWarnings("unchecked") @Override public Iterable createRenamePackageEdits(IPackageFragment originalPackage, String newName) { return new CompositeIterable( super.createRenamePackageEdits(originalPackage, newName), this.createConverterRenamePackageEdits(originalPackage, newName)); } protected Iterable createConverterRenamePackageEdits(IPackageFragment originalPackage, String newName) { return this.converterContainer.createRenamePackageEdits(originalPackage, newName); } // ********** validation ********** @Override public void validate(List messages, IReporter reporter) { super.validate(messages, reporter); this.converterContainer.validate(messages, reporter); } }