org.elasticsearch.ingest.IngestDocMetadata Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of elasticsearch Show documentation
Show all versions of elasticsearch Show documentation
Elasticsearch subproject :server
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
package org.elasticsearch.ingest;
import org.elasticsearch.common.util.Maps;
import org.elasticsearch.index.VersionType;
import org.elasticsearch.script.Metadata;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
class IngestDocMetadata extends Metadata {
static final Map> PROPERTIES = Map.of(
INDEX,
StringField.withWritable().withNullable(),
ID,
StringField.withWritable().withNullable(),
ROUTING,
StringField.withWritable().withNullable(),
VERSION_TYPE,
StringField.withWritable().withNullable().withValidation(IngestDocMetadata::versionTypeValidator),
VERSION,
LongField.withWritable(),
TYPE,
StringField.withNullable(),
IF_SEQ_NO,
LongField.withWritable().withNullable(),
IF_PRIMARY_TERM,
LongField.withWritable().withNullable(),
DYNAMIC_TEMPLATES,
new FieldProperty<>(Map.class).withWritable().withNullable()
);
protected final ZonedDateTime timestamp;
IngestDocMetadata(String index, String id, long version, String routing, VersionType versionType, ZonedDateTime timestamp) {
this(metadataMap(index, id, version, routing, versionType), timestamp);
}
IngestDocMetadata(Map metadata, ZonedDateTime timestamp) {
this(metadata, PROPERTIES, timestamp);
}
IngestDocMetadata(Map metadata, Map> properties, ZonedDateTime timestamp) {
super(metadata, properties);
this.timestamp = timestamp;
}
/**
* Create the backing metadata map with the standard contents assuming default validators.
*/
protected static Map metadataMap(String index, String id, long version, String routing, VersionType versionType) {
Map metadata = Maps.newHashMapWithExpectedSize(IngestDocument.Metadata.values().length);
metadata.put(IngestDocument.Metadata.INDEX.getFieldName(), index);
metadata.put(IngestDocument.Metadata.ID.getFieldName(), id);
metadata.put(IngestDocument.Metadata.VERSION.getFieldName(), version);
if (routing != null) {
metadata.put(IngestDocument.Metadata.ROUTING.getFieldName(), routing);
}
if (versionType != null) {
metadata.put(IngestDocument.Metadata.VERSION_TYPE.getFieldName(), VersionType.toString(versionType));
}
return metadata;
}
@Override
public ZonedDateTime getNow() {
return timestamp;
}
@Override
public IngestDocMetadata clone() {
return new IngestDocMetadata(map, timestamp);
}
private static void versionTypeValidator(String key, String value) {
try {
VersionType.fromString(value);
return;
} catch (IllegalArgumentException ignored) {}
throw new IllegalArgumentException(
key
+ " must be a null or one of ["
+ Arrays.stream(VersionType.values()).map(vt -> VersionType.toString(vt)).collect(Collectors.joining(", "))
+ "] but was ["
+ value
+ "] with type ["
+ value.getClass().getName()
+ "]"
);
}
}