private DataTypeItem BuildDataTypeItem(DataTypeDefinition dataTypeDefinition)
        {
            var dataTypeItem = new DataTypeItem();
            dataTypeItem.Id = dataTypeDefinition.DataType.DataTypeDefinitionId;
            dataTypeItem.ControlTypeName = dataTypeDefinition.DataType.GetType().FullName;

            var node = new CMSNode(dataTypeItem.Id);
            dataTypeItem.DataTypeName = node.Text;

            dataTypeItem.PreValueItems = this.BuildPreValues(dataTypeDefinition);
            dataTypeItem.Type = this.DetermineType(dataTypeItem);
            dataTypeItem.ModelType = DetermineModelType(dataTypeItem);
            return dataTypeItem;
        }
        private DataTypeItem BuildDataTypeItem(DataTypeDefinition dataTypeDefinition)
        {
            try
            {
                var dataTypeItem = new DataTypeItem();
                dataTypeItem.Id = dataTypeDefinition.DataType.DataTypeDefinitionId;
                dataTypeItem.ControlTypeName = dataTypeDefinition.DataType.GetType().FullName;

                var node = new CMSNode(dataTypeItem.Id);
                dataTypeItem.DataTypeName = node.Text;

                dataTypeItem.PreValueItems = this.BuildPreValues(dataTypeDefinition);
                dataTypeItem.Type = this.DetermineType(dataTypeItem);
                dataTypeItem.ModelType = DetermineModelType(dataTypeItem);
                return dataTypeItem;

            }
            catch (Exception ex)
            {
                throw new DataTypeException(string.Format("Data type {0} '{1}' could not be loaded.", dataTypeDefinition.Id.ToString(), dataTypeDefinition.Text));
            }
        }
 private string XPathDropDownListDataType(DataTypeItem dataType)
 {
     if (dataType.PreValueItems != null && dataType.PreValueItems.Count > 0)
     {
         var preValue = dataType.PreValueItems[0];
         var json = new JavaScriptSerializer();
         var dictionary = json.Deserialize<Dictionary<string, object>>(preValue.Value);
         if (dictionary.ContainsKey("UseId") && dictionary["UseId"].ToString().ToUpper().Equals("TRUE")) return "int";
     }
     return "string";
 }
        private string DetermineType(DataTypeItem dataType)
        {
            switch (dataType.ControlTypeName)
            {
                case "umbraco.editorControls.colorpicker.ColorPickerDataType": return "string";
                case "umbraco.editorControls.folderbrowser.DataTypeFolderBrowser": return "string";
                case "umbraco.editorControls.imagecropper.DataType": return "string";
                case "umbraco.editorControls.label.DataTypeNoEdit": return "string";
                case "umbraco.editorControls.macrocontainer.DataType": return "string";
                case "umbraco.editorControls.memberpicker.MemberPickerDataType": return "string";
                case "umbraco.editorControls.relatedlinks.RelatedLinksDataType": return "string";
                case "umbraco.editorControls.tinyMCE3.tinyMCE3dataType": return "string";
                case "umbraco.editorControls.simpleEditor.simpleEditorDataType": return "string";
                case "umbraco.editorControls.tags.DataType": return "string";
                case "umbraco.editorControls.textfieldmultiple.textfieldMultipleDataType": return "string";
                case "umbraco.editorControls.textfield.TextFieldDataType": return "string";
                case "umbraco.editorControls.ultimatepicker.ultimatePickerDataType": return "string";
                case "umbraco.editorControls.uploadfield.DataTypeUploadField": return "string";
                case "umbraco.editorControls.XPathDropDownList.XPathDropDownListDataType": return XPathDropDownListDataType(dataType);

                case "umbraco.editorControls.yesno.YesNoDataType": return "bool";

                case "umbraco.editorControls.dropdownlist.DropdownListDataType": return "enum";
                case "umbraco.editorControls.dropdownlist.DropdownListKeysDataType": return "enum";
                case "umbraco.editorControls.checkboxlist.checkboxListDataType": return "List<enum>";
                case "umbraco.editorControls.radiobuttonlist.RadioButtonListDataType": return "enum";
                case "umbraco.editorControls.listbox.ListBoxDataType": return "List<enum>";

                case "umbraco.editorControls.numberfield.IDataTypenteger": return "int";
                case "umbraco.editorControls.pagepicker.PagePickerDataType": return "int";

                case "umbraco.editorControls.datefieldmultiple.DataTypeDatefieldMultiple": return "DateTime";
                case "umbraco.editorControls.datepicker.DateDataType": return "DateTime";

                case "umbraco.editorControls.mediapicker.MemberPickerDataType": return "MediaInfo";
                case "umbraco.editorControls.MultiNodeTreePicker.MNTP_DataType": return "MultiNodePicker";

                case "uComponents.DataTypes.MultiPickerRelations.MultiPickerRelationsDataType": return "string";
                case "uComponents.DataTypes.MultiUrlPicker.MultiUrlPickerDataType": return "MultiUrlPicker";
                case "uComponents.DataTypes.UrlPicker.UrlPickerDataType": return "UrlPicker";
                case "uComponents.DataTypes.Notes.NotesDataType": return "string";
                case "uComponents.DataTypes.DataTypeGrid.DataType": return "DataGrid";
                case "uComponents.DataTypes.MultipleDates.MD_DataType": return "string";
                case "uComponents.DataTypes.SqlCheckBoxList.SqlCheckBoxListDataType": return "SqlCheckBoxList";

                case "Our.Umbraco.GoogleMaps.DataTypes.SingleLocation.SingleLocationDataType": return "string";
            }
            return "string";
        }
 private string DetermineModelType(DataTypeItem dataType)
 {
     switch (dataType.Type)
     {
         case "enum": return Naming.PascalCase(Naming.IdentifierName(dataType.DataTypeName));
         case "List<enum>": return Naming.PascalCase(Naming.IdentifierName(dataType.DataTypeName));
         case "DataGrid": return Naming.PascalCase(Naming.IdentifierName(dataType.DataTypeName));
         case "MultiNodePicker": return "List<int>";
         case "MultiUrlPicker": return "List<Hyperlink>";
         case "UrlPicker": return "Hyperlink";
     }
     switch (dataType.ControlTypeName)
     {
         case "uComponents.DataTypes.MultipleDates.MD_DataType": return "List<DateTime>";
         case "umbraco.editorControls.XPathDropDownList.XPathDropDownListDataType": return this.XPathDropDownListDataType(dataType);
         case "uComponents.DataTypes.SqlCheckBoxList.SqlCheckBoxListDataType": return "List<string>";
     }
     return dataType.Type;
 }