public override void OnFinish(object sender, EventArgs e)
        {
            var fieldToken = GetBinding <FormFieldEntityToken>("BoundToken");

            var fieldName        = GetBinding <string>("FieldName");
            var label            = GetBinding <string>("Label");
            var placeholderText  = GetBinding <string>("PlaceholderText");
            var help             = GetBinding <string>("Help");
            var defaultValue     = GetBinding <string>("DefaultValue");
            var inputElementType = Type.GetType(GetBinding <string>("InputElementType"));
            var isReadOnly       = GetBinding <bool>("IsReadOnly");

            var definition = DynamicFormsFacade.GetFormByName(fieldToken.FormName);
            var field      = definition.Model.Fields.Get(fieldToken.FieldName);

            var isNewName = field.Name != fieldName;

            if (isNewName)
            {
                var oldNs = Localization.GenerateKey(fieldToken.FormName, field.Name);
                var newNs = Localization.GenerateKey(fieldToken.FormName, fieldName);

                LocalizationsFacade.RenameNamespace(oldNs, newNs, Localization.ResourceSet);

                if (RenderingLayoutFacade.HasCustomRenderingLayout(fieldToken.FormName))
                {
                    var layout = RenderingLayoutFacade.GetRenderingLayout(fieldToken.FormName);

                    var fieldElement = layout.Body.Descendants().SingleOrDefault(el => el.Name == Namespaces.Xhtml + "p" && el.Value.Trim() == "%" + field.Name + "%");
                    if (fieldElement != null)
                    {
                        fieldElement.Value = $"%{fieldName}%";
                    }

                    RenderingLayoutFacade.SaveRenderingLayout(fieldToken.FormName, layout);
                }
            }

            field.Name       = fieldName;
            field.IsReadOnly = isReadOnly;

            using (var writer = ResourceFacade.GetResourceWriter())
            {
                writer.AddResource(GetKey("Label"), (string)null);
                writer.AddResource(GetKey("PlaceholderText"), (string)null);
                writer.AddResource(GetKey("Help"), (string)null);

                var labelAttr = field.Attributes.OfType <FieldLabelAttribute>().SingleOrDefault();
                if (labelAttr != null)
                {
                    field.Attributes.Remove(labelAttr);
                }

                if (!String.IsNullOrEmpty(label))
                {
                    labelAttr = new FieldLabelAttribute(label);
                    field.Attributes.Add(labelAttr);

                    writer.AddResource(GetKey("Label"), label);
                }

                var placeholderAttr = field.Attributes.OfType <PlaceholderTextAttribute>().SingleOrDefault();
                if (placeholderAttr != null)
                {
                    field.Attributes.Remove(placeholderAttr);
                }

                if (!String.IsNullOrEmpty(placeholderText))
                {
                    placeholderAttr = new PlaceholderTextAttribute(placeholderText);
                    field.Attributes.Add(placeholderAttr);

                    writer.AddResource(GetKey("PlaceholderText"), placeholderText);
                }

                var helpAttribute = field.Attributes.OfType <FieldHelpAttribute>().FirstOrDefault();
                if (helpAttribute != null)
                {
                    field.Attributes.Remove(helpAttribute);
                }

                if (!String.IsNullOrEmpty(help))
                {
                    helpAttribute = new FieldHelpAttribute(help);
                    field.Attributes.Add(helpAttribute);

                    writer.AddResource(GetKey("Help"), help);
                }
            }

            definition.DefaultValues.Remove(field.Name);
            if (!String.IsNullOrEmpty(defaultValue))
            {
                definition.DefaultValues.Add(field.Name, XElement.Parse(defaultValue));
            }

            var inputTypeAttribute = field.Attributes.OfType <InputElementTypeAttribute>().FirstOrDefault();

            if (inputTypeAttribute != null)
            {
                field.Attributes.Remove(inputTypeAttribute);
            }

            inputTypeAttribute = (InputElementTypeAttribute)Activator.CreateInstance(inputElementType);
            field.Attributes.Add(inputTypeAttribute);

            field.EnsureValueType();

            SaveExtraSettings(field);

            DynamicFormsFacade.SaveForm(definition);

            if (isNewName)
            {
                fieldToken = new FormFieldEntityToken(definition.Model.Name, fieldName);

                UpdateBinding("BoundToken", fieldToken);
                SetSaveStatus(true, fieldToken);
            }
            else
            {
                SetSaveStatus(true);
            }

            CreateParentTreeRefresher().PostRefreshMessages(EntityToken);
        }
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        FieldLabelAttribute fLabel = (FieldLabelAttribute)attribute;

        EditorGUI.PropertyField(position, property, new GUIContent(fLabel.text));
    }