Top Description Methods
jakarta.enterprise.inject.build.compatible.spi

public Interface SyntheticBeanBuilder<T>

Type Parameters
<T>
the bean class of this synthetic bean
Imports
java.lang.annotation.Annotation, jakarta.enterprise.lang.model.AnnotationInfo, jakarta.enterprise.lang.model.declarations.ClassInfo, jakarta.enterprise.lang.model.types.Type

Builder for synthetic beans. Instances are not reusable. For each synthetic bean, new instance must be created by SyntheticComponents#addBean(Class).
Since
4.0

Method Summary

Modifier and TypeMethod and Description
public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
alternative
(boolean
whether this synthetic bean should be an alternative
isAlternative
)

Marks this synthetic bean as an alternative if desired.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
createWith
(Class<? extends SyntheticBeanCreator<T>>
the creation function class, must not be null
creatorClass
)

Sets the class of the synthetic bean creation function.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
disposeWith
(Class<? extends SyntheticBeanDisposer<T>>
the destruction function class, must not be null
disposerClass
)

Sets the class of the synthetic bean destruction function.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
name
(String
the bean name of this synthetic bean
beanName
)

Sets the bean name of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
priority
(int
the priority of this synthetic bean
priority
)

Sets a priority of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
qualifier
(Class<? extends Annotation>
the type of the marker annotation, must not be null
annotationType
)

Adds a marker annotation of given type to the set of qualifiers of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
qualifier
(AnnotationInfo
the annotation, must not be null
qualifierAnnotation
)

Adds given annotation to the set of qualifiers of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
qualifier
(Annotation
the annotation, must not be null
qualifierAnnotation
)

Adds given annotation to the set of qualifiers of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
scope
(Class<? extends Annotation>
the scope type, must not be null
scopeAnnotation
)

Sets the scope of this synthetic bean to given scope type.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
stereotype
(Class<? extends Annotation>
the stereotype, must not be null
stereotypeAnnotation
)

Adds stereotypeAnnotation to the set of stereotypes of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
stereotype
(ClassInfo
the stereotype, must not be null
stereotypeAnnotation
)

Adds stereotypeAnnotation to the set of stereotypes of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
type
(Class<?>
the bean type, must not be null
type
)

Adds type to the set of bean types of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
type
(ClassInfo
the bean type, must not be null
type
)

Adds type to the set of bean types of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
type
(Type
the bean type, must not be null
type
)

Adds type to the set of bean types of this synthetic bean.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
boolean
the parameter value
value
)

Adds a boolean-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
boolean[]
the parameter value
value
)

Adds a boolean array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
int
the parameter value
value
)

Adds an int-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
int[]
the parameter value
value
)

Adds an int array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
long
the parameter value
value
)

Adds a long-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
long[]
the parameter value
value
)

Adds a long array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
double
the parameter value
value
)

Adds a double-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
double[]
the parameter value
value
)

Adds a double array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
String
the parameter value
value
)

Adds a String-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
String[]
the parameter value
value
)

Adds a String array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
Enum<?>
the parameter value
value
)

Adds an enum-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
Enum<?>[]
the parameter value
value
)

Adds an enum array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
Class<?>
the parameter value
value
)

Adds a Class-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
ClassInfo
the parameter value
value
)

Adds a Class-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
Class<?>[]
the parameter value
value
)

Adds a Class array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
ClassInfo[]
the parameter value
value
)

Adds a Class array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
AnnotationInfo
the parameter value
value
)

Adds an annotation-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
Annotation
the parameter value
value
)

Adds an annotation-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
AnnotationInfo[]
the parameter value
value
)

Adds an annotation array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
Annotation[]
the parameter value
value
)

Adds an annotation array-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
InvokerInfo
the parameter value
value
)

Adds an invoker-valued parameter to the parameter map.

public SyntheticBeanBuilder<T>

Returns:

this SyntheticBeanBuilder
withParam
(String
the parameter key, must not be null
key
,
InvokerInfo[]
the parameter value
value
)

Adds an invoker array-valued parameter to the parameter map.

Method Detail

alternativeback to summary
public SyntheticBeanBuilder<T> alternative(boolean isAlternative)

