/*******************************************************************************
 * Copyright (c) 2016 École Polytechnique de Montréal
 *
 * All rights reserved. This program and the accompanying materials are
 * made available under the terms of the Eclipse Public License 2.0 which
 * accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *******************************************************************************/

package org.eclipse.tracecompass.statesystem.core;

import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.statesystem.core.exceptions.AttributeNotFoundException;
import org.eclipse.tracecompass.statesystem.core.exceptions.StateValueTypeException;

/**
 * Provide utility methods for building the state system
 *
 * @since 2.0
 */
public final class StateSystemBuilderUtils {

    private StateSystemBuilderUtils() {
    }

    /**
     * Increments attribute by a certain long value. Reads the current value of
     * a given attribute as a long, and increment it by a certain increment.
     *
     * @param ssb
     *            The state system builder
     * @param t
     *            The time at which to do the increment
     * @param attributeQuark
     *            The quark of the attribute to increment
     * @param increment
     *            The value to increment. This value can be negative.
     * @throws StateValueTypeException
     *             If the attribute already exists but is not of type Long
     * @throws AttributeNotFoundException
     *             If the quark is invalid
     */
    public static void incrementAttributeLong(ITmfStateSystemBuilder ssb, long t, int attributeQuark, long increment)
            throws StateValueTypeException, AttributeNotFoundException {
        @Nullable Object stateValue = ssb.queryOngoing(attributeQuark);

        /* if the attribute was previously null, start counting at 0 */
        long prevValue = 0;
        if (stateValue != null && stateValue instanceof Long) {
            prevValue = (long) stateValue;
        }
        ssb.modifyAttribute(t, prevValue + increment, attributeQuark);
    }

    /**
     * Increments attribute by a certain integer value. Reads the current value
     * of a given attribute as an int, and increment it by a certain increment.
     *
     * @param ssb
     *            The state system builder
     * @param t
     *            The time at which to do the increment
     * @param attributeQuark
     *            The quark of the attribute to increment
     * @param increment
     *            The value to increment. This value can be negative.
     * @throws StateValueTypeException
     *             If the attribute already exists but is not of type Integer
     * @throws AttributeNotFoundException
     *             If the quark is invalid
     */
    public static void incrementAttributeInt(ITmfStateSystemBuilder ssb, long t, int attributeQuark, int increment)
            throws StateValueTypeException, AttributeNotFoundException {
        @Nullable Object stateValue = ssb.queryOngoing(attributeQuark);

        /* if the attribute was previously null, start counting at 0 */
        int prevValue = 0;
        if (stateValue != null && stateValue instanceof Integer) {
            prevValue = (int) stateValue;
        }
        ssb.modifyAttribute(t, prevValue + increment, attributeQuark);
    }

}
