Class BuilderContext
- java.lang.Object
-
- org.apache.sling.feature.builder.BuilderContext
-
public class BuilderContext extends Object
Builder context holds services and configuration used byFeatureBuilder
and controls how features are assembled and aggregated.When two features are merged, being it a prototype with the feature using the prototype or two features, there might be a clash with bundles or artifacts. A clash occurs when there is an artifact in the source and the target with different versions. If the version is the same, the source artifact will override the target artifact. However, all other cases need instructions on how to proceed.
An override rule is an artifact id. As the version for the rule, one of
VERSION_OVERRIDE_ALL
,VERSION_OVERRIDE_LATEST
orVERSION_OVERRIDE_FIRST
orVERSION_OVERRIDE_HIGHEST
as well as any version can be specified. If the artifact id should match more than a single artifactCOORDINATE_MATCH_ALL
can be specified as group id, artifact id, type and/or classifier.A clash might also happen with framework properties or variables. In this case an override must be provided for that variable or framework property as well.
This class is not thread-safe.
-
-
Field Summary
Fields Modifier and Type Field Description static String
CONFIG_FAIL_ON_CLASH
Used to handle configuration merging - fail the merge when there is a clash for a PID - this is the defaultstatic String
CONFIG_FAIL_ON_PROPERTY_CLASH
Used to handle configuration merging - fail the merge only when there is a clash on a property levelstatic String
CONFIG_MERGE_FIRST
Used to handle configuration merging - merge the first configuration in, latest props will not override previous valuesstatic String
CONFIG_MERGE_LATEST
Used to handle configuration merging - merge the latest configuration in, latest props might override previous valuesstatic String
CONFIG_USE_FIRST
Used to handle configuration merging - use the first configuration, don't mergestatic String
CONFIG_USE_LATEST
Used to handle configuration merging - use the latest configuration, but don't mergestatic String
COORDINATE_MATCH_ALL
Used in override rule to match all coordinatesstatic String
VERSION_OVERRIDE_ALL
Used in override rule to select all candidates.static String
VERSION_OVERRIDE_FIRST
Used in override rule to select the first candidate applied.static String
VERSION_OVERRIDE_HIGHEST
Used in override rule to select the candidate with the highest version (OSGi version comparison rules).static String
VERSION_OVERRIDE_LATEST
Used in override rule to select the last candidate applied.
-
Constructor Summary
Constructors Constructor Description BuilderContext(FeatureProvider provider)
Create a new context.
-
Method Summary
-
-
-
Field Detail
-
VERSION_OVERRIDE_ALL
public static final String VERSION_OVERRIDE_ALL
Used in override rule to select all candidates.- See Also:
- Constant Field Values
-
VERSION_OVERRIDE_HIGHEST
public static final String VERSION_OVERRIDE_HIGHEST
Used in override rule to select the candidate with the highest version (OSGi version comparison rules).- See Also:
- Constant Field Values
-
VERSION_OVERRIDE_LATEST
public static final String VERSION_OVERRIDE_LATEST
Used in override rule to select the last candidate applied.- See Also:
- Constant Field Values
-
VERSION_OVERRIDE_FIRST
public static final String VERSION_OVERRIDE_FIRST
Used in override rule to select the first candidate applied.- Since:
- 1.3.0
- See Also:
- Constant Field Values
-
COORDINATE_MATCH_ALL
public static final String COORDINATE_MATCH_ALL
Used in override rule to match all coordinates- See Also:
- Constant Field Values
-
CONFIG_FAIL_ON_CLASH
public static final String CONFIG_FAIL_ON_CLASH
Used to handle configuration merging - fail the merge when there is a clash for a PID - this is the default- See Also:
- Constant Field Values
-
CONFIG_FAIL_ON_PROPERTY_CLASH
public static final String CONFIG_FAIL_ON_PROPERTY_CLASH
Used to handle configuration merging - fail the merge only when there is a clash on a property level- See Also:
- Constant Field Values
-
CONFIG_USE_LATEST
public static final String CONFIG_USE_LATEST
Used to handle configuration merging - use the latest configuration, but don't merge- See Also:
- Constant Field Values
-
CONFIG_USE_FIRST
public static final String CONFIG_USE_FIRST
Used to handle configuration merging - use the first configuration, don't merge- See Also:
- Constant Field Values
-
CONFIG_MERGE_LATEST
public static final String CONFIG_MERGE_LATEST
Used to handle configuration merging - merge the latest configuration in, latest props might override previous values- See Also:
- Constant Field Values
-
CONFIG_MERGE_FIRST
public static final String CONFIG_MERGE_FIRST
Used to handle configuration merging - merge the first configuration in, latest props will not override previous values- See Also:
- Constant Field Values
-
-
Constructor Detail
-
BuilderContext
public BuilderContext(FeatureProvider provider)
Create a new context. The feature provider is for example used to get a prototype feature.- Parameters:
provider
- A provider providing required features for processing- Throws:
IllegalArgumentException
- If feature provider isnull
-
-
Method Detail
-
setArtifactProvider
public BuilderContext setArtifactProvider(ArtifactProvider ap)
Set the artifact provider. While the artifact provider is not required by the general assembly and merging algorithms, handlers for extensions might need it.- Parameters:
ap
- An ArtifactProvider to resolve artifact IDs to URLs- Returns:
- The builder context
-
addVariablesOverrides
public BuilderContext addVariablesOverrides(Map<String,String> vars)
Add overrides for the variables. Variables can be overridden if any feature in the aggregation/assembly process contains an overriden variable. If multiple definitions of the same variable are found in the features that are to be aggregated and the values for these variables are different, they must be overridden, otherwise the aggregation will fail.- Parameters:
vars
- The overrides keyed by variable name- Returns:
- The builder context
-
addFrameworkPropertiesOverrides
public BuilderContext addFrameworkPropertiesOverrides(Map<String,String> props)
Add overrides for the framework properties. Framework properties can be overridden if any feature in the aggregation/assembly process contains an overriden framework property. If multiple definitions of the same framework property are found in the features that are to be aggregated and the values for these properties are different, they must be overridden, otherwise the aggregation will fail.- Parameters:
props
- The overrides keyed by framework property name- Returns:
- The builder context
-
addArtifactsOverrides
@Deprecated public BuilderContext addArtifactsOverrides(List<String> overrides)
Deprecated.UseaddArtifactsOverride(ArtifactId)
instead.Add overrides for artifact clashes.- Parameters:
overrides
- The overrides- Returns:
- The builder context
- Throws:
IllegalArgumentException
- If the provided overrides are not following the artifact id syntax
-
addArtifactsOverride
public BuilderContext addArtifactsOverride(ArtifactId override)
Add an override for artifact clashes.- Parameters:
override
- The override- Returns:
- The builder context
-
addConfigsOverrides
public BuilderContext addConfigsOverrides(Map<String,String> overrides)
Add merge policies for configuration clashes.- Parameters:
overrides
- The overrides- Returns:
- The builder context
-
addMergeExtensions
public BuilderContext addMergeExtensions(MergeHandler... extensions)
Add merge extensions- Parameters:
extensions
- A list of merge extensions.- Returns:
- The builder context
-
addPostProcessExtensions
public BuilderContext addPostProcessExtensions(PostProcessHandler... extensions)
Add post process extensions- Parameters:
extensions
- A list of extensions- Returns:
- The builder context
-
setHandlerConfiguration
public BuilderContext setHandlerConfiguration(String name, Map<String,String> cfg)
Set a handler configuration. A configuration can be set for bothMergeHandler
s andPostProcessHandler
s. The name of a handler is the simple class name of the class implementing the handler. To pass the same configuration to all handlers, use theCONFIGURATION_ALL_HANDLERS_KEY
name.- Parameters:
name
- The name of the handlercfg
- The configuration for the handler- Returns:
- The builder context
-
-