예제 #1
0
        private SData LoadEntityFromDisk(Type t)
        {
            JEntity entityAttr = AttrHelper.GetClassAttribute <JEntity>(t);

            if (entityAttr.DsType != typeof(JsonDs))
            {
                throw new InvalidOperationException("Not a json file stored entity");
            }

            //long tstart = DateTime.Now.Ticks;
            SData sdata = new SData()
            {
                DataType = t
            };
            Type   lt       = typeof(List <>);
            Type   listType = lt.MakeGenericType(t);
            object list     = null;

            string   filename = GetDataFilePathForType(t);
            FileInfo fileInfo = new FileInfo(filename);

            if (fileInfo.Exists)
            {
                list = JsonSerializeHelper.LoadForType(filename, listType);
            }
            else
            {
                list = Activator.CreateInstance(listType);
            }
            foreach (var x in (IList)list)
            {
                INotifyPropertyChanged notifier = x as INotifyPropertyChanged;
                if (notifier != null)
                {
                    notifier.PropertyChanged += Notifier_PropertyChanged;
                }
            }
            PropertyInfo pkProp = AttrHelper.GetProperty <JPrimaryKey>(t);

            if (pkProp != null)
            {
                foreach (var o in (IList)list)
                {
                    object pk = pkProp.GetValue(o);
                    try
                    {
                        sdata.PkCache.Add(pk, o);
                    }
                    catch (ArgumentException ex)
                    {
                        Log.ProcessDebug("Dublicate pk entity: " + t + " pk value:  " + pk + " Error text: " + ex);
                    }
                }
            }
            sdata.DataList = list;
            sdatas.Add(sdata);

            return(sdata);
        }
예제 #2
0
        protected ToolStripMenuItem CreateMainMenuItemForEntityType(ToolStripMenuItem parentItem, Type t)
        {
            JEntity           entityAttr = AttrHelper.GetClassAttribute <JEntity>(t);
            ToolStripMenuItem menuItem   = new ToolStripMenuItem();

            menuItem.Name   = "menuItem_" + t.FullName;
            menuItem.Text   = ModelHelper.GetEntityJDescriptionOrName(t);
            menuItem.Click += (s, em) =>
            {
                CreateList(t);
            };
            parentItem.DropDownItems.AddRange(new ToolStripItem[] {
                menuItem
            });
            return(menuItem);
        }
예제 #3
0
 ///////////////////////////
 ///  /// <summary>
 /// Save all data to file system
 /// </summary>
 public void SaveAllEntitiesData(bool allways)
 {
     foreach (var s in sdatas)
     {
         Type    entityType = s.DataType;
         JEntity entityAttr = AttrHelper.GetClassAttribute <JEntity>(entityType);
         if (s.Modified || allways)
         {
             SaveEntityData(s);
         }
     }
     foreach (var s in joinDatas)
     {
         if (s.Modified || allways)
         {
             SaveJoinEntityDataLocal(s);
         }
     }
 }
