com.datastax.oss.driver.api.core.DefaultConsistencyLevel Maven / Gradle / Ivy
The newest version!
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.datastax.oss.driver.api.core;
import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableMap;
import com.datastax.oss.protocol.internal.ProtocolConstants;
import edu.umd.cs.findbugs.annotations.NonNull;
import java.util.Map;
/** A default consistency level supported by the driver out of the box. */
public enum DefaultConsistencyLevel implements ConsistencyLevel {
ANY(ProtocolConstants.ConsistencyLevel.ANY),
ONE(ProtocolConstants.ConsistencyLevel.ONE),
TWO(ProtocolConstants.ConsistencyLevel.TWO),
THREE(ProtocolConstants.ConsistencyLevel.THREE),
QUORUM(ProtocolConstants.ConsistencyLevel.QUORUM),
ALL(ProtocolConstants.ConsistencyLevel.ALL),
LOCAL_ONE(ProtocolConstants.ConsistencyLevel.LOCAL_ONE),
LOCAL_QUORUM(ProtocolConstants.ConsistencyLevel.LOCAL_QUORUM),
EACH_QUORUM(ProtocolConstants.ConsistencyLevel.EACH_QUORUM),
SERIAL(ProtocolConstants.ConsistencyLevel.SERIAL),
LOCAL_SERIAL(ProtocolConstants.ConsistencyLevel.LOCAL_SERIAL),
;
// Note that, for the sake of convenience, we also expose shortcuts to these constants on the
// ConsistencyLevel interface. If you add a new enum constant, remember to update the interface as
// well.
private final int protocolCode;
DefaultConsistencyLevel(int protocolCode) {
this.protocolCode = protocolCode;
}
@Override
public int getProtocolCode() {
return protocolCode;
}
@NonNull
public static DefaultConsistencyLevel fromCode(int code) {
DefaultConsistencyLevel level = BY_CODE.get(code);
if (level == null) {
throw new IllegalArgumentException("Unknown code: " + code);
}
return level;
}
@Override
public boolean isDcLocal() {
return this == LOCAL_ONE || this == LOCAL_QUORUM || this == LOCAL_SERIAL;
}
@Override
public boolean isSerial() {
return this == SERIAL || this == LOCAL_SERIAL;
}
private static final Map BY_CODE = mapByCode(values());
private static Map mapByCode(DefaultConsistencyLevel[] levels) {
ImmutableMap.Builder builder = ImmutableMap.builder();
for (DefaultConsistencyLevel level : levels) {
builder.put(level.protocolCode, level);
}
return builder.build();
}
}