/*
 * (c) Your Company, 2011
 *
 * All rights reserved. Reproduction, modification,
 * use or disclosure to third parties without express
 * authority is forbidden.
 */

/* Command line options: -p CADIFRA -l java -o oven first_example_step3.cdd   */
/* This file is generated from first_example_step3.cdd - do not edit manually  */
/* Generated on: Sat Oct 29 17:05:17 CEST 2011 / version 2.5 */



public class oven
{

	public enum States {
		Super,
		Completed,
		CookingPause,
		Idle,
		Cooking,
	}

	public enum Events  {
		evDoorOpen,
		evDec,
		evTimeout,
		evPwr,
		evDoorClosed,
		evInc,
		OVEN_NO_MSG
	}


	// flag if initialized
	private boolean m_initialized=false;

	States stateVar;
	States  stateVarSuper;

	// State handler class default ctor
	public oven()
	{
	}

	/* Helper(s) to reset history */
	public void resetHistorySuper(){stateVarSuper=States.Idle;}

	// Helper(s) to find out if the machine is in a certain state
	public boolean isInSuper(){return (((stateVar== States.Super)) ? (true) : (false));}
	public boolean isInCompleted(){return (((stateVarSuper== States.Completed)&&(stateVar== States.Super)) ? (true) : (false));}
	public boolean isInCookingPause(){return (((stateVarSuper== States.CookingPause)&&(stateVar== States.Super)) ? (true) : (false));}
	public boolean isInIdle(){return (((stateVarSuper== States.Idle)&&(stateVar== States.Super)) ? (true) : (false));}
	public boolean isInCooking(){return (((stateVarSuper== States.Cooking)&&(stateVar== States.Super)) ? (true) : (false));}




	public void initialize(){

		if(m_initialized==false){

			m_initialized=true;
			//call on entry code of default states
			ovenOff();


			// Set state vars to default states
			stateVar = States.Super; /* set init state of top state */
			stateVarSuper = States.Idle; /* set init state of Super */

		}

	}

	protected void ovenChangeToState(States state){
		stateVar=state;
	}

	protected void ovenChangeToStateSuper(States state){
		stateVarSuper = state;
	}


	public int processEvent(Events msg){

		int evConsumed = 0;

		if(m_initialized==false) return 0;

		/* action code */
		/* just a comment */


		switch (stateVar) {

			case Super:

				switch (stateVarSuper) {

					case Idle:
						if(msg==Events.evDoorClosed){
							if(timer_preset()>0){
								/* Transition from Idle to Cooking */
								evConsumed=1;

								/* Action code for transition  */
								timer_start();

								/* OnEntry code of state Cooking */
								ovenOn();

								/* adjust state variables  */
								stateVarSuper = States.Cooking;
							}else{
								/* Intentionally left blank */
							} /*end of event selection */
						}else{
							/* Intentionally left blank */
						} /*end of event selection */
					break; /* end of case Idle  */

					case Cooking:
						if(msg==Events.evDoorOpen){
							/* Transition from Cooking to CookingPause */
							evConsumed=1;

							/* Action code for transition  */
							ovenOff();
							timer_pause();


							/* adjust state variables  */
							stateVarSuper = States.CookingPause;
						}else if(msg==Events.evTimeout){
							/* Transition from Cooking to Completed */
							evConsumed=1;

							/* Action code for transition  */
							ovenOff();
							timer_clear();


							/* adjust state variables  */
							stateVarSuper = States.Completed;
						}else{
							/* Intentionally left blank */
						} /*end of event selection */
					break; /* end of case Cooking  */

					case Completed:
						if(msg==Events.evDoorOpen){
							/* Transition from Completed to Idle */
							evConsumed=1;

							/* OnEntry code of state Idle */
							ovenOff();

							/* adjust state variables  */
							stateVarSuper = States.Idle;
						}else{
							/* Intentionally left blank */
						} /*end of event selection */
					break; /* end of case Completed  */

					case CookingPause:
						if(msg==Events.evDoorClosed){
							/* Transition from CookingPause to Cooking */
							evConsumed=1;

							/* Action code for transition  */
							timer_cont();

							/* OnEntry code of state Cooking */
							ovenOn();

							/* adjust state variables  */
							stateVarSuper = States.Cooking;
						}else{
							/* Intentionally left blank */
						} /*end of event selection */
					break; /* end of case CookingPause  */

					default:
						/* Intentionally left blank */
					break;
				} /* end switch Super */

			/* Check if event was already processed  */
			if(evConsumed==0){

				if(msg==Events.evDec){
					/* Transition from Super to Super */
					evConsumed=1;
					
					if(stateVarSuper== States.Idle){
						

					}else if(stateVarSuper== States.Cooking){
						

					}else if(stateVarSuper== States.Completed){
						

					}else if(stateVarSuper== States.CookingPause){
						
					}

					/* Action code for transition  */
					timer_dec();

					stateVar = States.Super;/* entry chain  */
					if(stateVarSuper== States.Idle){
						ovenOff();

					}else if(stateVarSuper== States.Cooking){
						ovenOn();

					}else if(stateVarSuper== States.Completed){
						
					}else if(stateVarSuper== States.CookingPause){
						
					}

				}else if(msg==Events.evInc){
					/* Transition from Super to Super */
					evConsumed=1;
					
					if(stateVarSuper== States.Idle){
						

					}else if(stateVarSuper== States.Cooking){
						

					}else if(stateVarSuper== States.Completed){
						

					}else if(stateVarSuper== States.CookingPause){
						
					}

					/* Action code for transition  */
					timer_inc();

					stateVar = States.Super;/* entry chain  */
					if(stateVarSuper== States.Idle){
						ovenOff();

					}else if(stateVarSuper== States.Cooking){
						ovenOn();

					}else if(stateVarSuper== States.Completed){
						
					}else if(stateVarSuper== States.CookingPause){
						
					}

				}else if(msg==Events.evPwr){
					/* Transition from Super to Super */
					evConsumed=1;
					
					if(stateVarSuper== States.Idle){
						

					}else if(stateVarSuper== States.Cooking){
						

					}else if(stateVarSuper== States.Completed){
						

					}else if(stateVarSuper== States.CookingPause){
						
					}

					/* Action code for transition  */
					ovenSetPwr(pwr);

					stateVar = States.Super;/* entry chain  */
					if(stateVarSuper== States.Idle){
						ovenOff();

					}else if(stateVarSuper== States.Cooking){
						ovenOn();

					}else if(stateVarSuper== States.Completed){
						
					}else if(stateVarSuper== States.CookingPause){
						
					}

				}else{
					/* Intentionally left blank */
				} /*end of event selection */
			}
			break; /* end of case Super  */

			default:
				/* Intentionally left blank */
			break;
		} /* end switch stateVar_root */
		return evConsumed;
	}
}

