It is possible to use component-plugin
elements to dynamically change a PortalContainerDefinition.
In the example below, we add the dependency foo
to the default portal container and to the portal containers called
foo1
and foo2
:
<external-component-plugins>
<!-- The full qualified name of the PortalContainerConfig -->
<target-component>org.exoplatform.container.definition.PortalContainerConfig</target-component>
<component-plugin>
<!-- The name of the plugin -->
<name>Change PortalContainer Definitions</name>
<!-- The name of the method to call on the PortalContainerConfig in order to register the changes on the PortalContainerDefinitions -->
<set-method>registerChangePlugin</set-method>
<!-- The full qualified name of the PortalContainerDefinitionChangePlugin -->
<type>org.exoplatform.container.definition.PortalContainerDefinitionChangePlugin</type>
<init-params>
<value-param>
<name>apply.default</name>
<value>true</value>
</value-param>
<values-param>
<name>apply.specific</name>
<value>foo1</value>
<value>foo2</value>
</values-param>
<object-param>
<name>change</name>
<object type="org.exoplatform.container.definition.PortalContainerDefinitionChange$AddDependencies">
<!-- The list of name of the dependencies to add -->
<field name="dependencies">
<collection type="java.util.ArrayList">
<value>
<string>foo</string>
</value>
</collection>
</field>
</object>
</object-param>
</init-params>
</component-plugin>
</external-component-plugins>
apply.all (*) | Indicates whether changes have to be applied to all
the portal containers or not. The default value of this field
is false . This field is a ValueParam and is not mandatory. |
apply.default (*) | Indicates whether the changes have to be applied to the
default portal container or not. The default value of this
field is false . This field is a
ValueParam and is not mandatory. |
apply.specific (*) | A set of specific portal container names to which we
want to apply the changes. This field is a
ValuesParam and is not mandatory. |
Other parameters | Other parameters are
ObjectParam of PortalContainerDefinitionChange type.
Those parameters are in fact the list of changes that we want to
apply to one or several portal containers. If the list of
changes is empty, the component plugin will be ignored. The
supported implementations of PortalContainerDefinitionChange
are described later in this section. |
All the value of the parameters marked with a (*) can be
set via System properties and also via variables loaded by the
PropertyConfigurator.
For example, in eXo Platform, it would be all the variables that can be defined in the exo.properties
file.
See Configuration overview for the exo.properties
file.
To identify the portal containers to which the changes have to be applied, we use the following algorithm:
If the apply.all
parameter is
true
, the corresponding changes will be applied to
all the portal containers and the other parameters will be
ignored. Otherwise, go to next step.
If the apply.default
parameter is
true
and the apply.specific
parameter is null
, the
corresponding changes will be applied to the default portal container only.
If the apply.default
parameter is
true
and the apply.specific
parameter is not null
, the
corresponding changes will be applied to the default portal
container and the given list of specific portal containers.
If the apply.default
parameter is
false
or is not set and the parameter
apply.specific
is null
, the
corresponding changes will be applied to the default portal container only.
If the apply.default
parameter is
false
or is not set and the
apply.specific
parameter is not null
, the
corresponding changes will be applied to the given list of specific portal containers.
Existing implementations of PortalContainerDefinitionChange
The modifications that can be applied to a
PortalContainerDefinition
must be a class of
PortalContainerDefinitionChange
type. eXo Platform proposes
out of the box some implementations that we describe in the next sub-sections.
This modification adds a list of dependencies at the end of
the list of dependencies defined into the
PortalContainerDefinition
. The full qualified name
is org.exoplatform.container.definition.PortalContainerDefinitionChange$AddDependencies.
dependencies | A list of String corresponding to the list of name of the dependencies to add. If the value of this field is empty, the change will be ignored. |
See an example below that will add foo
at
the end of the dependency list of the default portal container:
<external-component-plugins>
<!-- The full qualified name of the PortalContainerConfig -->
<target-component>org.exoplatform.container.definition.PortalContainerConfig</target-component>
<component-plugin>
<!-- The name of the plugin -->
<name>Change PortalContainer Definitions</name>
<!-- The name of the method to call on the PortalContainerConfig in order to register the changes on the PortalContainerDefinitions -->
<set-method>registerChangePlugin</set-method>
<!-- The full qualified name of the PortalContainerDefinitionChangePlugin -->
<type>org.exoplatform.container.definition.PortalContainerDefinitionChangePlugin</type>
<init-params>
<value-param>
<name>apply.default</name>
<value>true</value>
</value-param>
<object-param>
<name>change</name>
<object type="org.exoplatform.container.definition.PortalContainerDefinitionChange$AddDependencies">
<!-- The list of name of the dependencies to add -->
<field name="dependencies">
<collection type="java.util.ArrayList">
<value>
<string>foo</string>
</value>
</collection>
</field>
</object>
</object-param>
</init-params>
</component-plugin>
</external-component-plugins>
This modification adds a list of dependencies before a given
target dependency in the list of dependencies of the
PortalContainerDefinition
. The full qualified name
is org.exoplatform.container.definition.PortalContainerDefinitionChange$AddDependenciesBefore.
dependencies | A list of String corresponding to the list of name of the dependencies to add. If the value of this field is empty, the change will be ignored. |
target | The name of the dependency before which we would
like to add the new dependencies. If this field is
null or the target dependency cannot be
found, the new dependencies will be added in first position of the list. |
See an example below, that will add foo
before foo2
in the dependency list of the default
portal container:
<external-component-plugins>
<!-- The full qualified name of the PortalContainerConfig -->
<target-component>org.exoplatform.container.definition.PortalContainerConfig</target-component>
<component-plugin>
<!-- The name of the plugin -->
<name>Change PortalContainer Definitions</name>
<!-- The name of the method to call on the PortalContainerConfig in order to register the changes on the PortalContainerDefinitions -->
<set-method>registerChangePlugin</set-method>
<!-- The full qualified name of the PortalContainerDefinitionChangePlugin -->
<type>org.exoplatform.container.definition.PortalContainerDefinitionChangePlugin</type>
<init-params>
<value-param>
<name>apply.default</name>
<value>true</value>
</value-param>
<object-param>
<name>change</name>
<object type="org.exoplatform.container.definition.PortalContainerDefinitionChange$AddDependenciesBefore">
<!-- The list of name of the dependencies to add -->
<field name="dependencies">
<collection type="java.util.ArrayList">
<value>
<string>foo</string>
</value>
</collection>
</field>
<!-- The name of the target dependency -->
<field name="target">
<string>foo2</string>
</field>
</object>
</object-param>
</init-params>
</component-plugin>
</external-component-plugins>
This modification adds a list of dependencies after a given
target dependency in the list of dependencies of the
PortalContainerDefinition
. The full qualified name
is org.exoplatform.container.definition.PortalContainerDefinitionChange$AddDependenciesAfter.
dependencies | A list of String corresponding to the list of name of the dependencies to add. If the value of this field is empty, the change will be ignored. |
target | The name of the dependency after which we would
like to add the new dependencies. If this field is
null or the target dependency cannot be
found, the new dependencies will be added in the last position of the list. |
See an example below that will add foo
after
foo2
in the dependency list of the default portal container:
<external-component-plugins>
<!-- The full qualified name of the PortalContainerConfig -->
<target-component>org.exoplatform.container.definition.PortalContainerConfig</target-component>
<component-plugin>
<!-- The name of the plugin -->
<name>Change PortalContainer Definitions</name>
<!-- The name of the method to call on the PortalContainerConfig in order to register the changes on the PortalContainerDefinitions -->
<set-method>registerChangePlugin</set-method>
<!-- The full qualified name of the PortalContainerDefinitionChangePlugin -->
<type>org.exoplatform.container.definition.PortalContainerDefinitionChangePlugin</type>
<init-params>
<value-param>
<name>apply.default</name>
<value>true</value>
</value-param>
<object-param>
<name>change</name>
<object type="org.exoplatform.container.definition.PortalContainerDefinitionChange$AddDependenciesAfter">
<!-- The list of name of the dependencies to add -->
<field name="dependencies">
<collection type="java.util.ArrayList">
<value>
<string>foo</string>
</value>
</collection>
</field>
<!-- The name of the target dependency -->
<field name="target">
<string>foo2</string>
</field>
</object>
</object-param>
</init-params>
</component-plugin>
</external-component-plugins>
This modification adds new settings to a PortalContainerDefinition
.
The full qualified name is org.exoplatform.container.definition.PortalContainerDefinitionChange$AddSettings.
settings | A map of <String, Object> corresponding to the settings to add. If the value of this field is empty, the change will be ignored. |
See an example below that will add the settings
string
and stringX
to the settings of the default portal container:
<external-component-plugins>
<!-- The full qualified name of the PortalContainerConfig -->
<target-component>org.exoplatform.container.definition.PortalContainerConfig</target-component>
<component-plugin>
<!-- The name of the plugin -->
<name>Change PortalContainer Definitions</name>
<!-- The name of the method to call on the PortalContainerConfig in order to register the changes on the PortalContainerDefinitions -->
<set-method>registerChangePlugin</set-method>
<!-- The full qualified name of the PortalContainerDefinitionChangePlugin -->
<type>org.exoplatform.container.definition.PortalContainerDefinitionChangePlugin</type>
<init-params>
<value-param>
<name>apply.default</name>
<value>true</value>
</value-param>
<object-param>
<name>change</name>
<object type="org.exoplatform.container.definition.PortalContainerDefinitionChange$AddSettings">
<!-- The settings to add to the to the portal containers -->
<field name="settings">
<map type="java.util.HashMap">
<entry>
<key>
<string>string</string>
</key>
<value>
<string>value1</string>
</value>
</entry>
<entry>
<key>
<string>stringX</string>
</key>
<value>
<string>value1</string>
</value>
</entry>
</map>
</field>
</object>
</object-param>
</init-params>
</component-plugin>
</external-component-plugins>