public string Execute(
            TransitionContext context)
        {
            MvcRequest request = context.Request;
            string retEvent = Events.Error;

            try {
            ActionContract.Requires<ApplicationException>(!string.IsNullOrEmpty(AddressItemNameOut),
                    "No item name given for the address in the AddressItemNameOut attribute.");

            PersistedAddress address = new PersistedAddress();

            request.Items[AddressItemNameOut] = address;

            retEvent = Events.Ok;
            } catch (Exception ex) {
            ILog logger = LogManager.GetCurrentClassLogger();
            logger.Error("Error occured in Execute.", ex);
            }

            return retEvent;
        }
        public static void Populate(
            MvcRequest request,
            PersistedAddress address)
        {
            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.ID])) {
            long id;
            if (long.TryParse(request[ParameterNames.Address.Field.ID], out id)) {
                address.Id = id;
            }
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.LINE1])) {
            address.Line1 = request[ParameterNames.Address.Field.LINE1];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.LINE2])) {
            address.Line2 = request[ParameterNames.Address.Field.LINE2];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.LINE3])) {
            address.Line3 = request[ParameterNames.Address.Field.LINE3];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.CITY])) {
            address.CityName = request[ParameterNames.Address.Field.CITY];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.STATE])) {
            address.StateName = request[ParameterNames.Address.Field.STATE];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.POSTALCODE])) {
            address.PostalCodeName = request[ParameterNames.Address.Field.POSTALCODE];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.COUNTY])) {
            address.County = request[ParameterNames.Address.Field.COUNTY];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.COUNTRY])) {
            address.CountryName = request[ParameterNames.Address.Field.COUNTRY];
            }

            address.State = null;
            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.STATE_ID]))
            {
            int stateId;
            if(int.TryParse(request[ParameterNames.Address.Field.STATE_ID], out stateId))
            {
                address.State = States.Instance[stateId];
                address.StateName = address.State.Code;
            }
            }
            address.Country = null;
            if (!string.IsNullOrEmpty(request[ParameterNames.Address.Field.COUNTRY_ID]))
            {
            int countryId;
            if (int.TryParse(request[ParameterNames.Address.Field.COUNTRY_ID], out countryId))
            {
                address.Country = Countries.Instance[countryId];
                address.CountryName = address.Country.Code;
            }
            }

            // PersistedAddress Address Request Parameters
            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.ID])) {
            long id;
            if (long.TryParse(request[ParameterNames.PersistedAddress.Field.ID], out id)) {
                address.Id = id;
            }
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.LINE1])) {
            address.Line1 = request[ParameterNames.PersistedAddress.Field.LINE1];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.LINE2])) {
            address.Line2 = request[ParameterNames.PersistedAddress.Field.LINE2];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.LINE3])) {
            address.Line3 = request[ParameterNames.PersistedAddress.Field.LINE3];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.CITY])) {
            address.CityName = request[ParameterNames.PersistedAddress.Field.CITY];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.STATE])) {
            address.StateName = request[ParameterNames.PersistedAddress.Field.STATE];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.POSTALCODE])) {
            address.PostalCodeName = request[ParameterNames.PersistedAddress.Field.POSTALCODE];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.COUNTY])) {
            address.County = request[ParameterNames.PersistedAddress.Field.COUNTY];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.COUNTRY])) {
            address.CountryName = request[ParameterNames.PersistedAddress.Field.COUNTRY];
            }

            if (!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.STATE_ID]))
            {
            int stateId;
            if (int.TryParse(request[ParameterNames.PersistedAddress.Field.STATE_ID], out stateId))
            {
                address.State = States.Instance[stateId];
                address.StateName = address.State.ShortName;
            }
            }

            if(!string.IsNullOrEmpty(request[ParameterNames.PersistedAddress.Field.COUNTRY_ID]))
            {
            int countryId;
            if(int.TryParse(request[ParameterNames.PersistedAddress.Field.COUNTRY_ID], out countryId))
            {
                address.Country = Countries.Instance[countryId];
                address.CountryName = address.Country.ShortName;
            }
            }
        }