// Path: traction/src/main/java/traction/mvc/controllers/FragmentController.java
// public class FragmentController
// extends Fragment
// {
// 	/**
// 	 * Helper to implement Controller logic.
// 	 */
// 	protected final ControllerHelper View = new ControllerHelper(this);
// 
// 	@Override
// 	public void onCreate(Bundle savedInstanceState)
// 	{	
// 		super.onCreate(savedInstanceState);
// 		setRetainInstance(true);
// 	}
// 	
// 	@Override
// 	public View onCreateView(LayoutInflater notUsed, ViewGroup container, Bundle savedInstanceState) 
// 	{
// 		View v = View.inflateView(View.getContentView(), container, container != null);
//         IViewBinding vb = ViewFactory.getViewBinding(v);
//         if (vb != null) {
//             View.ensureMenuInflator(vb.getBindingInventory());
//         }
//         return v;
// 	}
// 	
// 	@Override
// 	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
// 	{
//         View.onCreateOptionsMenu(menu);
// 	}
// 
// 	@Override
// 	public void onDestroyView() 
// 	{		
// 		super.onDestroyView();	
// 		ViewFactory.DetachContext(getView());
// 	}
// 
//     @Override
//     public void onAttach(Activity activity)
//     {
//         super.onAttach(activity);
//         View.registerFragmentToActivity(this, activity);
//     }
// 
//     @Override
//     public void onDetach()
//     {
//         super.onDetach();
//         View.unregisterFragmentFromActivity(this, getActivity());
//     }
// 
//     @Override
//     public void onStart()
//     {
//         super.onStart();
//         View.connectFragmentViewToParentView(this);
//     }
// }
// 
// Path: traction/src/main/java/traction/mvc/implementations/CommandArgument.java
// public class CommandArgument
// {
//     private String commandName;
//     private boolean eventCancelled;
//     private JSONObject tagProperties;
// 
//     public boolean isEventCancelled()
//     {
//         return eventCancelled;
//     }
// 
//     public void setEventCancelled(boolean isCancelled)
//     {
//         eventCancelled = isCancelled;
//     }
// 
//     public CommandArgument(String commandName)
//     {
//         this(commandName, null);
//     }
// 
//     public CommandArgument(String commandName, JSONObject tagProperties)
//     {
//         this.commandName = commandName;
//         this.eventCancelled = false;
//         this.tagProperties = tagProperties;
//     }
// 
//     public JSONObject getEventData()
//     {
//         return tagProperties;
//     }
// 
//     public String getCommandName()
//     {
//         return commandName;
//     }
// }
// 
// Path: traction/src/main/java/traction/mvc/interfaces/IOnExecuteListener.java
// public interface IOnExecuteListener
// {
//     void onExecuted(CommandArgument arg);
// }
// 
// Path: Demo/src/main/java/ni3po42/android/tractiondemo/models/IUserInfo.java
// public interface IUserInfo
// {
//     public static class Gender
//     {
//         private static Gender male = new Gender("Male");
//         private static Gender female = new Gender("Female");
// 
//         public static Gender getMale()
//         { return male;}
// 
//         public static Gender getFemale()
//         { return female;}
// 
//         public static Gender getGender(String type)
//         {
//             if (type.toLowerCase().equals("male"))
//                 return getMale();
//             else
//                 return getFemale();
//         }
// 
//         private Gender(String t)
//         {
//             type = t;
//         }
// 
//         private String type;
//         @Override
//         public String toString()
//         {
//             return type;
//         }
// 
//         public String getType()
//         {
//             return type;
//         }
//     }
// 
//     List<Gender> getGenders();
// 
//     Gender getUserGender();
//     void setUserGender(Gender gender);
// 
//     String getFirstName();
//     void setFirstName(String firstName);
// 
//     String getLastName();
//     void setLastName(String lastName);
// 
//     Time getDateOfBirth();
//     void setDateOfBirth(Time dateOfBirth);
// 
//     Command getSave();
//     Command getCancel();
// }


