/*
* Copyright Terracotta, Inc.
*
* Licensed 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 org.ehcache.clustered.client.internal.store.operations;
import org.ehcache.spi.serialization.Serializer;
import java.nio.ByteBuffer;
public enum OperationCode {
PUT((byte)1) {
@Override
public <K, V> Operation<K, V> decode(ByteBuffer buffer, final Serializer<K> keySerializer, final Serializer<V> valueSerializer) {
return new PutOperation<K, V>(buffer, keySerializer, valueSerializer);
}
},
REMOVE((byte)2) {
@Override
public <K, V> Operation<K, V> decode(final ByteBuffer buffer, final Serializer<K> keySerializer, final Serializer<V> valueSerializer) {
return new RemoveOperation<K, V>(buffer, keySerializer);
}
},
PUT_IF_ABSENT((byte)3) {
@Override
public <K, V> Operation<K, V> decode(final ByteBuffer buffer, final Serializer<K> keySerializer, final Serializer<V> valueSerializer) {
return new PutIfAbsentOperation<K, V>(buffer, keySerializer, valueSerializer);
}
},
REMOVE_CONDITIONAL((byte)4) {
@Override
public <K, V> Operation<K, V> decode(final ByteBuffer buffer, final Serializer<K> keySerializer, final Serializer<V> valueSerializer) {
return new ConditionalRemoveOperation<K, V>(buffer, keySerializer, valueSerializer);
}
},
REPLACE((byte)5) {
@Override
public <K, V> Operation<K, V> decode(final ByteBuffer buffer, final Serializer<K> keySerializer, final Serializer<V> valueSerializer) {
return new ReplaceOperation<K, V>(buffer, keySerializer, valueSerializer);
}
},
REPLACE_CONDITIONAL((byte)6) {
@Override
public <K, V> Operation<K, V> decode(final ByteBuffer buffer, final Serializer<K> keySerializer, final Serializer<V> valueSerializer) {
return new ConditionalReplaceOperation<K, V>(buffer, keySerializer, valueSerializer);
}
};
private byte value;
OperationCode(byte value) {
this.value = value;
}
public byte getValue() {
return value;
}
public abstract <K, V> Operation<K, V> decode(ByteBuffer buffer, Serializer<K> keySerializer, Serializer<V> valueSerializer);
public static OperationCode valueOf(byte value) {
switch (value) {
case 1:
return PUT;
case 2:
return REMOVE;
case 3:
return PUT_IF_ABSENT;
case 4:
return REMOVE_CONDITIONAL;
case 5:
return REPLACE;
case 6:
return REPLACE_CONDITIONAL;
default:
throw new IllegalArgumentException("Operation undefined for the value " + value);
}
}
}