If I understood well you just want to describe an FSM in VHDL?
To do so you first need do declare all you possible states in a TYPE
TYPE my_state_type IS (s0, s1, s2);
Then you have to create a signal which takes my_state_type
as a type.
SIGNAL my_state : my_state_type := s0; -- for initialisation
Then, in your process you indeed need a CASE
for each of your state.
fsm : PROCESS (clk, rst)
BEGIN
IF (rst = '1') THEN
my_state <= s0 ; -- reset value
ELSIF (rising_edge(clk)) THEN
CASE my_state IS
WHEN s0 => output <= '1'; -- do
IF (input = '1') THEN -- condition to enter s1
my_state <= s1;
ELSE -- condition to stay in s0
my_state <= s0;
END IF;
WHEN s1 => my_state <= s2; -- stay in s1 for only one clk cycle
WHEN s2 => my_state <= s0; -- stay in s2 for only one clk cycle
WHEN OTHERS => my_state <= s0;
END CASE;
END IF;
END PROCESS;
I hope it answered your question or at least will help.