Marks this synthetic bean as an alternative if desired. To make this synthetic bean an enabled alternative, call both alternative(true) and priority(some priority).

If this synthetic bean is an alternative, not setting a priority means that it is not enabled, which is equivalent to not registering it at all.

If not called, this synthetic bean will not be an alternative.

Parameters
isAlternative:boolean

whether this synthetic bean should be an alternative

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

Exceptions
IllegalStateException:
if this method is called multiple times
createWithback to summary
public SyntheticBeanBuilder<T> createWith(Class<? extends SyntheticBeanCreator<T>> creatorClass)

Sets the class of the synthetic bean creation function. CDI container will create an instance of the creation function every time when it needs to obtain an instance of the synthetic bean. The class must be public and have a public zero-parameter constructor; it must not be a bean.

If not called, the synthetic bean registration will fail.

Parameters
creatorClass:Class<? extends SyntheticBeanCreator<T>>

the creation function class, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

Exceptions
IllegalStateException:
if this method is called multiple times
disposeWithback to summary
public SyntheticBeanBuilder<T> disposeWith(Class<? extends SyntheticBeanDisposer<T>> disposerClass)

Sets the class of the synthetic bean destruction function. CDI container will create an instance of the destruction function every time when it needs to destruction an instance of the synthetic bean. The class must be public and have a public zero-parameter constructor; it must not be a bean.

If not called, a noop destruction function will be used.

Parameters
disposerClass:Class<? extends SyntheticBeanDisposer<T>>

the destruction function class, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

Exceptions
IllegalStateException:
if this method is called multiple times
nameback to summary
public SyntheticBeanBuilder<T> name(String beanName)

Sets the bean name of this synthetic bean. If beanName is null, this synthetic bean will not have a name.

If not called, this synthetic bean will not have a name.

Parameters
beanName:String

the bean name of this synthetic bean

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

Exceptions
IllegalStateException:
if this method is called multiple times
priorityback to summary
public SyntheticBeanBuilder<T> priority(int priority)

Sets a priority of this synthetic bean. To make this synthetic bean an enabled alternative, call both alternative(true) and priority(some priority).

If this synthetic bean is an alternative, not setting a priority means that it is not enabled, which is equivalent to not registering it at all.

If not called, this synthetic bean will not have a priority.

Parameters
priority:int

the priority of this synthetic bean

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

Exceptions
IllegalStateException:
if this method is called multiple times
qualifierback to summary
public SyntheticBeanBuilder<T> qualifier(Class<? extends Annotation> annotationType)

Adds a marker annotation of given type to the set of qualifiers of this synthetic bean. This method may be called multiple times to add multiple qualifiers.

If not called, this synthetic bean will have the @Default qualifier (and the @Any qualifier that all beans have).

Parameters
annotationType:Class<? extends Annotation>

the type of the marker annotation, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

qualifierback to summary
public SyntheticBeanBuilder<T> qualifier(AnnotationInfo qualifierAnnotation)

Adds given annotation to the set of qualifiers of this synthetic bean. This method may be called multiple times to add multiple qualifiers.

If not called, this synthetic bean will have the @Default qualifier (and the @Any qualifier that all beans have).

Parameters
qualifierAnnotation:AnnotationInfo

the annotation, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

qualifierback to summary
public SyntheticBeanBuilder<T> qualifier(Annotation qualifierAnnotation)

Adds given annotation to the set of qualifiers of this synthetic bean. This method may be called multiple times to add multiple qualifiers.

If not called, this synthetic bean will have the @Default qualifier (and the @Any qualifier that all beans have).

Parameters
qualifierAnnotation:Annotation

the annotation, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

scopeback to summary
public SyntheticBeanBuilder<T> scope(Class<? extends Annotation> scopeAnnotation)

Sets the scope of this synthetic bean to given scope type.

If not called, and if no stereotype is added that defines a scope, this synthetic bean will be @Dependent.

Parameters
scopeAnnotation:Class<? extends Annotation>

the scope type, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

Exceptions
IllegalStateException:
if this method is called multiple times
stereotypeback to summary
public SyntheticBeanBuilder<T> stereotype(Class<? extends Annotation> stereotypeAnnotation)

Adds stereotypeAnnotation to the set of stereotypes of this synthetic bean. This method may be called multiple times to add multiple stereotypes.

