org.opensearch.jobscheduler.transport.AcquireLockResponse Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of opensearch-job-scheduler Show documentation
Show all versions of opensearch-job-scheduler Show documentation
OpenSearch Job Scheduler plugin
/*
* Copyright OpenSearch Contributors
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/
package org.opensearch.jobscheduler.transport;
import java.io.IOException;
import org.opensearch.core.xcontent.XContentParserUtils;
import org.opensearch.core.xcontent.ToXContentObject;
import org.opensearch.core.xcontent.XContentBuilder;
import org.opensearch.core.xcontent.XContentParser;
import org.opensearch.jobscheduler.spi.LockModel;
import static java.util.Objects.requireNonNull;
/**
* Response class used to facilitate serialization/deserialization of the GetLock response
*/
public class AcquireLockResponse implements ToXContentObject {
private final LockModel lock;
private final String lockId;
private final long seqNo;
private final long primaryTerm;
public AcquireLockResponse(final LockModel lock, final String lockId, final long seqNo, final long primaryTerm) {
this.lock = lock;
this.lockId = lockId;
this.seqNo = seqNo;
this.primaryTerm = primaryTerm;
}
public LockModel getLock() {
return this.lock;
}
public String getLockId() {
return this.lockId;
}
public long getSeqNo() {
return this.seqNo;
}
public long getPrimaryTerm() {
return this.primaryTerm;
}
public static AcquireLockResponse parse(final XContentParser parser) throws IOException {
LockModel lock = null;
String lockId = null;
Long seqNo = null;
Long primaryTerm = null;
XContentParserUtils.ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser);
while (!XContentParser.Token.END_OBJECT.equals(parser.nextToken())) {
String fieldName = parser.currentName();
parser.nextToken();
switch (fieldName) {
case LockModel.LOCK_ID:
lockId = parser.text();
break;
case LockModel.SEQUENCE_NUMBER:
seqNo = parser.longValue();
break;
case LockModel.PRIMARY_TERM:
primaryTerm = parser.longValue();
break;
case LockModel.LOCK_MODEL:
lock = LockModel.parse(parser, seqNo, primaryTerm);
break;
default:
throw new IllegalArgumentException("Unknown field " + fieldName);
}
}
return new AcquireLockResponse(
requireNonNull(lock, "LockModel cannot be null"),
requireNonNull(lockId, "LockId cannot be null"),
requireNonNull(seqNo, "Sequence Number cannot be null"),
requireNonNull(primaryTerm, "Primary Term cannot be null")
);
}
@Override
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
builder.startObject();
builder.field(LockModel.LOCK_ID, lockId);
builder.field(LockModel.SEQUENCE_NUMBER, seqNo);
builder.field(LockModel.PRIMARY_TERM, primaryTerm);
builder.field(LockModel.LOCK_MODEL, lock);
builder.endObject();
return builder;
}
}