package component;

import java.io.IOException;
import java.util.Properties;

import org.apache.log4j.Logger;

public class CompositionManager {

	private Logger logger = null;

	 //Tabella contenente la composizione
	private Properties propertiesComposition = null;
	
	 // Tabella contenente le informazioni sullo stato successore
	private Properties propertiesSuccessor = null;

	public CompositionManager() {

		logger = Logger.getLogger(this.getClass());

		propertiesComposition = new Properties();
		propertiesSuccessor = new Properties();
		
		try {
			propertiesComposition.load(this.getClass().getClassLoader()
					.getResourceAsStream("component/composition.properties"));
					
			propertiesSuccessor.load(this.getClass().getClassLoader()
					.getResourceAsStream("component/successor.properties"));
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
	}

	/**
	 * Data una composition KEY retituisce l'ID dell'orchestratore che deve
	 * eseguire l'operazione
	 */
	public int getServiceToInvoke(String compositionKey) throws NoCompositionException {
		if (containsCompositionKey(compositionKey)) {
			return Integer.parseInt(propertiesComposition.getProperty(compositionKey));
		}
		throw new NoCompositionException("NoCompositionException");
	}
	
	public int getSuccessorStatusForTheTarget(String successorKey) throws NoCompositionException {
		if (containsSuccessorKey(successorKey)) {
			return Integer.parseInt(propertiesSuccessor.getProperty(successorKey));
		}
		throw new NoCompositionException("NoCompositionException");
	}
	
	public boolean containsCompositionKey(String compositionKey) throws NoCompositionException{
	
		if(propertiesComposition.containsKey(compositionKey)){	
			return propertiesComposition.containsKey(compositionKey);
		}
		throw new NoCompositionException("NoCompositionException");
	}
	
	public boolean containsSuccessorKey(String successorKey) throws NoCompositionException {
		
		if (propertiesSuccessor.containsKey(successorKey)){
			return propertiesSuccessor.containsKey(successorKey);
		}
		throw new NoCompositionException("NoCompositionException");
	}
}