If not called, this synthetic bean will have no stereotype.

Parameters
stereotypeAnnotation:Class<? extends Annotation>

the stereotype, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

stereotypeback to summary
public SyntheticBeanBuilder<T> stereotype(ClassInfo stereotypeAnnotation)

Adds stereotypeAnnotation to the set of stereotypes of this synthetic bean. This method may be called multiple times to add multiple stereotypes.

If not called, this synthetic bean will have no stereotype.

Parameters
stereotypeAnnotation:ClassInfo

the stereotype, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

typeback to summary
public SyntheticBeanBuilder<T> type(Class<?> type)

Adds type to the set of bean types of this synthetic bean. This method may be called multiple times to add multiple bean types.

If not called, the set of bean types of this synthetic bean will be a singleton set containing java.lang.Object.

Parameters
type:Class<?>

the bean type, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

typeback to summary
public SyntheticBeanBuilder<T> type(ClassInfo type)

Adds type to the set of bean types of this synthetic bean. This method may be called multiple times to add multiple bean types.

If not called, the set of bean types of this synthetic bean will be a singleton set containing java.lang.Object.

Parameters
type:ClassInfo

the bean type, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

typeback to summary
public SyntheticBeanBuilder<T> type(Type type)

Adds type to the set of bean types of this synthetic bean. This method may be called multiple times to add multiple bean types.

If not called, the set of bean types of this synthetic bean will be a singleton set containing java.lang.Object.

Parameters
type:Type

the bean type, must not be null

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, boolean value)

Adds a boolean-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:boolean

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, boolean[] value)

Adds a boolean array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:boolean[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, int value)

Adds an int-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:int

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, int[] value)

Adds an int array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:int[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, long value)

Adds a long-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:long

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, long[] value)

Adds a long array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:long[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, double value)

Adds a double-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:double

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, double[] value)

Adds a double array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:double[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, String value)

Adds a String-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:String

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, String[] value)

Adds a String array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:String[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, Enum<?> value)

Adds an enum-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:Enum<?>

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, Enum<?>[] value)

Adds an enum array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:Enum<?>[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, Class<?> value)

Adds a Class-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:Class<?>

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, ClassInfo value)

Adds a Class-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

When looked up from the parameter map in the creation/destruction function, the value will be an instance of Class, not a ClassInfo.

Parameters
key:String

the parameter key, must not be null

value:ClassInfo

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, Class<?>[] value)

Adds a Class array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:Class<?>[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, ClassInfo[] value)

Adds a Class array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

When looked up from the parameter map in the creation/destruction function, the values will be instances of Class, not ClassInfo.

Parameters
key:String

the parameter key, must not be null

value:ClassInfo[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, AnnotationInfo value)

Adds an annotation-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

When looked up from the parameter map in the creation/destruction function, the value will be an instance of the annotation type, not an AnnotationInfo.

Parameters
key:String

the parameter key, must not be null

value:AnnotationInfo

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, Annotation value)

Adds an annotation-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:Annotation

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, AnnotationInfo[] value)

Adds an annotation array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

When looked up from the parameter map in the creation/destruction function, the values will be instances of the corresponding annotation types, not AnnotationInfo.

Parameters
key:String

the parameter key, must not be null

value:AnnotationInfo[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, Annotation[] value)

Adds an annotation array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

Parameters
key:String

the parameter key, must not be null

value:Annotation[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, InvokerInfo value)

Adds an invoker-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

When looked up from the parameter map in the creation/destruction function, the value will be an instance of Invoker, not an InvokerInfo.

Parameters
key:String

the parameter key, must not be null

value:InvokerInfo

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

Since
4.1
withParamback to summary
public SyntheticBeanBuilder<T> withParam(String key, InvokerInfo[] value)

Adds an invoker array-valued parameter to the parameter map. The parameter map is passed to the creation and destruction functions when a bean instance is created/destroyed.

When looked up from the parameter map in the creation/destruction function, the values will be instances of Invoker, not InvokerInfo.

Parameters
key:String

the parameter key, must not be null

value:InvokerInfo[]

the parameter value

Returns:SyntheticBeanBuilder<T>

this SyntheticBeanBuilder

Since
4.1