| /* |
| * Copyright 2017-present Open Networking Foundation |
| * |
| * 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.onosproject.store.primitives.resources.impl; |
| |
| import io.atomix.protocols.raft.operation.OperationId; |
| import io.atomix.protocols.raft.operation.OperationType; |
| import org.onlab.util.KryoNamespace; |
| import org.onosproject.store.serializers.KryoNamespaces; |
| |
| /** |
| * Counter commands. |
| */ |
| public enum AtomixCounterOperations implements OperationId { |
| SET(OperationType.COMMAND), |
| COMPARE_AND_SET(OperationType.COMMAND), |
| INCREMENT_AND_GET(OperationType.COMMAND), |
| GET_AND_INCREMENT(OperationType.COMMAND), |
| ADD_AND_GET(OperationType.COMMAND), |
| GET_AND_ADD(OperationType.COMMAND), |
| GET(OperationType.QUERY); |
| |
| private final OperationType type; |
| |
| AtomixCounterOperations(OperationType type) { |
| this.type = type; |
| } |
| |
| @Override |
| public String id() { |
| return name(); |
| } |
| |
| @Override |
| public OperationType type() { |
| return type; |
| } |
| |
| public static final KryoNamespace NAMESPACE = KryoNamespace.newBuilder() |
| .register(KryoNamespaces.BASIC) |
| .nextId(KryoNamespaces.BEGIN_USER_CUSTOM_ID) |
| .register(Get.class) |
| .register(Set.class) |
| .register(CompareAndSet.class) |
| .register(AddAndGet.class) |
| .register(GetAndAdd.class) |
| .build("AtomixCounterOperations"); |
| |
| /** |
| * Abstract value command. |
| */ |
| public abstract static class ValueOperation { |
| } |
| |
| /** |
| * Get query. |
| */ |
| public static class Get extends ValueOperation { |
| } |
| |
| /** |
| * Set command. |
| */ |
| public static class Set extends ValueOperation { |
| private Long value; |
| |
| public Set() { |
| } |
| |
| public Set(Long value) { |
| this.value = value; |
| } |
| |
| /** |
| * Returns the command value. |
| * |
| * @return The command value. |
| */ |
| public Long value() { |
| return value; |
| } |
| |
| @Override |
| public String toString() { |
| return String.format("%s[value=%s]", getClass().getSimpleName(), value); |
| } |
| } |
| |
| /** |
| * Compare and set command. |
| */ |
| public static class CompareAndSet extends ValueOperation { |
| private Long expect; |
| private Long update; |
| |
| public CompareAndSet() { |
| } |
| |
| public CompareAndSet(Long expect, Long update) { |
| this.expect = expect; |
| this.update = update; |
| } |
| |
| /** |
| * Returns the expected value. |
| * |
| * @return The expected value. |
| */ |
| public Long expect() { |
| return expect; |
| } |
| |
| /** |
| * Returns the updated value. |
| * |
| * @return The updated value. |
| */ |
| public Long update() { |
| return update; |
| } |
| |
| @Override |
| public String toString() { |
| return String.format("%s[expect=%s, update=%s]", getClass().getSimpleName(), expect, update); |
| } |
| } |
| |
| /** |
| * Delta command. |
| */ |
| public abstract static class DeltaOperation extends ValueOperation { |
| private long delta; |
| |
| public DeltaOperation() { |
| } |
| |
| public DeltaOperation(long delta) { |
| this.delta = delta; |
| } |
| |
| /** |
| * Returns the delta. |
| * |
| * @return The delta. |
| */ |
| public long delta() { |
| return delta; |
| } |
| } |
| |
| /** |
| * Get and add command. |
| */ |
| public static class GetAndAdd extends DeltaOperation { |
| public GetAndAdd() { |
| } |
| |
| public GetAndAdd(long delta) { |
| super(delta); |
| } |
| } |
| |
| /** |
| * Add and get command. |
| */ |
| public static class AddAndGet extends DeltaOperation { |
| public AddAndGet() { |
| } |
| |
| public AddAndGet(long delta) { |
| super(delta); |
| } |
| } |
| } |