4444import org .opensearch .cluster .metadata .MetadataIndexTemplateService ;
4545import org .opensearch .cluster .metadata .Template ;
4646import org .opensearch .cluster .service .ClusterService ;
47+ import org .opensearch .common .compress .CompressedXContent ;
4748import org .opensearch .common .inject .Inject ;
4849import org .opensearch .common .settings .IndexScopedSettings ;
4950import org .opensearch .common .settings .Settings ;
5051import org .opensearch .core .action .ActionListener ;
5152import org .opensearch .core .common .io .stream .StreamInput ;
53+ import org .opensearch .index .mapper .MappingTransformerRegistry ;
5254import org .opensearch .threadpool .ThreadPool ;
5355import org .opensearch .transport .TransportService ;
5456
5557import java .io .IOException ;
5658
59+ import reactor .util .annotation .NonNull ;
60+
5761/**
5862 * An action for putting a single component template into the cluster state
5963 *
@@ -65,6 +69,7 @@ public class TransportPutComponentTemplateAction extends TransportClusterManager
6569
6670 private final MetadataIndexTemplateService indexTemplateService ;
6771 private final IndexScopedSettings indexScopedSettings ;
72+ private final MappingTransformerRegistry mappingTransformerRegistry ;
6873
6974 @ Inject
7075 public TransportPutComponentTemplateAction (
@@ -74,7 +79,8 @@ public TransportPutComponentTemplateAction(
7479 MetadataIndexTemplateService indexTemplateService ,
7580 ActionFilters actionFilters ,
7681 IndexNameExpressionResolver indexNameExpressionResolver ,
77- IndexScopedSettings indexScopedSettings
82+ IndexScopedSettings indexScopedSettings ,
83+ MappingTransformerRegistry mappingTransformerRegistry
7884 ) {
7985 super (
8086 PutComponentTemplateAction .NAME ,
@@ -87,6 +93,7 @@ public TransportPutComponentTemplateAction(
8793 );
8894 this .indexTemplateService = indexTemplateService ;
8995 this .indexScopedSettings = indexScopedSettings ;
96+ this .mappingTransformerRegistry = mappingTransformerRegistry ;
9097 }
9198
9299 @ Override
@@ -121,13 +128,38 @@ protected void clusterManagerOperation(
121128 template = new Template (settings , template .mappings (), template .aliases ());
122129 componentTemplate = new ComponentTemplate (template , componentTemplate .version (), componentTemplate .metadata ());
123130 }
124- indexTemplateService .putComponentTemplate (
125- request .cause (),
126- request .create (),
127- request .name (),
128- request .clusterManagerNodeTimeout (),
129- componentTemplate ,
130- listener
131- );
131+
132+ final ActionListener <String > mappingTransformListener = getMappingTransformListener (request , listener , componentTemplate );
133+
134+ transformMapping (template , mappingTransformListener );
135+
136+ }
137+
138+ private ActionListener <String > getMappingTransformListener (
139+ final PutComponentTemplateAction .Request request ,
140+ final ActionListener <AcknowledgedResponse > listener ,
141+ final ComponentTemplate componentTemplate
142+ ) {
143+ return ActionListener .wrap (transformedMappings -> {
144+ if (transformedMappings != null ) {
145+ componentTemplate .template ().setMappings (new CompressedXContent (transformedMappings ));
146+ }
147+ indexTemplateService .putComponentTemplate (
148+ request .cause (),
149+ request .create (),
150+ request .name (),
151+ request .clusterManagerNodeTimeout (),
152+ componentTemplate ,
153+ listener
154+ );
155+ }, e -> { throw (RuntimeException ) e ; });
156+ }
157+
158+ private void transformMapping (@ NonNull final Template template , @ NonNull final ActionListener <String > mappingTransformListener ) {
159+ if (template == null || template .mappings () == null ) {
160+ mappingTransformListener .onResponse (null );
161+ } else {
162+ mappingTransformerRegistry .applyTransformers (template .mappings ().string (), null , mappingTransformListener );
163+ }
132164 }
133165}
0 commit comments