- java.lang.Object
-
- org.tentackle.model.impl.RelationImpl
-
- All Implemented Interfaces:
java.lang.Comparable<RelationImpl>,ModelElement,Relation
public class RelationImpl extends java.lang.Object implements Relation, java.lang.Comparable<RelationImpl>
Relation implementation.- Author:
- harald
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringARGSproperty args = ...static java.lang.StringCACHEDcached selection flag.static java.lang.StringCASCADEcascade delete flag.static java.lang.StringCOMMENTproperty comment = ...static java.lang.StringCOMPOSITEcomposite relation flag.static java.lang.StringCOUNTproperty count = ...static java.lang.StringDEFAULTproperty default (if object non-composite lazy).static java.lang.StringDELETEproperty delete = ...static java.lang.StringIMMUTABLEsets the relation to immutable after loading.static java.lang.StringLINKproperty link = ...static java.lang.StringMETHODproperty method = ...static java.lang.StringNAMEproperty name = ...static java.lang.StringNMproperty nm = ...static java.lang.StringNOMETHODreadonly + writeonly.static java.lang.StringPROCESSEDprocessed relation flag.static java.lang.StringREADONLYreadonly relation flag.static java.lang.StringREFERENCEDreferenced relation flag.static java.lang.StringRELATIONproperty relation = ...static java.lang.StringREMOTECLEARclear-on-remote-save relation flag.static java.lang.StringREVERSEDmap list relation to reversed 1:1 object relation.static java.lang.StringSCOPEproperty scope = ...static java.lang.StringSELECTproperty select = ...static java.lang.StringSERIALIZEDserialized relation flag.static java.lang.StringSHALLOWskip relation in snapshots or copies.static java.lang.StringTRACKEDtracked relation flag.static java.lang.StringWRITEONLYwriteonly relation flag.
-
Constructor Summary
Constructors Constructor Description RelationImpl(Entity entity, SourceInfo sourceInfo)Creates a relation.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intcompareTo(RelationImpl o)ModelExceptioncreateModelException(java.lang.String message)Creates a model exception.booleanequals(java.lang.Object obj)AccessScopegetAccessScope()Gets the access scope for generated methods.java.util.List<java.lang.String>getAnnotations()list of annotations.AttributegetAttribute()Gets the associated attribute.java.lang.StringgetClassName()Gets the name of the related class.java.lang.StringgetComment()Gets the comment.AttributegetCountAttribute()Returns the attribute that holds the number of elements of a 1:N relation.
Applies only to composite non-reversed list relations.
If set, this column gets the number of elements in the list when the PDO is persisted.java.lang.StringgetDeclaredJavaType(boolean withinForeignEntity)Gets the declared java type of the relation.RelationgetDefiningNmRelation()Gets the relation of the entity defining the nm-relation.EntitygetEntity()Gets the entity this relation belongs to.AttributegetForeignAttribute()Gets the foreign attribute.EntitygetForeignEntity()Gets the related entity.RelationgetForeignRelation()Gets the foreign (opposite) relation.java.lang.StringgetGetterName()Gets the getter method name.java.lang.StringgetGetterSetterComment()Gets the comment line for getter and setter.java.lang.StringgetJavaType()Gets the effective java type of the relation.java.lang.StringgetLinkMethodIndex()Returns the optional link method index parameter.java.lang.StringgetLinkMethodName()Gets the name for the link method.java.util.List<MethodArgument>getMethodArgs()Gets the effective method arguments for select- and delete-methods.java.lang.StringgetMethodName()Gets the name-part for select- and delete-methods.java.lang.StringgetMethodNameSuffix()Gets the suffix to be used in methodnames.java.lang.StringgetName()Gets the name of this relation.
If no explicit name set, it defaults to the className.java.lang.StringgetNmMethodName()Same asRelation.getMethodName()but for nm relation.java.lang.StringgetNmName()Gets the name of the nm-relation.RelationgetNmRelation()Gets the N:M relation of the foreign entity.intgetOrdinal()Gets the ordinal along the inheritance path.ModelElementgetParent()Gets the parent element.RelationTypegetRelationType()Gets the relation type.SelectionTypegetSelectionType()Gets the selection type.java.lang.StringgetSelectionWurbletArguments()Gets the optional wurblet arguments.
Only available for composite list relations.java.lang.StringgetSetterName()Gets the setter method name.SourceInfogetSourceInfo()Gets the source info.RelationLinegetSourceLine()Gets the source line.java.lang.StringgetVariableName()Gets the variable name.inthashCode()booleanisClearOnRemoteSave()Returns whether the relation should be cleared before save.
Used for non-composite serialized relations that should not be transmitted to the server.booleanisComposite()Returns whether the relation points to components of a composite.booleanisDeepReference()Returns whether this relation is a deep reference.
Deep references point to components of another composite entity.booleanisDeletionCascaded()Returns whether deletion is cascaded to elements in lists.booleanisDeletionFromMainClass()Returns whether delete method is invoked on main class instead of relation class.booleanisImmutable()Returns whether the relation should be set to immutable after loading.booleanisProcessed()Returns whether a process-method is invoked after initialization, select and before save.
The method has the same name as the getter with "get" replaced by "process" and must be provided by the application.
This flag applies to composite relations only.booleanisReadOnly()Returns whether the relation is read only.booleanisReferenced()Returns whether the parent object is referenced by a variable.booleanisReversed()Returns whether this is list relation with only one element.
A.k.a.booleanisSelectionCached()Returns whether the select method is a caching one.booleanisSerialized()Returns whether the relation is serialized.
Used for non-composite relations to make them non-transient.booleanisShallow()Returns whether the relation should be skipped in snapshot and copy operations.booleanisTracked()Returns whether the modification state of the relation is available.booleanisWriteOnly()Returns whether the relation is write-only.voidparse(Entity entity, RelationLine line)Parses a relation line.voidsetAccessScope(AccessScope accessScope)voidsetAnnotations(java.util.List<java.lang.String> annotations)voidsetAttribute(Attribute attribute)voidsetClassName(java.lang.String className)voidsetClearOnRemoteSave(boolean clearOnRemoteSave)voidsetComment(java.lang.String comment)voidsetComposite(boolean composite)voidsetCountAttribute(Attribute countAttribute)voidsetDeepReference(boolean deepReference)voidsetDefiningNmRelation(Relation definingNmRelation)voidsetDeletionCascaded(boolean deletionCascaded)voidsetDeletionFromMainClass(boolean deletionFromMainClass)voidsetForeignAttribute(Attribute foreignAttribute)voidsetForeignEntity(Entity foreignEntity)voidsetForeignRelation(Relation foreignRelation)voidsetImmutable(boolean immutable)voidsetLinkMethodIndex(java.lang.String linkMethodIndex)voidsetLinkMethodName(java.lang.String linkMethodName)voidsetMethodArgs(java.util.List<MethodArgument> methodArgs)voidsetMethodName(java.lang.String methodName)voidsetName(java.lang.String name)voidsetNmMethodName(java.lang.String nmMethodName)voidsetNmName(java.lang.String nmName)voidsetNmRelation(Relation nmRelation)voidsetOrdinal(int ordinal)voidsetProcessed(boolean processed)voidsetReadOnly(boolean readOnly)voidsetReferenced(boolean referenced)voidsetRelationType(RelationType relationType)voidsetReversed(boolean reversed)voidsetSelectionCached(boolean selectionCached)voidsetSelectionType(SelectionType selectionType)voidsetSelectionWurbletArguments(java.lang.String selectionWurbletArguments)voidsetSerialized(boolean serialized)voidsetShallow(boolean shallow)voidsetSourceLine(RelationLine sourceLine)Sets the source line.voidsetTracked(boolean tracked)voidsetWriteOnly(boolean writeOnly)java.lang.StringtoString()voidvalidate()Validates the relation.
-
-
-
Field Detail
-
DEFAULT
public static final java.lang.String DEFAULT
property default (if object non-composite lazy).- See Also:
- Constant Field Values
-
RELATION
public static final java.lang.String RELATION
property relation = ...- See Also:
- Constant Field Values
-
SELECT
public static final java.lang.String SELECT
property select = ...- See Also:
- Constant Field Values
-
DELETE
public static final java.lang.String DELETE
property delete = ...- See Also:
- Constant Field Values
-
LINK
public static final java.lang.String LINK
property link = ...- See Also:
- Constant Field Values
-
ARGS
public static final java.lang.String ARGS
property args = ...- See Also:
- Constant Field Values
-
NM
public static final java.lang.String NM
property nm = ...- See Also:
- Constant Field Values
-
METHOD
public static final java.lang.String METHOD
property method = ...- See Also:
- Constant Field Values
-
NAME
public static final java.lang.String NAME
property name = ...- See Also:
- Constant Field Values
-
SCOPE
public static final java.lang.String SCOPE
property scope = ...- See Also:
- Constant Field Values
-
COMMENT
public static final java.lang.String COMMENT
property comment = ...- See Also:
- Constant Field Values
-
COUNT
public static final java.lang.String COUNT
property count = ...- See Also:
- Constant Field Values
-
COMPOSITE
public static final java.lang.String COMPOSITE
composite relation flag.- See Also:
- Constant Field Values
-
TRACKED
public static final java.lang.String TRACKED
tracked relation flag.- See Also:
- Constant Field Values
-
REFERENCED
public static final java.lang.String REFERENCED
referenced relation flag.- See Also:
- Constant Field Values
-
PROCESSED
public static final java.lang.String PROCESSED
processed relation flag.- See Also:
- Constant Field Values
-
READONLY
public static final java.lang.String READONLY
readonly relation flag.- See Also:
- Constant Field Values
-
WRITEONLY
public static final java.lang.String WRITEONLY
writeonly relation flag.- See Also:
- Constant Field Values
-
NOMETHOD
public static final java.lang.String NOMETHOD
readonly + writeonly.- See Also:
- Constant Field Values
-
SERIALIZED
public static final java.lang.String SERIALIZED
serialized relation flag.- See Also:
- Constant Field Values
-
REMOTECLEAR
public static final java.lang.String REMOTECLEAR
clear-on-remote-save relation flag.- See Also:
- Constant Field Values
-
REVERSED
public static final java.lang.String REVERSED
map list relation to reversed 1:1 object relation.- See Also:
- Constant Field Values
-
SHALLOW
public static final java.lang.String SHALLOW
skip relation in snapshots or copies.- See Also:
- Constant Field Values
-
IMMUTABLE
public static final java.lang.String IMMUTABLE
sets the relation to immutable after loading.- See Also:
- Constant Field Values
-
CACHED
public static final java.lang.String CACHED
cached selection flag.- See Also:
- Constant Field Values
-
CASCADE
public static final java.lang.String CASCADE
cascade delete flag.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
RelationImpl
public RelationImpl(Entity entity, SourceInfo sourceInfo)
Creates a relation.- Parameters:
entity- the entity this relation belongs tosourceInfo- the source info
-
-
Method Detail
-
getSourceInfo
public SourceInfo getSourceInfo()
Gets the source info.- Specified by:
getSourceInfoin interfaceModelElement- Returns:
- the source info
-
getParent
public ModelElement getParent()
Description copied from interface:ModelElementGets the parent element.- Specified by:
getParentin interfaceModelElement- Returns:
- the parent, null if none
-
getOrdinal
public int getOrdinal()
Description copied from interface:ModelElementGets the ordinal along the inheritance path.- Specified by:
getOrdinalin interfaceModelElement- Returns:
- the ordinal, starting at 0
-
setOrdinal
public void setOrdinal(int ordinal)
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equalsin classjava.lang.Object
-
compareTo
public int compareTo(RelationImpl o)
- Specified by:
compareToin interfacejava.lang.Comparable<RelationImpl>
-
parse
public void parse(Entity entity, RelationLine line) throws ModelException
Parses a relation line.- Parameters:
entity- the entityline- the source line- Throws:
ModelException- if parsing the model failed
-
getEntity
public Entity getEntity()
Description copied from interface:RelationGets the entity this relation belongs to.
-
getAnnotations
public java.util.List<java.lang.String> getAnnotations()
Description copied from interface:Relationlist of annotations.- Specified by:
getAnnotationsin interfaceRelation- Returns:
- the annotations
-
setAnnotations
public void setAnnotations(java.util.List<java.lang.String> annotations)
-
getGetterSetterComment
public java.lang.String getGetterSetterComment()
Description copied from interface:RelationGets the comment line for getter and setter.- Specified by:
getGetterSetterCommentin interfaceRelation- Returns:
- the comment
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
validate
public void validate() throws ModelExceptionDescription copied from interface:RelationValidates the relation.- Specified by:
validatein interfaceRelation- Throws:
ModelException- if validation failed
-
getName
public java.lang.String getName()
Gets the name of this relation.
If no explicit name set, it defaults to the className.- Specified by:
getNamein interfaceModelElement- Returns:
- the name
-
setName
public void setName(java.lang.String name)
-
getSourceLine
public RelationLine getSourceLine()
Gets the source line.- Returns:
- the line
-
setSourceLine
public void setSourceLine(RelationLine sourceLine)
Sets the source line.- Parameters:
sourceLine- the line
-
createModelException
public ModelException createModelException(java.lang.String message)
Creates a model exception.Refers to the source line if set, otherwise just the message.
- Parameters:
message- the message- Returns:
- the exception
-
getComment
public java.lang.String getComment()
Description copied from interface:RelationGets the comment.- Specified by:
getCommentin interfaceRelation- Returns:
- the comment
-
getClassName
public java.lang.String getClassName()
Description copied from interface:RelationGets the name of the related class.- Specified by:
getClassNamein interfaceRelation- Returns:
- the classname
-
getRelationType
public RelationType getRelationType()
Description copied from interface:RelationGets the relation type.- Specified by:
getRelationTypein interfaceRelation- Returns:
- list or object
-
getAccessScope
public AccessScope getAccessScope()
Description copied from interface:RelationGets the access scope for generated methods.- Specified by:
getAccessScopein interfaceRelation- Returns:
- the scope
-
getAttribute
public Attribute getAttribute()
Description copied from interface:RelationGets the associated attribute.- Specified by:
getAttributein interfaceRelation- Returns:
- the attribute, null if ID of foreign entity
-
getForeignEntity
public Entity getForeignEntity()
Description copied from interface:RelationGets the related entity.- Specified by:
getForeignEntityin interfaceRelation- Returns:
- the foreign entity
-
getForeignAttribute
public Attribute getForeignAttribute()
Description copied from interface:RelationGets the foreign attribute.- Specified by:
getForeignAttributein interfaceRelation- Returns:
- the attribute, null if ID of this entity
-
getForeignRelation
public Relation getForeignRelation()
Description copied from interface:RelationGets the foreign (opposite) relation.- Specified by:
getForeignRelationin interfaceRelation- Returns:
- the foreign relation, null if no such relation
-
getNmRelation
public Relation getNmRelation()
Description copied from interface:RelationGets the N:M relation of the foreign entity.- Specified by:
getNmRelationin interfaceRelation- Returns:
- the nm-relation, null if this is no nm-relation
-
getDefiningNmRelation
public Relation getDefiningNmRelation()
Description copied from interface:RelationGets the relation of the entity defining the nm-relation.- Specified by:
getDefiningNmRelationin interfaceRelation- Returns:
- the defining relation
-
isComposite
public boolean isComposite()
Description copied from interface:RelationReturns whether the relation points to components of a composite.- Specified by:
isCompositein interfaceRelation- Returns:
- true if composite relation
-
isTracked
public boolean isTracked()
Description copied from interface:RelationReturns whether the modification state of the relation is available.
-
isReferenced
public boolean isReferenced()
Description copied from interface:RelationReturns whether the parent object is referenced by a variable.- Specified by:
isReferencedin interfaceRelation- Returns:
- true if referenced
-
isProcessed
public boolean isProcessed()
Description copied from interface:RelationReturns whether a process-method is invoked after initialization, select and before save.
The method has the same name as the getter with "get" replaced by "process" and must be provided by the application.
This flag applies to composite relations only.- Specified by:
isProcessedin interfaceRelation- Returns:
- true if processed
-
isReadOnly
public boolean isReadOnly()
Description copied from interface:RelationReturns whether the relation is read only.- Specified by:
isReadOnlyin interfaceRelation- Returns:
- true if no setter method
-
isWriteOnly
public boolean isWriteOnly()
Description copied from interface:RelationReturns whether the relation is write-only.- Specified by:
isWriteOnlyin interfaceRelation- Returns:
- true if no getter method
-
isSerialized
public boolean isSerialized()
Description copied from interface:RelationReturns whether the relation is serialized.
Used for non-composite relations to make them non-transient.- Specified by:
isSerializedin interfaceRelation- Returns:
- true if serialized, false if transient
-
isClearOnRemoteSave
public boolean isClearOnRemoteSave()
Description copied from interface:RelationReturns whether the relation should be cleared before save.
Used for non-composite serialized relations that should not be transmitted to the server.- Specified by:
isClearOnRemoteSavein interfaceRelation- Returns:
- true if transient on save
-
isReversed
public boolean isReversed()
Description copied from interface:RelationReturns whether this is list relation with only one element.
A.k.a. reversed 1:1 object relation.- Specified by:
isReversedin interfaceRelation- Returns:
- true if reversed
-
isShallow
public boolean isShallow()
Description copied from interface:RelationReturns whether the relation should be skipped in snapshot and copy operations.
-
setShallow
public void setShallow(boolean shallow)
-
isImmutable
public boolean isImmutable()
Description copied from interface:RelationReturns whether the relation should be set to immutable after loading.- Specified by:
isImmutablein interfaceRelation- Returns:
- true if immutable
-
setImmutable
public void setImmutable(boolean immutable)
-
getCountAttribute
public Attribute getCountAttribute()
Description copied from interface:RelationReturns the attribute that holds the number of elements of a 1:N relation.
Applies only to composite non-reversed list relations.
If set, this column gets the number of elements in the list when the PDO is persisted. This avoids an initial select when the list is accessed the first time and the list is empty.- Specified by:
getCountAttributein interfaceRelation- Returns:
- the counter attribute, null if none
-
getMethodName
public java.lang.String getMethodName()
Description copied from interface:RelationGets the name-part for select- and delete-methods.- Specified by:
getMethodNamein interfaceRelation- Returns:
- the method name, null if default from foreign entity name
-
getMethodArgs
public java.util.List<MethodArgument> getMethodArgs()
Description copied from interface:RelationGets the effective method arguments for select- and delete-methods.- Specified by:
getMethodArgsin interfaceRelation- Returns:
- the args, never null, at least 1 element
-
getNmName
public java.lang.String getNmName()
Description copied from interface:RelationGets the name of the nm-relation.
-
getNmMethodName
public java.lang.String getNmMethodName()
Description copied from interface:RelationSame asRelation.getMethodName()but for nm relation.- Specified by:
getNmMethodNamein interfaceRelation- Returns:
- the list method name, null if default
-
getLinkMethodName
public java.lang.String getLinkMethodName()
Description copied from interface:RelationGets the name for the link method.- Specified by:
getLinkMethodNamein interfaceRelation- Returns:
- the link method, null if default
-
getLinkMethodIndex
public java.lang.String getLinkMethodIndex()
Description copied from interface:RelationReturns the optional link method index parameter.- Specified by:
getLinkMethodIndexin interfaceRelation- Returns:
- the index parameter, null if no index
-
getSelectionType
public SelectionType getSelectionType()
Description copied from interface:RelationGets the selection type.- Specified by:
getSelectionTypein interfaceRelation- Returns:
- the selection tupe
-
isSelectionCached
public boolean isSelectionCached()
Description copied from interface:RelationReturns whether the select method is a caching one.- Specified by:
isSelectionCachedin interfaceRelation- Returns:
- true if cached
-
getSelectionWurbletArguments
public java.lang.String getSelectionWurbletArguments()
Description copied from interface:RelationGets the optional wurblet arguments.
Only available for composite list relations.- Specified by:
getSelectionWurbletArgumentsin interfaceRelation- Returns:
- the extra wurblet args
-
isDeletionFromMainClass
public boolean isDeletionFromMainClass()
Description copied from interface:RelationReturns whether delete method is invoked on main class instead of relation class.- Specified by:
isDeletionFromMainClassin interfaceRelation- Returns:
- true if delete from main class
-
isDeletionCascaded
public boolean isDeletionCascaded()
Description copied from interface:RelationReturns whether deletion is cascaded to elements in lists.- Specified by:
isDeletionCascadedin interfaceRelation- Returns:
- true if cascaded
-
setNmRelation
public void setNmRelation(Relation nmRelation)
-
setDefiningNmRelation
public void setDefiningNmRelation(Relation definingNmRelation)
-
setAttribute
public void setAttribute(Attribute attribute)
-
setForeignEntity
public void setForeignEntity(Entity foreignEntity)
-
setForeignAttribute
public void setForeignAttribute(Attribute foreignAttribute)
-
setForeignRelation
public void setForeignRelation(Relation foreignRelation)
-
setClassName
public void setClassName(java.lang.String className)
-
setComment
public void setComment(java.lang.String comment)
-
setComposite
public void setComposite(boolean composite)
-
setLinkMethodName
public void setLinkMethodName(java.lang.String linkMethodName)
-
setMethodArgs
public void setMethodArgs(java.util.List<MethodArgument> methodArgs)
-
setNmName
public void setNmName(java.lang.String nmName)
-
setNmMethodName
public void setNmMethodName(java.lang.String nmMethodName)
-
setMethodName
public void setMethodName(java.lang.String methodName)
-
setReadOnly
public void setReadOnly(boolean readOnly)
-
setReferenced
public void setReferenced(boolean referenced)
-
setProcessed
public void setProcessed(boolean processed)
-
setRelationType
public void setRelationType(RelationType relationType)
-
setSerialized
public void setSerialized(boolean serialized)
-
setClearOnRemoteSave
public void setClearOnRemoteSave(boolean clearOnRemoteSave)
-
setReversed
public void setReversed(boolean reversed)
-
setCountAttribute
public void setCountAttribute(Attribute countAttribute)
-
setTracked
public void setTracked(boolean tracked)
-
setWriteOnly
public void setWriteOnly(boolean writeOnly)
-
setSelectionType
public void setSelectionType(SelectionType selectionType)
-
setSelectionCached
public void setSelectionCached(boolean selectionCached)
-
setSelectionWurbletArguments
public void setSelectionWurbletArguments(java.lang.String selectionWurbletArguments)
-
setAccessScope
public void setAccessScope(AccessScope accessScope)
-
setDeletionCascaded
public void setDeletionCascaded(boolean deletionCascaded)
-
setDeletionFromMainClass
public void setDeletionFromMainClass(boolean deletionFromMainClass)
-
setLinkMethodIndex
public void setLinkMethodIndex(java.lang.String linkMethodIndex)
-
getVariableName
public java.lang.String getVariableName()
Gets the variable name.- Specified by:
getVariableNamein interfaceRelation- Returns:
- the variable name
-
getMethodNameSuffix
public java.lang.String getMethodNameSuffix()
Gets the suffix to be used in methodnames.Example:
"set" + getMethodNameSuffix() would return "setBlah" if the classname is "Blah" or the name is "blah".
- Specified by:
getMethodNameSuffixin interfaceRelation- Returns:
- the suffix
-
getGetterName
public java.lang.String getGetterName()
Description copied from interface:RelationGets the getter method name.- Specified by:
getGetterNamein interfaceRelation- Returns:
- the getter
-
getSetterName
public java.lang.String getSetterName()
Description copied from interface:RelationGets the setter method name.- Specified by:
getSetterNamein interfaceRelation- Returns:
- the setter
-
getDeclaredJavaType
public java.lang.String getDeclaredJavaType(boolean withinForeignEntity)
Description copied from interface:RelationGets the declared java type of the relation.- Specified by:
getDeclaredJavaTypein interfaceRelation- Parameters:
withinForeignEntity- true if we need the type from within the foreign entity, else from within the relation's entity- Returns:
- the declared java type
-
getJavaType
public java.lang.String getJavaType()
Description copied from interface:RelationGets the effective java type of the relation.Example: the effective type is ArrayList and the declared type is List.
- Specified by:
getJavaTypein interfaceRelation- Returns:
- the effective java type
-
isDeepReference
public boolean isDeepReference()
Description copied from interface:RelationReturns whether this relation is a deep reference.
Deep references point to components of another composite entity.- Specified by:
isDeepReferencein interfaceRelation- Returns:
- true if deep reference
-
setDeepReference
public void setDeepReference(boolean deepReference)
-
-