/**
 *  Copyright (c)2020 CEA LIST, Committer Name, and others.
 * 
 *  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
 * 
 *  Contributors:
 *  CEA LIST - Initial API and implementation
 *  Gabriel Pedroza (CEA LIST) gabriel.pedroza@cea.fr
 * 
 */
package org.eclipse.papyrus.pdp4eng.designer.engine.api.internal;

import java.util.ArrayList;

import org.eclipse.papyrus.pdp4eng.designer.engine.api.IStrategy;
import org.eclipse.papyrus.pdp4eng.designer.engine.api.IStrategyCatalog;

public class StrategyCatalog implements IStrategyCatalog {

	protected String id=null;
	public StrategyCatalog(String id) {
		this.id=id;
	}
	protected  ArrayList<IStrategy> strategies= new ArrayList<>();
	@Override
	public ArrayList<IStrategy> getPossibleStrategies() {
		return strategies;
	}

	@Override
	public void addStrategy(IStrategy newStrategy) {
		strategies.add(newStrategy);

	}

	@Override
	public String getId() {
		return this.id;
	}

}
