/**
 ********************************************************************************
 * Copyright (c) 2018-2019 Robert Bosch GmbH and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     Robert Bosch GmbH - initial API and implementation
 ********************************************************************************
 */

package org.eclipse.app4mc.amalthea.model.builder;

import org.eclipse.app4mc.amalthea.model.AmaltheaFactory;
import org.eclipse.app4mc.amalthea.model.DiscreteValueConstant;
import org.eclipse.app4mc.amalthea.model.ExecutionNeed;
import org.eclipse.app4mc.amalthea.model.HWModel;
import org.eclipse.app4mc.amalthea.model.HwFeatureCategory;
import org.eclipse.app4mc.amalthea.model.IDiscreteValueDeviation;
import org.eclipse.app4mc.amalthea.model.util.InstructionsUtil;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

/**
 * Creates Need entries for Instructions
 *
 * @deprecated (0.9.3) use {@link org.eclipse.app4mc.amalthea.model.Ticks} instead.
 */
@Deprecated
public class InstructionsBuilder {

	// ********** Execution Need (Runnable items) **********

	public DiscreteValueConstant instructions(final ExecutionNeed container, final long instructions) {
		final DiscreteValueConstant usages = AmaltheaFactory.eINSTANCE.createDiscreteValueConstant();
		usages.setValue(instructions);
		container.getNeeds().put(InstructionsUtil.INSTRUCTIONS_CATEGORY_NAME, usages);
		return usages;
	}

	public IDiscreteValueDeviation instructions(final ExecutionNeed container, final IDiscreteValueDeviation instructions) {
		container.getNeeds().put(InstructionsUtil.INSTRUCTIONS_CATEGORY_NAME, instructions);
		return instructions;
	}

	// ********** Hardware Feature Category **********

	//@SuppressWarnings("java:S100") // domain specific builder language
	public void featureCategory_Instructions(final HWModel container, final Procedure1<HwFeatureCategory> initializer) {
		final HwFeatureCategory obj = AmaltheaFactory.eINSTANCE.createHwFeatureCategory();
		obj.setName(InstructionsUtil.INSTRUCTIONS_CATEGORY_NAME);
		container.getFeatureCategories().add(obj);
		initializer.apply(obj);
	}

}