예제 #4
0
 public bool IsCustomSetting()
 {
     if (this.ValueType != null)
     {
         if (DictId != null)
         {
             return(true);
         }
         else if (ValueType != typeof(string))
         {
             JEntity entityAttr = AttrHelper.GetClassAttribute <JEntity>(ValueType);
             if (entityAttr != null)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
예제 #5
0
        protected ToolStripMenuItem CreateMainMenuItemForWindowType(ToolStripMenuItem parentItem, string name, Type t)
        {
            JEntity           entityAttr = AttrHelper.GetClassAttribute <JEntity>(t);
            ToolStripMenuItem menuItem   = new ToolStripMenuItem();

            menuItem.Name   = "menuItem_" + t.FullName;
            menuItem.Text   = name != null ? name : ModelHelper.GetEntityJDescriptionOrName(t);
            menuItem.Click += (s, em) =>
            {
                try
                {
                    AppManager.Instance.CreateContentAndProcessView(this, t, null);
                }
                catch (Exception ex)
                {
                    Log.ShowError(ex);
                }
            };
            parentItem.DropDownItems.AddRange(new ToolStripItem[] {
                menuItem
            });
            return(menuItem);
        }
예제 #6
0
        static protected bool IsShortTable(Type t)
        {
            JEntity entityAttr = AttrHelper.GetClassAttribute <JEntity>(t);

            return(entityAttr.ShortTable);
        }
예제 #7
0
        /// <summary>
        /// Saves all user settings
        /// </summary>
        public void SaveConfig()
        {
            foreach (var s in settings.Values)
            {
                if (s.Value != null && s.ValueType == null)
                {
                    s.ValueType = s.Value.GetType();
                }
                if (s.Value != null)
                {
                    if (s.ValueType != typeof(string))
                    {
                        JEntity entityAttr = AttrHelper.GetClassAttribute <JEntity>(s.ValueType);
                        if (entityAttr != null)
                        {
                            if (s.AllowMultiValues)
                            {
                                IList list   = (IList)s.Value;
                                IList values = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(s.ValueType));
                                foreach (var realObject in list)
                                {
                                    values.Add(AttrHelper.ReplaceObjectByPkOnlyObject(realObject));
                                }
                                s.Value = values;
                            }
                            else
                            {
                                s.Value = AttrHelper.ReplaceObjectByPkOnlyObject(s.Value);
                            }
                        }
                        else
                        {
                            TypeConverter converter = TypeDescriptor.GetConverter(s.ValueType);
                            if (converter != null)
                            {
                                s.Value = converter.ConvertToString(s.Value);
                            }
                        }
                    }
                }
            }

            string        filename = Path.Combine(ProfileConfigDir, settingsFileName);
            FileInfo      fileInfo = new FileInfo(filename);
            DirectoryInfo dir      = fileInfo.Directory;

            if (dir.Exists == false)
            {
                Directory.CreateDirectory(dir.FullName);
            }
            List <JSetting> settingsList = new List <JSetting>();

            foreach (var s in settings.Values)
            {
                if (!s.IsAttachedToComputer)
                {
                    settingsList.Add(s);
                }
            }
            JsonSerializeHelper.SaveToFile(settingsList, filename);
            //stage 2
            filename = Path.Combine(ComputerUserDir, settingsFileName);
            fileInfo = new FileInfo(filename);
            dir      = fileInfo.Directory;
            if (dir.Exists == false)
            {
                Directory.CreateDirectory(dir.FullName);
            }
            settingsList = new List <JSetting>();
            foreach (var s in settings.Values)
            {
                if (s.IsAttachedToComputer)
                {
                    settingsList.Add(s);
                }
            }
            File.WriteAllText(filename, JsonSerializeHelper.SaveToString(settingsList), Encoding.UTF8);//short
        }
예제 #8
0
        /// <summary>
        /// Loads all user settings.
        /// </summary>
        public void LoadConfig()
        {
            string        filename = Path.Combine(ProfileConfigDir, settingsFileName);
            FileInfo      fileInfo = new FileInfo(filename);
            DirectoryInfo dir      = fileInfo.Directory;

            if (dir.Exists == false)
            {
                Directory.CreateDirectory(dir.FullName);
            }
            if (fileInfo.Exists)
            {
                List <JSetting> settingsList = null;
                settingsList = JsonSerializeHelper.LoadFromFile <List <JSetting> >(filename);
                foreach (var s in settingsList)
                {
                    s.IsAttachedToComputer = false;
                    settings.Add(s.Name, s);
                }
            }

            //Properties.Settings.Default path
            //https://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx

            //stage 2
            if (ComputerUserDir != null)
            {
                filename = Path.Combine(ComputerUserDir, settingsFileName);
                fileInfo = new FileInfo(filename);
                dir      = fileInfo.Directory;
                if (dir.Exists == false)
                {
                    Directory.CreateDirectory(dir.FullName);
                }
                if (fileInfo.Exists)
                {
                    List <JSetting> settingsList = null;
                    settingsList = JsonSerializeHelper.LoadFromFile <List <JSetting> >(filename);
                    foreach (var s in settingsList)
                    {
                        s.IsAttachedToComputer = true;
                        settings[s.Name]       = s;
                    }
                }
            }

            foreach (JSetting setting in settings.Values)
            {
                if (setting.Value != null)
                {
                    Type type = setting.ValueType;
                    if (type != null)
                    {
                        if (type != typeof(string))
                        {
                            JEntity entityAttr = AttrHelper.GetClassAttribute <JEntity>(type);
                            if (entityAttr != null)
                            {
                                if (setting.AllowMultiValues)
                                {
                                    IList list   = (IList)setting.Value;
                                    IList values = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(type));
                                    foreach (var pkOnlyObject in list)
                                    {
                                        string str        = JsonSerializeHelper.SaveToString(pkOnlyObject);
                                        object realObject = JsonSerializeHelper.LoadFromString(str, type);
                                        values.Add(realObject);
                                    }
                                    setting.Value = values;
                                }
                                else
                                {
                                    setting.Value = JsonSerializeHelper.LoadFromString(JsonSerializeHelper.SaveToString(setting.Value), type);
                                }
                            }
                            else
                            {
                                TypeConverter converter = TypeDescriptor.GetConverter(type);
                                if (converter != null)//for system types (Font, etc.)
                                {
                                    setting.Value = converter.ConvertFromString((string)setting.Value);
                                }
                            }
                        }
                    }
                }
            }

            CreateProperties();
        }
예제 #9
0
        public void ComplateSettingsRelations()
        {
            foreach (var s in settings.Values)
            {
                if (s.Value != null)
                {
                    Type type = s.ValueType;
                    if (type != null)
                    {
                        JEntity entityAttr = AttrHelper.GetClassAttribute <JEntity>(type);
                        if (entityAttr != null)//todo list
                        {
                            PropertyInfo pkProp = AttrHelper.GetProperty <JPrimaryKey>(type);
                            if (pkProp == null)
                            {
                                throw new Exception("Primary key not found in referenced entity");
                            }

                            if (s.AllowMultiValues)
                            {
                                IList list   = (IList)s.Value;
                                IList values = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(type));
                                foreach (var val in list)
                                {
                                    object pvReal  = null;
                                    object pkValue = pkProp.GetValue(val);
                                    if (pkValue != null)
                                    {
                                        try
                                        {
                                            pvReal = Dm.Instance.Find(type, pkValue);
                                        }
                                        catch (Exception ex)
                                        {
                                            PropertyInfo nameProp = AttrHelper.GetProperty <JNameProperty>(type);
                                            if (nameProp != null)
                                            {
                                                nameProp.SetValue(val, Resources.Dm_ErrorFinding + ex);
                                            }
                                            pvReal = val;
                                        }
                                        if (pvReal != null)
                                        {
                                        }
                                        else
                                        {
                                            //may be removed
                                            PropertyInfo nameProp = AttrHelper.GetProperty <JNameProperty>(type);
                                            if (nameProp != null)
                                            {
                                                nameProp.SetValue(val, Resources.Dm_NotFound);
                                            }
                                            pvReal = val;
                                        }
                                    }
                                    values.Add(pvReal);
                                }
                                s.Value = values;
                            }
                            else
                            {
                                object pvReal  = null;
                                object pkValue = pkProp.GetValue(s.Value);
                                if (pkValue != null)
                                {
                                    try
                                    {
                                        pvReal = Dm.Instance.Find(type, pkValue);
                                    }
                                    catch (Exception ex)
                                    {
                                        PropertyInfo nameProp = AttrHelper.GetProperty <JNameProperty>(type);
                                        if (nameProp != null)
                                        {
                                            nameProp.SetValue(s.Value, Resources.Dm_ErrorFinding + ex);
                                        }
                                    }
                                    if (pvReal != null)
                                    {
                                        s.Value = pvReal;
                                    }
                                    else
                                    {
                                        //may be removed
                                        PropertyInfo nameProp = AttrHelper.GetProperty <JNameProperty>(type);
                                        if (nameProp != null)
                                        {
                                            nameProp.SetValue(s.Value, Resources.Dm_NotFound);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }