blob: d919d536c3a57232c8657e1aaacb47bff363eac9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openjpa.jdbc.meta;
import org.apache.openjpa.jdbc.schema.Column;
import org.apache.openjpa.jdbc.schema.ForeignKey;
import org.apache.openjpa.jdbc.schema.Index;
import org.apache.openjpa.jdbc.schema.Schema;
import org.apache.openjpa.jdbc.schema.Table;
import org.apache.openjpa.jdbc.schema.Unique;
/**
* Generates default names for tables, columns, indexes, constraints, etc.
*
* @author Abe White
*/
public interface MappingDefaults {
/**
* Whether to fill in missing mapping information at runtime with the
* default values supplied by this plugin. A value of false means that
* all mapping information must be present at runtime.
*/
public boolean defaultMissingInfo();
/**
* The default for whether relations use the related object's
* expected class as part of the join criteria.
*/
public boolean useClassCriteria();
/**
* Default mapping strategy when there is no explicit strategy
* and no hierarchy strategy given.
*
* @param cls the class; will not be mapped, but superclass and raw
* {@link MappingInfo} will be available
* @param adapt whether we can adapt the mapping or schema
* @return the strategy alias or a strategy instance, or null
*/
public Object getStrategy(ClassMapping cls, boolean adapt);
/**
* Default version mapping strategy when there is no explicit strategy.
*
* @param vers the version; will not be mapped, but raw
* {@link MappingInfo} will be available
* @param adapt whether we can adapt the mapping or schema
* @return the strategy alias or a strategy instance, or null
*/
public Object getStrategy(Version vers, boolean adapt);
/**
* Default discriminator mapping strategy when there is no explicit
* strategy.
*
* @param disc the discriminator; will not be mapped, but raw
* {@link MappingInfo} will be available
* @param adapt whether we can adapt the mapping or schema
* @return the strategy alias or a strategy instance, or null
*/
public Object getStrategy(Discriminator disc, boolean adapt);
/**
* Custom handler or strategy for the given field, or null if none
* has been registered.
*
* @param vm the value mapping; will not be mapped, but raw
* {@link MappingInfo} will be available
* @param type the value type
* @param adapt whether we can adapt the mapping or schema
* @return the handler/strategy alias or instance, or null
*/
public Object getStrategy(ValueMapping vm, Class type, boolean adapt);
/**
* Return the default discriminator value for the given instance.
*/
public Object getDiscriminatorValue(Discriminator disc, boolean adapt);
/**
* Return the default table name for the given class. This method is
* only called for classes mapped to their own table.
*/
public String getTableName(ClassMapping cls, Schema defaultSchema);
/**
* Return the default secondary table name for the given field. This
* method is only called for fields whose strategy requires a secondary
* table.
*/
public String getTableName(FieldMapping fm, Schema defaultSchema);
/**
* Fill in default information for the given datastore identity columns.
* The columns' name and Java type will already be populated with generic
* defaults that may be replaced.
*/
public void populateDataStoreIdColumns(ClassMapping cls, Table table,
Column[] cols);
/**
* Fill in default information for the given version columns.
* The columns' name and Java type will already be populated with generic
* defaults that may be replaced.
*/
public void populateColumns(Version vers, Table table, Column[] cols);
/**
* Fill in default information for the given discriminator columns.
* The columns' name and Java type will already be populated with generic
* defaults that may be replaced.
*/
public void populateColumns(Discriminator disc, Table table,
Column[] cols);
/**
* Fill in default information for the given column used to join a class
* to its superclass table. The column will be a clone of the target
* column, or have its name and Java type set in the case of a constant
* target.
*
* @param target the target of this column in the join; may be
* another column or a constant value
* @param pos the index of this column in the logical foreign key
* @param cols the number of columns in the logical foreign key
*/
public void populateJoinColumn(ClassMapping cm, Table local, Table foreign,
Column col, Object target, int pos, int cols);
/**
* Fill in default information for the given column used to join a field
* to its defining class' table. The column will be a clone of the target
* column, or have its name and Java type set in the case of a constant
* target.
*
* @param target the target of this column in the join; may be
* another column or a constant value
* @param pos the index of this column in the logical foreign key
* @param cols the number of columns in the logical foreign key
*/
public void populateJoinColumn(FieldMapping fm, Table local, Table foreign,
Column col, Object target, int pos, int cols);
/**
* Fill in default information for the given column used to join a value
* to its related type. The column will be a clone of the target
* column, or have its name and Java type set in the case of a constant
* target.
*
* @param name base name for value, as decided by mapping
* @param target the target of this column in the join; may be
* another column or a constant value
* @param inverse whether this is an inverse foreign key
* @param pos the index of this column in the logical foreign key
* @param cols the number of columns in the logical foreign key
*/
public void populateForeignKeyColumn(ValueMapping vm, String name,
Table local, Table foreign, Column col, Object target, boolean inverse,
int pos, int cols);
/**
* Fill in default information for the given value columns.
* The columns' name and Java type will already be populated with generic
* defaults that may be replaced.
*
* @param name base name for value, as decided by mapping
*/
public void populateColumns(ValueMapping vm, String name, Table table,
Column[] cols);
/**
* Fill in default information for the given order columns.
* The columns' name and Java type will already be populated with generic
* defaults that may be replaced.
*
* @return false if the given field should not have order columns
* by default; fill in default information even when returning
* false in case the user forces ordering
*/
public boolean populateOrderColumns(FieldMapping fm, Table table,
Column[] cols);
/**
* Fill in default information for the given null indicator columns.
* The columns' name and Java type will already be populated with generic
* defaults that may be replaced.
*
* @param name base name for value, as decided by mapping
* @return false if the given value should not have null indicator
* columns by default; fill in default information even
* when returning false in case the user forces an indicator
*/
public boolean populateNullIndicatorColumns(ValueMapping vm, String name,
Table table, Column[] cols);
/**
* Return a default foreign key for the join from this class' table to its
* superclass' table, or null for a logical foreign key only. Do not
* add columns to the key or add the key to the table; only fill in
* its information such as name, delete action, etc.
*/
public ForeignKey getJoinForeignKey(ClassMapping cls, Table local,
Table foreign);
/**
* Return a default foreign key for the join from this field's table to its
* defining class' table, or null for a logical foreign key only. Do not
* add columns to the key or add the key to the table; only fill in
* its information such as name, delete action, etc.
*/
public ForeignKey getJoinForeignKey(FieldMapping fm, Table local,
Table foreign);
/**
* Return a default foreign key for the join from this value to its
* related type, or null for a logical foreign key only. Do not
* add columns to the key or add the key to the table; only fill in
* its information such as name, delete action, etc.
*
* @param name base name for value, as decided by mapping
* @param inverse whether this is an inverse key
*/
public ForeignKey getForeignKey(ValueMapping vm, String name, Table local,
Table foreign, boolean inverse);
/**
* Return a default index for the join, or null if the
* join columns should not be indexed by default. Do not
* add columns to the index or add the index to the table; only fill in
* its information such as name, uniqueness, etc.
*/
public Index getJoinIndex(FieldMapping fm, Table table, Column[] cols);
/**
* Return a default index for the value, or null if the value columns
* should not be indexed by default. Do not add columns to the index or
* add the index to the table; only fill in its information such as name,
* uniqueness, etc.
*
* @param name base name for value, as decided by mapping
*/
public Index getIndex(ValueMapping vm, String name, Table table,
Column[] cols);
/**
* Return a default index for the version, or null if the
* version columns should not be indexed by default. Do not
* add columns to the index or add the index to the table; only fill in
* its information such as name, uniqueness, etc.
*/
public Index getIndex(Version vers, Table table, Column[] cols);
/**
* Return a default index for the discriminator, or null if the
* discriminator columns should not be indexed by default. Do not
* add columns to the index or add the index to the table; only fill in
* its information such as name, uniqueness, etc.
*/
public Index getIndex(Discriminator disc, Table table, Column[] cols);
/**
* Return a default constraint for the join, or null if the join columns
* should not be constrained by default. Do not add columns to the
* constraint or add the constraint to the table; only fill in its
* information such as name, deferrability, etc.
*/
public Unique getJoinUnique(FieldMapping fm, Table table, Column[] cols);
/**
* Return a default constraint for the value, or null if the value columns
* should not be constrained by default. Do not add columns to the
* constraint or add the constraint to the table; only fill in its
* information such as name, deferrability, etc.
*
* @param name base name for value, as decided by mapping
*/
public Unique getUnique(ValueMapping vm, String name, Table table,
Column[] cols);
/**
* Return the name of the primary key for the table of the given class,
* or null for database default.
*/
public String getPrimaryKeyName(ClassMapping cm, Table table);
/**
* If desired, install a primary key on the given secondary table.
*/
public void installPrimaryKey(FieldMapping fm, Table table);
}