import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.format.Time;
import traction.mvc.controllers.FragmentController;
import traction.mvc.implementations.CommandArgument;
import traction.mvc.interfaces.IOnExecuteListener;
import ni3po42.android.tractiondemo.R;
import ni3po42.android.tractiondemo.models.IUserInfo;
    public void onStart()
    {
        super.onStart();
        SharedPreferences preference = getActivity().getSharedPreferences(prefName, Context.MODE_PRIVATE);
        final IUserInfo userInfo = View.getScope();
        userInfo.getGenders().clear();
        userInfo.getGenders().add(IUserInfo.Gender.getMale());
        userInfo.getGenders().add(IUserInfo.Gender.getFemale());
        retrieveUserInfo(userInfo, preference);

        userInfo.getSave().setExecuteListener(new IOnExecuteListener() {
            @Override
            public void onExecuted(CommandArgument argument) {
                SharedPreferences preference = getActivity().getSharedPreferences(prefName, Context.MODE_PRIVATE);
                storeInPreference(userInfo, preference);
                getActivity().getFragmentManager().popBackStackImmediate();
            }
        });
        userInfo.getCancel().setExecuteListener(new IOnExecuteListener() {
            @Override
            public void onExecuted(CommandArgument argument) {
                getActivity().getFragmentManager().popBackStackImmediate();
            }
        });
    }

    public void retrieveUserInfo(IUserInfo userInfo, SharedPreferences preference)
    {
        userInfo.setFirstName(preference.getString("FirstName", null));
        userInfo.setLastName( preference.getString("LastName", null));
// Path: traction/src/main/java/traction/mvc/controllers/FragmentController.java
// public class FragmentController
// extends Fragment
// {
// 	/**
// 	 * Helper to implement Controller logic.
// 	 */
// 	protected final ControllerHelper View = new ControllerHelper(this);
// 
// 	@Override
// 	public void onCreate(Bundle savedInstanceState)
// 	{	
// 		super.onCreate(savedInstanceState);
// 		setRetainInstance(true);
// 	}
// 	
// 	@Override
// 	public View onCreateView(LayoutInflater notUsed, ViewGroup container, Bundle savedInstanceState) 
// 	{
// 		View v = View.inflateView(View.getContentView(), container, container != null);
//         IViewBinding vb = ViewFactory.getViewBinding(v);
//         if (vb != null) {
//             View.ensureMenuInflator(vb.getBindingInventory());
//         }
//         return v;
// 	}
// 	
// 	@Override
// 	public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
// 	{
//         View.onCreateOptionsMenu(menu);
// 	}
// 
// 	@Override
// 	public void onDestroyView() 
// 	{		
// 		super.onDestroyView();	
// 		ViewFactory.DetachContext(getView());
// 	}
// 
//     @Override
//     public void onAttach(Activity activity)
//     {
//         super.onAttach(activity);
//         View.registerFragmentToActivity(this, activity);
//     }
// 
//     @Override
//     public void onDetach()
//     {
//         super.onDetach();
//         View.unregisterFragmentFromActivity(this, getActivity());
//     }
// 
//     @Override
//     public void onStart()
//     {
//         super.onStart();
//         View.connectFragmentViewToParentView(this);
//     }
// }
// 
// Path: traction/src/main/java/traction/mvc/implementations/CommandArgument.java
// public class CommandArgument
// {
//     private String commandName;
//     private boolean eventCancelled;
//     private JSONObject tagProperties;
// 
//     public boolean isEventCancelled()
//     {
//         return eventCancelled;
//     }
// 
//     public void setEventCancelled(boolean isCancelled)
//     {
//         eventCancelled = isCancelled;
//     }
// 
//     public CommandArgument(String commandName)
//     {
//         this(commandName, null);
//     }
// 
//     public CommandArgument(String commandName, JSONObject tagProperties)
//     {
//         this.commandName = commandName;
//         this.eventCancelled = false;
//         this.tagProperties = tagProperties;
//     }
// 
//     public JSONObject getEventData()
//     {
//         return tagProperties;
//     }
// 
//     public String getCommandName()
//     {
//         return commandName;
//     }
// }
// 
// Path: traction/src/main/java/traction/mvc/interfaces/IOnExecuteListener.java
// public interface IOnExecuteListener
// {
//     void onExecuted(CommandArgument arg);
// }
// 
// Path: Demo/src/main/java/ni3po42/android/tractiondemo/models/IUserInfo.java
// public interface IUserInfo
// {
//     public static class Gender
//     {
//         private static Gender male = new Gender("Male");
//         private static Gender female = new Gender("Female");
// 
//         public static Gender getMale()
//         { return male;}
// 
//         public static Gender getFemale()
//         { return female;}
// 
//         public static Gender getGender(String type)
//         {
//             if (type.toLowerCase().equals("male"))
//                 return getMale();
//             else
//                 return getFemale();
//         }
// 
//         private Gender(String t)
//         {
//             type = t;
//         }
// 
//         private String type;
//         @Override
//         public String toString()
//         {
//             return type;
//         }
// 
//         public String getType()
//         {
//             return type;
//         }
//     }
// 
//     List<Gender> getGenders();
// 
//     Gender getUserGender();
//     void setUserGender(Gender gender);
// 
//     String getFirstName();
//     void setFirstName(String firstName);
// 
//     String getLastName();
//     void setLastName(String lastName);
// 
//     Time getDateOfBirth();
//     void setDateOfBirth(Time dateOfBirth);
// 
//     Command getSave();
//     Command getCancel();
// }


// Path: Demo/src/main/java/ni3po42/android/tractiondemo/controllers/SimpleFormController.java
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.format.Time;
import traction.mvc.controllers.FragmentController;
import traction.mvc.implementations.CommandArgument;
import traction.mvc.interfaces.IOnExecuteListener;
import ni3po42.android.tractiondemo.R;
import ni3po42.android.tractiondemo.models.IUserInfo;

    public void onStart()
    {
        super.onStart();
        SharedPreferences preference = getActivity().getSharedPreferences(prefName, Context.MODE_PRIVATE);
        final IUserInfo userInfo = View.getScope();
        userInfo.getGenders().clear();
        userInfo.getGenders().add(IUserInfo.Gender.getMale());
        userInfo.getGenders().add(IUserInfo.Gender.getFemale());
        retrieveUserInfo(userInfo, preference);

        userInfo.getSave().setExecuteListener(new IOnExecuteListener() {
            @Override
            public void onExecuted(CommandArgument argument) {
                SharedPreferences preference = getActivity().getSharedPreferences(prefName, Context.MODE_PRIVATE);
                storeInPreference(userInfo, preference);
                getActivity().getFragmentManager().popBackStackImmediate();
            }
        });
        userInfo.getCancel().setExecuteListener(new IOnExecuteListener() {
            @Override
            public void onExecuted(CommandArgument argument) {
                getActivity().getFragmentManager().popBackStackImmediate();
            }
        });
    }

    public void retrieveUserInfo(IUserInfo userInfo, SharedPreferences preference)
    {
        userInfo.setFirstName(preference.getString("FirstName", null));
        userInfo.setLastName( preference.getString("LastName", null));
        userInfo.setUserGender(IUserInfo.Gender.getGender(preference.getString("Gender", "Male")));