| /******************************************************************************* |
| * Copyright (c) 2009 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.platform; |
| |
| import java.util.ListIterator; |
| import org.eclipse.jpt.core.context.MappingFileDefinition; |
| import org.eclipse.jpt.core.context.orm.OrmAttributeMappingProvider; |
| import org.eclipse.jpt.core.context.orm.OrmTypeMappingProvider; |
| import org.eclipse.jpt.utility.internal.CollectionTools; |
| import org.eclipse.jpt.utility.internal.iterators.ArrayListIterator; |
| |
| /** |
| * All the state in the definition should be "static" (i.e. unchanging once it is initialized). |
| */ |
| public abstract class AbstractMappingFileDefinition |
| implements MappingFileDefinition |
| { |
| private OrmTypeMappingProvider[] ormTypeMappingProviders; |
| |
| private OrmAttributeMappingProvider[] ormAttributeMappingProviders; |
| |
| |
| /** |
| * zero-argument constructor |
| */ |
| protected AbstractMappingFileDefinition() { |
| super(); |
| } |
| |
| |
| // ********** ORM type mappings ********** |
| |
| public OrmTypeMappingProvider getOrmTypeMappingProvider(String mappingKey) { |
| for (OrmTypeMappingProvider provider : CollectionTools.iterable(ormTypeMappingProviders())) { |
| if (provider.getKey() == mappingKey) { |
| return provider; |
| } |
| } |
| throw new IllegalArgumentException("Illegal type mapping key: " + mappingKey); //$NON-NLS-1$ |
| } |
| |
| public ListIterator<OrmTypeMappingProvider> ormTypeMappingProviders() { |
| return new ArrayListIterator<OrmTypeMappingProvider>(getOrmTypeMappingProviders()); |
| } |
| |
| protected synchronized OrmTypeMappingProvider[] getOrmTypeMappingProviders() { |
| if (this.ormTypeMappingProviders == null) { |
| this.ormTypeMappingProviders = this.buildOrmTypeMappingProviders(); |
| } |
| return this.ormTypeMappingProviders; |
| } |
| |
| /** |
| * Return an array of mapping providers to use for types in mapping files of this type. |
| * The order is unimportant. |
| */ |
| protected abstract OrmTypeMappingProvider[] buildOrmTypeMappingProviders(); |
| |
| |
| // ********** ORM attribute mappings ********** |
| |
| public OrmAttributeMappingProvider getOrmAttributeMappingProvider(String mappingKey) { |
| for (OrmAttributeMappingProvider provider : CollectionTools.iterable(ormAttributeMappingProviders())) { |
| if (provider.getKey() == mappingKey) { |
| return provider; |
| } |
| } |
| throw new IllegalArgumentException("Illegal type mapping key: " + mappingKey); //$NON-NLS-1$ |
| } |
| |
| public ListIterator<OrmAttributeMappingProvider> ormAttributeMappingProviders() { |
| return new ArrayListIterator<OrmAttributeMappingProvider>(getOrmAttributeMappingProviders()); |
| } |
| |
| protected synchronized OrmAttributeMappingProvider[] getOrmAttributeMappingProviders() { |
| if (this.ormAttributeMappingProviders == null) { |
| this.ormAttributeMappingProviders = this.buildOrmAttributeMappingProviders(); |
| } |
| return this.ormAttributeMappingProviders; |
| } |
| |
| /** |
| * Return an array of mapping providers to use for attributes in mapping files of this type. |
| * The order is unimportant. |
| */ |
| protected abstract OrmAttributeMappingProvider[] buildOrmAttributeMappingProviders(); |
| } |