blob: a99e7ab6d95eeb51325457340569549e4a3754c0 [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.meta;
import java.io.Serializable;
/**
* Holds metadata on a value; this could be a field value, key value, or
* element value.
*
* @since 0.4.0
* @author Abe White
*/
public interface ValueMetaData
extends MetaDataContext, MetaDataModes, Serializable {
/**
* The operation is not cascaded to this field.
*/
int CASCADE_NONE = 0;
/**
* The operation is immediately cascaded to this field.
*/
int CASCADE_IMMEDIATE = 1;
/**
* Use automatic cascade behavior. Persistence-by-reachability,
* delete-dependent, attach-if-detached, etc.
*/
int CASCADE_AUTO = 2;
/**
* Marker to set on {@link #setValueMappedBy} to denote that the map key
* is mapped by the primary key field of the value.
*/
String MAPPED_BY_PK = "`pk`";
/**
* Return the owning field for this value.
*/
FieldMetaData getFieldMetaData();
/**
* The value class.
*/
Class getType();
/**
* The value class.
*/
void setType(Class type);
/**
* The type code of the value class.
*/
int getTypeCode();
/**
* The type code of the value class.
*/
void setTypeCode(int code);
/**
* Whether the type is a persistence capable instance.
*/
boolean isTypePC();
/**
* The metadata for the value class, if the type is persistent.
*/
ClassMetaData getTypeMetaData();
/**
* Return the declared class of the value. This can differ
* from the return value of {@link #getType} if the user indicates
* a different type or the value has an externalizer.
*/
Class getDeclaredType();
/**
* Set the declared class of the value.
*/
void setDeclaredType(Class type);
/**
* Return the declared type code of the value. This can differ
* from the return value of {@link #getTypeCode} if the user indicates
* a different type or the value has an externalizer.
*/
int getDeclaredTypeCode();
/**
* Set the type code for the value. The type code is usually
* computed automatically, but it can be useful to set it explicitly
* when creating metadatas from scratch.
*/
void setDeclaredTypeCode(int type);
/**
* Whether the type is a persistence capable instance.
*/
boolean isDeclaredTypePC();
/**
* Return metadata for the value's class, if the type is persistent.
*/
ClassMetaData getDeclaredTypeMetaData();
/**
* This attribute is a hint to the implementation to store this value
* in the same structure as the class, rather than as a separate datastore
* structure. Defaults to true if the field is not a collection or map
* or persistence-capable object; defaults to false otherwise.
* Implementations are permitted to ignore this attribute.
*/
boolean isEmbedded();
/**
* This attribute is a hint to the implementation to store this value
* in the same structure as the class, rather than as a separate datastore
* structure. Defaults to true if the field is not a collection or map
* or persistence-capable objects; defaults to false otherwise.
* Implementations are permitted to ignore this attribute.
*/
void setEmbedded(boolean embedded);
/**
* Whether this is an embedded persistence capable value.
*/
boolean isEmbeddedPC();
/**
* The embedded class metadata for the value.
*/
ClassMetaData getEmbeddedMetaData();
/**
* Add embedded metadata for this value.
*/
ClassMetaData addEmbeddedMetaData();
/**
* Add embedded metadata for this value with the given access type
*/
ClassMetaData addEmbeddedMetaData(int access);
/**
* Cascade behavior for delete operation. Only applies to
* persistence-capable values. Options are:<br />
* <ul>
* <li><code>CASCADE_NONE</code>: No cascades.</li>
* <li><code>CASCADE_IMMEDIATE</code>: Value is deleted immediately when
* the owning object is deleted.</li>
* <li><code>CASCADE_AUTO</code>: Value will be deleted on flush
* if the owning object is deleted or if the value is removed from the
* owning object, and if the value is not assigned to another relation in
* the same transaction.</li>
* </ul>
*/
int getCascadeDelete();
/**
* Cascade behavior for deletion.
*
* @see #getCascadeDelete
*/
void setCascadeDelete(int cascade);
/**
* Cascade behavior for persist operation. Only applies to
* persistence-capable values. Options are:<br />
* <ul>
* <li><code>CASCADE_NONE</code>: No cascades. If a transient relation
* is held at flush, an error is thrown.</li>
* <li><code>CASCADE_IMMEDIATE</code>: Value is persisted immediately when
* the owning object is persisted.</li>
* <li><code>CASCADE_AUTO</code>: Value will be persisted on flush.</li>
* </ul>
*/
int getCascadePersist();
/**
* Cascade behavior for persist operation.
*
* @see #getCascadePersist
*/
void setCascadePersist(int cascade);
/**
* Cascade behavior for persist operation.
*
* @see #getCascadePersist
*/
void setCascadePersist(int cascade, boolean checkPUDefault);
/**
* Cascade behavior for attach operation. Only applies to
* persistence-capable values. Options are:<br />
* <ul>
* <li><code>CASCADE_NONE</code>: No cascades of attach. Relation
* remains detached.</li>
* <li><code>CASCADE_IMMEDIATE</code>: Value is attached immediately.</li>
* </ul>
*/
int getCascadeAttach();
/**
* Cascade behavior for attach operation.
*
* @see #getCascadeAttach
*/
void setCascadeAttach(int cascade);
/**
* Cascade behavior for detach operation. Only applies to
* persistence-capable values. Options are:<br />
* <ul>
* <li><code>CASCADE_NONE</code>: No cascades of detach. Relation
* remains attached.</li>
* <li><code>CASCADE_IMMEDIATE</code>: Value is detached immediately.</li>
* </ul>
*/
int getCascadeDetach();
/**
* Cascade behavior for detach operation.
*
* @see #getCascadeDetach
*/
void setCascadeDetach(int cascade);
/**
* Cascade behavior for refresh operation. Only applies to
* persistence-capable values. Options are:<br />
* <ul>
* <li><code>CASCADE_NONE</code>: No cascades of refresh.</li>
* <li><code>CASCADE_IMMEDIATE</code>: Persistent value object is also
* refreshed.</li>
* <li><code>CASCADE_AUTO</code>: Value will be refreshed if it is
* in the current fetch groups.</li>
* </ul>
*/
int getCascadeRefresh();
/**
* Cascade behavior for refresh operation.
*
* @see #getCascadeRefresh
*/
void setCascadeRefresh(int cascade);
/**
* Whether this value is serialized when stored.
*/
boolean isSerialized();
/**
* Whether this value is serialized when stored.
*/
void setSerialized(boolean serialized);
/**
* The field that this value shares a mapping with. Currently the only
* supported use for a mapped-by value is when a map field key is
* determined by a field of the persistence-capable map value.
*/
String getValueMappedBy();
/**
* The field that this value shares a mapping with. Currently the only
* supported use for a mapped-by value is when a map field key is
* determined by a field of the persistence-capable map value.
*/
void setValueMappedBy(String mapped);
/**
* The field that this value shares a mapping with. Currently the only
* supported use for a mapped-by value is when a map field key is
* determined by a field of the persistence-capable map value.
*/
FieldMetaData getValueMappedByMetaData();
/**
* User-supplied type overriding assumed type based on field.
*/
Class getTypeOverride();
/**
* User-supplied type overriding assumed type based on field.
*/
void setTypeOverride(Class type);
/**
* Resolve mode for metadata.
*/
int getResolve();
/**
* Resolve mode for metadata.
*/
void setResolve(int mode);
/**
* Resolve mode for metadata.
*/
void setResolve(int mode, boolean on);
/**
* Resolve and validate metadata. Return true if already resolved.
*/
boolean resolve(int mode);
/**
* Copy state from the given value to this one. Do not copy mapping
* information.
*/
void copy(ValueMetaData vmd);
}