/**
 *                                                                            
 * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
 *                                                                            
 * 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:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
 */
package org.eclipse.osbp.ui.api.statemachine;

import java.lang.reflect.Method;
import java.util.Locale;

public interface IStateMachineParticipant {
	void setStatemachine(IStateMachine statemachine);

	IStateMachine getStatemachine();

	void init(String pRemoteHost, int pRemotePort);

	void setLocale(Locale locale);

	Method getter(Object listener, String id);

	Method getter(Object listener, String id, String device);

	Method setter(Object listener, String id, Class<?> parameter);

	Method setter(Object listener, String id, Class<?> content, int contentIndex);

	Method setter(Object listener, String id, Object content, int contentIndex);
	
	Class<?> getReturnType(Object obj, String id);

	void toggle(Object obj, String id);

	void set(Object obj, String id, Object content);

	void set(Object obj, String id, String device, Object content);

	Object get(Object obj, String id);

	Object get(Object obj, String id, String parameter);

	void clear(Object obj, String id);
	
}
