| /******************************************************************************* |
| * Copyright (c) 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.core.context; |
| |
| import java.util.Iterator; |
| import java.util.ListIterator; |
| import org.eclipse.jpt.jpa.core.internal.context.BaseColumnTextRangeResolver; |
| import org.eclipse.jpt.jpa.core.internal.context.JptValidator; |
| import org.eclipse.jpt.jpa.core.internal.context.OverrideTextRangeResolver; |
| import org.eclipse.jpt.jpa.db.Table; |
| |
| /** |
| * attribute or association override container |
| * <p> |
| * Provisional API: This interface is part of an interim API that is still |
| * under development and expected to change significantly before reaching |
| * stability. It is available at this early stage to solicit feedback from |
| * pioneering adopters on the understanding that any code that uses this API |
| * will almost certainly be broken (repeatedly) as the API evolves. |
| * |
| * @version 3.0 |
| * @since 2.3 |
| */ |
| public interface OverrideContainer |
| extends JpaContextNode |
| { |
| /** |
| * Return the type mapping that this override is contained in |
| */ |
| TypeMapping getTypeMapping(); |
| |
| /** |
| * Return the type mapping that contains the attributes/associations to |
| * be overridden. (Though the type mapping may not <em>directly</em> |
| * own them (i.e. they may be on a supertype mapping). |
| * (For example: for an entity, this would be the supertype mapping of |
| * that entity; for an embedded, this would be the target type mapping |
| * of the embedded.) |
| */ |
| TypeMapping getOverridableTypeMapping(); |
| |
| /** |
| * Return the names of all attributes that can be overridden |
| */ |
| Iterator<String> allOverridableNames(); |
| |
| /** |
| * Convert the specified specified override to <em>virtual</em>. |
| * Return the new override. |
| */ |
| VirtualOverride convertOverrideToVirtual(Override_ specifiedOverride); |
| |
| /** |
| * Convert the specified virtual override to <em>specified</em>. |
| * Return the new override. |
| */ |
| Override_ convertOverrideToSpecified(VirtualOverride virtualOverride); |
| |
| /** |
| * return whether the given table cannot be explicitly specified |
| * in the column or join column's 'table' element |
| */ |
| boolean tableNameIsInvalid(String tableName); |
| |
| /** |
| * Return the names of tables that are valid for the overrides column or join columns. |
| */ |
| Iterator<String> candidateTableNames(); |
| |
| /** |
| * Return the database table for the specified table name |
| */ |
| Table resolveDbTable(String tableName); |
| |
| /** |
| * Return the name of the table which the column belongs to by default |
| */ |
| String getDefaultTableName(); |
| |
| JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner owner, BaseColumnTextRangeResolver textRangeResolver); |
| |
| JptValidator buildValidator(Override_ override, OverrideTextRangeResolver textRangeResolver); |
| |
| |
| // ********** overrides ********** |
| |
| /** |
| * Return the overrides, both specified and virtual. |
| */ |
| // TODO bjv change to a collection? |
| ListIterator<? extends ReadOnlyOverride> overrides(); |
| |
| /** |
| * Return the number of overrides, both specified and default. |
| */ |
| int overridesSize(); |
| |
| /** |
| * Return the override with the specified name, |
| * whether specified or virtual. |
| */ |
| // TODO look into getting rid of this; |
| // we should probably use #getSpecifiedOverrideNamed(String) |
| ReadOnlyOverride getOverrideNamed(String name); |
| |
| |
| // ********** specified overrides ********** |
| |
| /** |
| * Return the specified overrides. |
| * No add/remove for specified overrides, the |
| * virtual overrides will be populated from the owner, then use |
| * {@link VirtualOverride#convertToSpecified()} to add/remove the |
| * override from the container. |
| */ |
| ListIterator<? extends Override_> specifiedOverrides(); |
| String SPECIFIED_OVERRIDES_LIST = "specifiedOverrides"; //$NON-NLS-1$ |
| |
| /** |
| * Return the number of specified overrides. |
| */ |
| int specifiedOverridesSize(); |
| |
| /** |
| * Return the specified override at the specified index. |
| */ |
| Override_ getSpecifiedOverride(int index); |
| |
| /** |
| * Move the specified override from the source index to the target index. |
| */ |
| void moveSpecifiedOverride(int targetIndex, int sourceIndex); |
| |
| Override_ getSpecifiedOverrideNamed(String name); |
| |
| |
| // ********** virtual overrides ********** |
| |
| /** |
| * Return the virtual overrides, those not specified. |
| */ |
| // TODO change to a collection? |
| ListIterator<? extends VirtualOverride> virtualOverrides(); |
| String VIRTUAL_OVERRIDES_LIST = "virtualOverrides"; //$NON-NLS-1$ |
| |
| /** |
| * Return the number of virtual overrides. |
| */ |
| int virtualOverridesSize(); |
| |
| |
| // ********** owner ********** |
| |
| interface Owner |
| { |
| /** |
| * Return the mapping of the persistent type where the container is defined. |
| * (For example: for an entity, this would be the entity; for an embedded, |
| * this would be the type mapping where the embedded is defined.) |
| */ |
| TypeMapping getTypeMapping(); |
| |
| /** |
| * Return the type mapping that contains the attributes/associations to |
| * be overridden. (Though the type mapping may not <em>directly</em> |
| * own them (i.e. they may be on a supertype mapping). |
| * (For example: for an entity, this would be the supertype mapping of |
| * that entity; for an embedded, this would be the target type mapping |
| * of the embedded.) |
| */ |
| TypeMapping getOverridableTypeMapping(); |
| |
| /** |
| * Return all the names of the attributes/associations to be overridden. |
| * This is usually just all of the overridable names of the overridable |
| * type mapping. |
| * @see #getOverridableTypeMapping() |
| */ |
| Iterator<String> allOverridableNames(); |
| |
| /** |
| * Return the name of an override column's/join column's default table. |
| */ |
| String getDefaultTableName(); |
| |
| /** |
| * Return whether the specified table cannot be explicitly specified |
| * by a column/join column. |
| */ |
| boolean tableNameIsInvalid(String tableName); |
| |
| /** |
| * Return the database table for the specified table name. |
| */ |
| org.eclipse.jpt.jpa.db.Table resolveDbTable(String tableName); |
| |
| /** |
| * Return the table names that are valid for the override's column |
| * or join columns |
| */ |
| Iterator<String> candidateTableNames(); |
| |
| JptValidator buildValidator(Override_ override, OverrideContainer container, OverrideTextRangeResolver textRangeResolver); |
| |
| JptValidator buildColumnValidator(Override_ override, BaseColumn column, BaseColumn.Owner columnOwner, BaseColumnTextRangeResolver textRangeResolver); |
| } |
| |
| } |