/********************************************************************************
 * Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 ********************************************************************************/

package org.eclipse.mdm.api.base.massdata;

import org.eclipse.mdm.api.base.model.Channel;
import org.eclipse.mdm.api.base.model.ChannelGroup;
import org.eclipse.mdm.api.base.model.ScalarType;
import org.eclipse.mdm.api.base.model.Unit;

/**
 * This builder allows to specify a source {@link Unit} which is different to
 * the origin {@code Unit} of the underlying {@link Channel}. In Addition to
 * that this builder allows to configure numerically sortable measured values to
 * be independent, which means the measured values do not depend on those of
 * other {@link Channel}s within their common {@link ChannelGroup}. The
 * numerically sortable types are listed below:
 *
 * <ul>
 * <li>{@link ScalarType#DATE}</li>
 * <li>{@link ScalarType#BYTE}</li>
 * <li>{@link ScalarType#SHORT}</li>
 * <li>{@link ScalarType#INTEGER}</li>
 * <li>{@link ScalarType#LONG}</li>
 * <li>{@link ScalarType#FLOAT}</li>
 * <li>{@link ScalarType#DOUBLE}</li>
 * </ul>
 *
 * @since 1.0.0
 * @author Viktor Stoehr, Gigatronik Ingolstadt GmbH
 * @author Sebastian Dirsch, Gigatronik Ingolstadt GmbH
 */
public final class UnitIndependentBuilder extends IndependentBuilder {

	// ======================================================================
	// Constructors
	// ======================================================================

	/**
	 * Constructor.
	 *
	 * @param writeRequest The {@link WriteRequest} whose measured values source
	 *                     {@link Unit} may be changed or marked as independent.
	 */
	UnitIndependentBuilder(WriteRequest writeRequest) {
		super(writeRequest);
	}

	// ======================================================================
	// Public methods
	// ======================================================================

	/**
	 * Sets a source {@link Unit} for the previously defined measured values.
	 *
	 * @param sourceUnit The source {@code Unit}.
	 * @return The {@link IndependentBuilder} is returned.
	 */
	public IndependentBuilder sourceUnit(Unit sourceUnit) {
		getWriteRequest().setSourceUnit(sourceUnit);
		return this;
	}

}
