コード例 #1
0
ファイル: SensorBLL.cs プロジェクト: onlyB/GeoViewer
 public Sensor GetByID(int id)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         return entityConntext.Sensors.SingleOrDefault(ent => ent.SensorID == id);
     }
 }
コード例 #2
0
ファイル: ProjectBLL.cs プロジェクト: onlyB/GeoViewer
 public Project GetByID(int id)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         return entityConntext.Projects.SingleOrDefault(ent => ent.ProjectID == id);
     }
 }
コード例 #3
0
ファイル: ChartViewBLL.cs プロジェクト: onlyB/GeoViewer
 public Group GetGroupByID(int id)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         return entityConntext.Groups.SingleOrDefault(ent => ent.GroupID == id);
     }
 }
コード例 #4
0
ファイル: SecurityBLL.cs プロジェクト: onlyB/GeoViewer
 public bool IsUserInRole(string username, string role)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         return entityConntext.Accounts.Any(ent => ent.Username == username && ent.Roles.Any(r => r.RoleName == role));
     }
 }
コード例 #5
0
ファイル: PictureViewBLL.cs プロジェクト: onlyB/GeoViewer
        /// <summary>
        /// Check the sensor corressponding to picture view object has running alarm?  
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public bool CheckAlarmRunning(Models.Object obj)
        {
            using (var entityContext = new GeoViewerEntities())
            {
                if (obj.Type == OBJECT_TYPE_IMAGE) return false;
                if (obj.Type != OBJECT_TYPE_GROUP_INDICATOR)
                {
                    // Parameters contain id of sensor which will be displayed
                    int sensorID = obj.Parameters.ToInt32TryParse();
                    var sensor = entityContext.Sensors.SingleOrDefault(ent => ent.SensorID == sensorID);
                    if (sensor == null) return false;
                    return sensor.AlarmEnabled && sensor.AlarmFlag;
                }
                // Get picture view corressponding to this object (type OBJECT_TYPE_GROUP_INDICATOR)
                int pictureID = obj.Parameters.ToInt32TryParse();
                var pictureView = entityContext.PictureViews.SingleOrDefault(ent => ent.PictureViewID == pictureID);
                if (pictureView != null)
                {
                    foreach (var viewObject in pictureView.Objects)
                    {
                        // Fix circle recursive
                        if (viewObject.ObjectID == obj.ObjectID) return false;

                        if (CheckAlarmRunning(viewObject))
                        {
                            return true;
                        }
                    }
                }
                return false;
            }
        }
コード例 #6
0
ファイル: LoggerBLL.cs プロジェクト: onlyB/GeoViewer
 public bool Insert(Logger obj)
 {
     bool result = false;
     using (var entityConntext = new GeoViewerEntities())
     {
         SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_DATA_MANAGE);
         Validate(obj);
         obj.ProjectID = AppContext.Current.OpenProject.ProjectID;
         obj.CreatedDate = obj.LastEditedDate = DateTime.Now;
         obj.CreatedUser = obj.LastEditedUser = AppContext.Current.LogedInUser.Username;
         entityConntext.Loggers.AddObject(obj);
         result = entityConntext.SaveChanges() > 0;
     }
     // Auto Add Sensor
     if (result)
     {
         DataReaderBLL.Current.ReadHeader(obj.LoggerID);
     }
     //foreach (var sensor in obj.Sensors)
     //{
     //    obj.CreatedDate = obj.LastEditedDate = DateTime.Now;
     //    obj.CreatedUser = obj.LastEditedUser = AppContext.Current.LogedInUser.Username;
     //}
     return result;
 }
コード例 #7
0
ファイル: MainForm.cs プロジェクト: onlyB/GeoViewer
        public MainForm()
        {
            // Check connection to database
            GeoViewerEntities context = null;
            try
            {
                context = new GeoViewerEntities();
                var list = context.Accounts.Count();
            }
            catch (Exception)
            {
                if (context != null) context.Dispose();
                if (new SetupDatabase().ShowDialog() != DialogResult.OK)
                {
                    Environment.Exit(0);
                }
            }
            // Check licence
            if (!LicenceBLL.ValidateKey())
            {
                if (new AddLicenceForm().ShowDialog() != DialogResult.OK)
                {
                    Environment.Exit(0);
                }
            }

            connectedToDatabase = true;
            MainApplicationForm = this;
            InitializeComponent();
            // Check connection to database

            // Run background process
            ReaderThreadManager.Current.InitThreads();
            ReaderThreadManager.Current.StartThreads();
        }
コード例 #8
0
ファイル: AccountBLL.cs プロジェクト: onlyB/GeoViewer
        /// <summary>
        /// LogedIn user changes his password
        /// </summary>
        /// <param name="oldPassword"></param>
        /// <param name="newPassword"></param>
        /// <returns></returns>
        public bool ChangePassword(string oldPassword, string newPassword)
        {
            using (var entityConntext = new GeoViewerEntities())
            {
                if (AppContext.Current.LogedInUser.Password != oldPassword.GetMd5Hash())
                    throw new Exception(Properties.Resources.Error_OldPasswordNotMatch);

                AppContext.Current.LogedInUser.Password = newPassword.GetMd5Hash();

                entityConntext.AttachUpdatedObject(AppContext.Current.LogedInUser);
                return entityConntext.SaveChanges() > 0;
            }
        }
コード例 #9
0
ファイル: ChartViewBLL.cs プロジェクト: onlyB/GeoViewer
 //public bool DeleteGroup(Group obj)
 //{
 //    using (var entityConntext = new GeoViewerEntities())
 //    {
 //        SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_VIEWS_MANAGE);
 //        entityConntext.Groups.DeleteObject(obj);
 //        return entityConntext.SaveChanges() > 0;
 //    }
 //}
 public bool DeleteGroup(int id)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         var obj = entityConntext.Groups.SingleOrDefault(ent => ent.GroupID == id);
         if (obj != null)
         {
             entityConntext.Groups.DeleteObject(obj);
             return entityConntext.SaveChanges() > 0;
         }
         return false;
     }
 }
コード例 #10
0
ファイル: ChartViewBLL.cs プロジェクト: onlyB/GeoViewer
 public bool InsertGroup(Group obj)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_VIEWS_MANAGE);
         ValidateGroup(obj);
         obj.ProjectID = AppContext.Current.OpenProject.ProjectID;
         obj.CreatedDate = obj.LastEditedDate = DateTime.Now;
         obj.CreatedUser = obj.LastEditedUser = AppContext.Current.LogedInUser.Username;
         entityConntext.Groups.AddObject(obj);
         return entityConntext.SaveChanges() > 0;
     }
 }
コード例 #11
0
ファイル: AccountBLL.cs プロジェクト: onlyB/GeoViewer
 /// <summary>
 /// Admin change password of an user
 /// </summary>
 /// <param name="user"></param>
 /// <param name="newPassword"></param>
 /// <returns></returns>
 public bool ChangePassword(Account user, string newPassword)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         SecurityBLL.Current.CheckPermissionThrowException(new string[]
                                                               {
                                                                   SecurityBLL.ROLE_ACCOUNT_EDIT,
                                                                   SecurityBLL.ROLE_ACCOUNT_MANAGE
                                                               });
         user.Password = newPassword.GetMd5Hash();
         entityConntext.AttachUpdatedObject(user);
         return entityConntext.SaveChanges() > 0;
     }
 }
コード例 #12
0
ファイル: LoggerBLL.cs プロジェクト: onlyB/GeoViewer
 //public bool Delete(Logger obj)
 //{
 //    SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_DATA_MANAGE);
 //    entityConntext.Loggers.DeleteObject(obj);
 //    DataReaderBLL.Current.RemoveThread(obj);
 //    bool result = entityConntext.SaveChanges() > 0;
 //    return result;
 //}
 public bool Delete(int id)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         var obj = entityConntext.Loggers.SingleOrDefault(ent => ent.LoggerID == id);
         if (obj != null)
         {
             ReaderThreadManager.Current.RemoveThread(obj);
             entityConntext.Loggers.DeleteObject(obj);
             return entityConntext.SaveChanges() > 0;
         }
         return false;
     }
 }
コード例 #13
0
ファイル: TextViewBLL.cs プロジェクト: onlyB/GeoViewer
        public DataTable BindToDataTable(List<Sensor> sensors, bool rawValue = true, DateTime? startDate = null, DateTime? endDate = null)
        {
            // fix datetime
            if (startDate != null)
            {
                startDate = new DateTime(startDate.Value.Year, startDate.Value.Month, startDate.Value.Day, 0, 0, 0);
            }
            if (endDate != null)
            {
                endDate = new DateTime(endDate.Value.Year, endDate.Value.Month, endDate.Value.Day, 23, 59, 59);
            }

            using (var entityContext = new GeoViewerEntities())
            {

                DataTable table = new DataTable();
                if (sensors == null) return table;
                var col = table.Columns.Add("MeaTime", typeof(DateTime));
                table.PrimaryKey = new DataColumn[] { col };

                foreach (var sensor in sensors)
                {
                    table.Columns.Add(GetColumnName(sensor), typeof(string));
                }
                foreach (var sensor in sensors)
                {
                    foreach (var value in entityContext.SensorValues.Where(ent => ent.SensorID == sensor.SensorID &&
                                                                    (startDate == null || ent.MeaTime >= startDate) &&
                                                                    (endDate == null || ent.MeaTime <= endDate)
                        ).ToList())
                    {
                        var row = table.Rows.Find(value.MeaTime);
                        if (row == null)
                        {
                            row = table.NewRow();
                            row["MeaTime"] = value.MeaTime;
                            row[GetColumnName(sensor)] = rawValue ? value.RawValue : value.CalcValue;
                            table.Rows.Add(row);
                        }
                        else
                        {
                            row[GetColumnName(sensor)] = rawValue ? value.RawValue : value.CalcValue;
                        }
                    }
                }
                return table;
            }
        }
コード例 #14
0
ファイル: BackupRestoreBLL.cs プロジェクト: onlyB/GeoViewer
        /// <summary>
        /// Back up to file
        /// </summary>
        /// <param name="folderPath">folder will contain backup file</param>
        /// <returns></returns>
        public string BackupToFile(string folderPath)
        {
            using (var entityConntext = new GeoViewerEntities())
            {
                SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_DATA_MANAGE);
                // Make backup folder name
                string backupFolder = folderPath + @"\GeoViewer_" + DateTime.Now.ToString("ddMMyyyy-hhmm") + "_" +
                                      GeneralUtils.GenerateRandomString(4);
                // Create temp folder
                Directory.CreateDirectory(backupFolder);

                // Copy files data
                foreach (var obj in entityConntext.Loggers)
                {
                    // Copy data files
                    FileInfo file = new FileInfo(obj.DataPath);
                    if (file.Exists)
                    {
                        File.Copy(obj.DataPath, backupFolder + @"\" + obj.LoggerID + file.Extension, true);
                    }
                    else
                    {
                        CopyFolder(obj.DataPath, backupFolder + @"\" + obj.LoggerID);
                    }
                }
                // Back up database
                entityConntext.ExecuteStoreCommand(
                    "backup database " + databaseName + "  to disk = '" + backupFolder + @"\database.bak'",
                    null);

                // Copy Pictures folder
                CopyFolder("Pictures", backupFolder + @"\Pictures");

                // Zip to file
                ZipFile zip = new ZipFile();
                zip.AddDirectory(backupFolder);
                zip.Save(backupFolder + ".zip");

                // Delete file after zipped
                DeleteFolder(backupFolder);

                return backupFolder + ".zip";
            }
        }
コード例 #15
0
ファイル: ProjectBLL.cs プロジェクト: onlyB/GeoViewer
 //public bool Delete(Project obj)
 //{
 //    SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_DATA_MANAGE);
 //    // Delete all groups in this project
 //    foreach (var group in obj.Groups.ToList())
 //    {
 //        entityConntext.Groups.DeleteObject(group);
 //    }
 //    entityConntext.Projects.DeleteObject(obj);
 //    bool result = entityConntext.SaveChanges() > 0;
 //    if (result && AppContext.Current.OpenProject.ProjectID == obj.ProjectID)
 //    {
 //        CloseProject();
 //    }
 //    return result;
 //}
 public bool Delete(int id)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         var obj = entityConntext.Projects.SingleOrDefault(ent => ent.ProjectID == id);
         if (obj != null)
         {
             // Delete all groups in this project
             foreach (var group in obj.Groups.ToList())
             {
                 entityConntext.Groups.DeleteObject(group);
             }
             entityConntext.Projects.DeleteObject(obj);
             bool result = entityConntext.SaveChanges() > 0;
             if (result && AppContext.Current.OpenProject.ProjectID == obj.ProjectID)
             {
                 CloseProject();
             }
             return result;
         }
         return false;
     }
 }
コード例 #16
0
ファイル: AppContext.cs プロジェクト: onlyB/GeoViewer
 public AppContext()
 {
     _entityContext = new GeoViewerEntities();
 }
コード例 #17
0
ファイル: AlarmBLL.cs プロジェクト: onlyB/GeoViewer
 public bool Insert(AlarmLog obj)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         Validate(obj);
         if (AppContext.Current.OpenProject != null) obj.ProjectID = AppContext.Current.OpenProject.ProjectID;
         obj.IsEnded = false;
         entityConntext.AlarmLogs.AddObject(obj);
         return entityConntext.SaveChanges() > 0;
     }
 }
コード例 #18
0
ファイル: AlarmBLL.cs プロジェクト: onlyB/GeoViewer
 public DateTime? GetLastTime()
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         var last = entityConntext.AlarmLogs.OrderByDescending(ent => ent.StartAlarmDatetime).FirstOrDefault();
         if (last != null)
             return last.StartAlarmDatetime;
         return null;
     }
 }
コード例 #19
0
ファイル: AlarmBLL.cs プロジェクト: onlyB/GeoViewer
 public AlarmLog GetByID(long id)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         return entityConntext.AlarmLogs.SingleOrDefault(ent => ent.AlarmLogID == id);
     }
 }
コード例 #20
0
ファイル: AlarmBLL.cs プロジェクト: onlyB/GeoViewer
        /// <summary>
        /// Get list of alarm logs by conditions, pass parameters null for select all (no condition)
        /// </summary>
        /// <param name="sensor">only select alarm logs for this sensor</param>
        /// <param name="startDate">select alarm logs from start date</param>
        /// <param name="endDate">select alarm logs to end date</param>
        /// <param name="isEnded">select alarm logs which marked IsEnded = true or fasle</param>
        /// <param name="start">started record</param>
        /// <param name="limit">number of record will return</param>
        /// <returns></returns>
        public List<AlarmLog> GetByConditions(Sensor sensor = null, DateTime? startDate = null, DateTime? endDate = null, bool? isEnded = null, int start = -1, int limit = -1)
        {
            using (var entityConntext = new GeoViewerEntities())
            {
                int? sensorID = sensor == null ? null : (int?)sensor.SensorID;

                var result = entityConntext.AlarmLogs.Where(ent =>
                                                            (sensorID == null || ent.SensorID == sensorID) &&
                                                            (startDate == null || ent.StartAlarmDatetime >= startDate) &&
                                                            (endDate == null || ent.StartAlarmDatetime <= endDate) &&
                                                            (isEnded == null || ent.IsEnded == isEnded)
                    ).OrderByDescending(ent => ent.StartAlarmDatetime).ThenByDescending(ent => ent.AlarmLogID);
                if (start >= 0 && limit > 0)
                {
                    return result.Skip(start).Take(limit).ToList();
                }
                return result.ToList();
            }
        }
コード例 #21
0
ファイル: AlarmBLL.cs プロジェクト: onlyB/GeoViewer
        public bool Delete(long[] ids)
        {
            using (var entityConntext = new GeoViewerEntities())
            {
                //SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_ALARM_MANAGE);
                foreach (var id in ids)
                {
                    var obj = entityConntext.AlarmLogs.SingleOrDefault(ent => ent.AlarmLogID == id);
                    if (obj != null)
                        entityConntext.AlarmLogs.DeleteObject(obj);
                }

                return entityConntext.SaveChanges() > 0;
            }
        }
コード例 #22
0
ファイル: BackupRestoreBLL.cs プロジェクト: onlyB/GeoViewer
        /// <summary>
        /// Restore from file
        /// </summary>
        /// <param name="filePath">Backup file to restore</param>
        public void RestoreFromFile(string filePath)
        {
            using (var entityConntext = new GeoViewerEntities())
            {
                SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_DATA_MANAGE);
                // Check the file exist
                FileInfo fileInfo = new FileInfo(filePath);
                if (!fileInfo.Exists) throw new Exception(Resources.Error_BackupFileNotExist);

                // First extract the backup zip file
                string folder = fileInfo.FullName.Substring(0, fileInfo.FullName.LastIndexOf("."));
                if (Directory.Exists(folder)) DeleteFolder(folder);
                ZipFile zip = ZipFile.Read(filePath);
                zip.ExtractAll(folder);
                Console.WriteLine("Extract temp file to folder " + folder);

                // Restore the database
                string databasePath = folder + @"\database.bak";
                if (!File.Exists(databasePath)) throw new Exception(Resources.Error_DatabaseNotExist);
                entityConntext.ExecuteStoreCommand("use master restore database " + databaseName + "  from disk = '" +
                                                   databasePath + "'");
                Console.WriteLine("Restore database ok!");
                // Refresh data
                //AppContext.Current.RefreshEntityContext();
                AccountBLL.Current.Logout();
                AppContext.Current.OpenProject = null;

                // Overwrite data files
                foreach (var obj in entityConntext.Loggers)
                {
                    if (!obj.DataPath.Contains("."))
                    {
                        // Copy folder
                        if (Directory.Exists(folder + @"\" + obj.LoggerID))
                            CopyFolder(folder + @"\" + obj.LoggerID, obj.DataPath);
                        Console.WriteLine("Copy folder to " + obj.DataPath);
                    }
                    else
                    {
                        // Copy file
                        string sourceFile = folder + @"\" + obj.LoggerID +
                                            obj.DataPath.Substring(obj.DataPath.LastIndexOf("."));
                        if (File.Exists(sourceFile))
                        {
                            File.Copy(sourceFile, obj.DataPath, true);
                            Console.WriteLine("Copy file to " + obj.DataPath);
                        }
                    }

                }
                // Overwrite picture
                CopyFolder(folder + @"\Pictures", "Pictures");

                // Delete temp file and folder
                DeleteFolder(folder);
                Console.WriteLine("Delete folder " + folder);
            }
        }
コード例 #23
0
ファイル: DataReaderBLL.cs プロジェクト: onlyB/GeoViewer
        /// <summary>
        /// Read data from file with option onlyNewData and calculateValue
        /// </summary>
        /// <param name="logger"></param>
        /// <param name="dataPath"></param>
        /// <param name="onlyNewData"></param>
        /// <param name="calculateValue"></param>
        /// <param name="refreshEntityContext"></param>
        public void ReadData(Logger logger, string dataPath, bool onlyNewData, bool calculateValue, ReaderProccess readerProccess)
        {
            try
            {
                Console.WriteLine("Thread[" + Thread.CurrentThread.ManagedThreadId + "]: Start read data file " + dataPath);
                ReaderProccess fileReaderProccess;
                if (readerProccess.FileReaderProccesses == null)
                {
                    fileReaderProccess = readerProccess;
                }
                else
                {
                    fileReaderProccess = new ReaderProccess();
                    fileReaderProccess.TotalRecord = FileUtils.CountTotalLines(dataPath);
                    readerProccess.FileReaderProccesses.Add(fileReaderProccess);
                }
                fileReaderProccess.CurrentFile = dataPath;

                bool readFolder = !logger.DataPath.Equals(dataPath);

                var file = new FileInfo(dataPath);

                // Only read if file is modified
                if (onlyNewData)
                {
                    if (readFolder)
                    {
                        if (logger.LastModifyDatetime >= file.LastWriteTime && logger.Meta.Contains(file.Name)) return;
                    }
                    else
                    {
                        if (logger.LastModifyDatetime >= file.LastWriteTime || logger.FileSize == file.Length) return;
                    }
                }

                var streamReader = new StreamReader(dataPath, Encoding.UTF8);
                var spiliter = new[] { logger.Delimiter };

                // read meta line
                string lineData = streamReader.ReadLine();
                fileReaderProccess.ReadRecord++;

                if (String.IsNullOrEmpty(lineData))
                {
                    Console.WriteLine("File Empty!");
                    return;
                }
                // check type of data file
                int type = 0;
                string[] firstlineCells = lineData.Split(spiliter, StringSplitOptions.None);
                if (firstlineCells[0].ToInt32TryParse() > 0 && firstlineCells[1].ToInt32TryParse() > 0)
                {
                    type = 1;
                }

                if (type == 0)
                {
                    // Ignore 4 first lines
                    for (int i = 0; i < 4; i++)
                    {
                        lineData = streamReader.ReadLine();
                        fileReaderProccess.ReadRecord++;
                    }
                }

                // Begin to read data
                var entityConntext = new GeoViewerEntities();
                var sensors = entityConntext.Sensors.Where(ent => ent.LoggerID == logger.LoggerID).OrderBy(ent => ent.ColumnIndex).ToList();
                int line = 0;
                do
                {
                    if (!string.IsNullOrEmpty(lineData.Trim()))
                    {
                        string[] cells = lineData.Split(spiliter, StringSplitOptions.None);

                        var meaTime = type == 0
                                          ? Convert.ToDateTime(CleanValue(cells[0]))
                                          : new DateTime(cells[1].ToInt32TryParse(), 1, 1).AddDays(
                                              cells[2].ToInt32TryParse()).AddMinutes(
                                                  (int)(cells[3].ToInt32TryParse() * 60 / 100));

                        // Only read new record (by time)
                        if (!(onlyNewData && !readFolder && meaTime >= logger.FirstLogDatetime &&
                            meaTime <= logger.LastLogDatetime))
                        {
                            var valuesNeedCalc = new List<SensorValue>();
                            foreach (var sensor in sensors)
                            {
                                if (cells.Length > sensor.ColumnIndex)
                                {
                                    // Check Value exist
                                    //var sensorValue = sensor.SensorValues.SingleOrDefault(ent => ent.MeaTime == meaTime);
                                    var sensorValue = entityConntext.SensorValues.SingleOrDefault(ent => ent.SensorID == sensor.SensorID && ent.MeaTime == meaTime);
                                    if (sensorValue == null)
                                    {
                                        sensorValue = new SensorValue();
                                        sensorValue.SensorID = sensor.SensorID;
                                        sensorValue.MeaTime = meaTime;
                                        sensor.SensorValues.Add(sensorValue);
                                    }
                                    sensorValue.RawValue = CleanValue(cells[sensor.ColumnIndex]).ToDecimalTryParse();
                                    valuesNeedCalc.Add(sensorValue);
                                }
                            }
                            // Calc Value & Alarm Logger
                            if (calculateValue)
                            {
                                foreach (var sensorValue in valuesNeedCalc)
                                {
                                    CalculationBLL.Current.Calculating(sensorValue, true);
                                }
                            }
                        }
                        line++;
                        if (line % 50 == 0)
                        {
                            entityConntext.SaveChanges();
                            entityConntext = new GeoViewerEntities();
                            sensors = entityConntext.Sensors.Where(ent => ent.LoggerID == logger.LoggerID).OrderBy(ent => ent.ColumnIndex).ToList();
                            Console.WriteLine("Thread[" + Thread.CurrentThread.ManagedThreadId + "]: Read success " + line + " lines in " + dataPath);
                        }
                    }

                    // go to nextline
                    lineData = streamReader.ReadLine();
                    fileReaderProccess.ReadRecord++;

                } while ((lineData != null));

                streamReader.Close();
                if (fileReaderProccess.ReadRecord > 0)
                {
                    fileReaderProccess.ReadRecord--;
                }

                if (line > 0 && line % 50 != 0)
                {
                    entityConntext.SaveChanges();
                    Console.WriteLine("Thread[" + Thread.CurrentThread.ManagedThreadId + "]: Read success " + line + " lines in " + dataPath);
                }
                Console.WriteLine("Thread[" + Thread.CurrentThread.ManagedThreadId + "]: End read data from " + dataPath);

                if (readerProccess.FileReaderProccesses != null)
                {
                    readerProccess.ReadRecord += fileReaderProccess.ReadRecord;
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message);
            }
        }
コード例 #24
0
ファイル: PictureViewBLL.cs プロジェクト: onlyB/GeoViewer
 public bool InsertObject(Models.Object obj)
 {
     bool result = false;
     using (var entityConntext = new GeoViewerEntities())
     {
         SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_VIEWS_MANAGE);
         ValidateObject(obj);
         obj.CreatedDate = obj.LastEditedDate = DateTime.Now;
         obj.CreatedUser = obj.LastEditedUser = AppContext.Current.LogedInUser.Username;
         entityConntext.Objects.AddObject(obj);
         result = entityConntext.SaveChanges() > 0;
     }
     if (obj.Type == OBJECT_TYPE_IMAGE && obj.ObjectID > 0)
     {
         string imagePath = PictureViewBLL.Current.CopyImageFile(obj.Parameters, obj.ObjectID);
         obj.Parameters = imagePath;
         UpdateObject(obj);
     }
     return result;
 }
コード例 #25
0
ファイル: DataReaderBLL.cs プロジェクト: onlyB/GeoViewer
 /// <summary>
 /// Find all loggers which set AutomaticReadData = true and ReadData for it (only new data,calculate value)
 /// </summary>
 public void ReadData()
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         foreach (var logger in entityConntext.Loggers.Where(ent => ent.AutomaticReadData).ToList())
         {
             int totalRecords;
             int readRecords;
             string currentFile;
             ReadData(logger.LoggerID, true, true, new ReaderProccess());
         }
     }
 }
コード例 #26
0
ファイル: DataReaderBLL.cs プロジェクト: onlyB/GeoViewer
        /// <summary>
        /// Read header, automatic add sensors' information to database
        /// </summary>
        /// <param name="logger"></param>
        public void ReadHeader(int loggerID)
        {
            using (var entityConntext = new GeoViewerEntities())
            {
                Logger logger = entityConntext.Loggers.SingleOrDefault(ent => ent.LoggerID == loggerID);
                if (logger == null) return;
                bool readFolder = !File.Exists(logger.DataPath);
                StreamReader streamReader;
                if (readFolder)
                {
                    DirectoryInfo directoryInfo = new DirectoryInfo(logger.DataPath);
                    if (!directoryInfo.Exists) throw new Exception(Properties.Resources.Error_Data_FileNotFound);
                    var files = directoryInfo.GetFiles();
                    if (files.Length == 0) throw new Exception(Properties.Resources.Error_Data_FileNotFound);
                    streamReader = new StreamReader(files[0].FullName, Encoding.UTF8);
                }
                else
                {
                    streamReader = new StreamReader(logger.DataPath, Encoding.UTF8);
                }

                var spiliter = new string[] { logger.Delimiter };
                // read meta line
                string firstline = streamReader.ReadLine();
                // check type of data file
                int type = 0;
                string[] cells = firstline.Split(spiliter, StringSplitOptions.None);
                if (cells[0].ToInt32TryParse() > 0 && cells[1].ToInt32TryParse() > 0)
                {
                    type = 1;
                }
                if (type == 0)
                {
                    logger.Meta = firstline;
                    // read header line
                    string header = streamReader.ReadLine();
                    // read after header line
                    string afterHeader = streamReader.ReadLine();
                    // read Units line
                    string units = streamReader.ReadLine();
                    string[] sensorNames = header.Split(spiliter, StringSplitOptions.RemoveEmptyEntries);
                    string[] sensorUnits = units.Split(spiliter, StringSplitOptions.RemoveEmptyEntries);
                    // Two colums for Timestamp and record number
                    for (int i = 2; i < sensorNames.Length; i++)
                    {
                        var sensor = new Sensor();

                        // Set project ID
                        sensor.ProjectID = logger.ProjectID;

                        sensor.Logger = logger;
                        sensor.ColumnIndex = i;
                        sensor.Name = CleanValue(sensorNames[i]);
                        sensor.Unit = sensorUnits.Length >= i ? CleanValue(sensorUnits[i]) : "";
                        sensor.CreatedDate = sensor.LastEditedDate = DateTime.Now;
                        sensor.CreatedUser = sensor.LastEditedUser = AppContext.Current.LogedInUser.Username;
                        logger.Sensors.Add(sensor);
                    }
                    logger.TotalSensor = sensorNames.Length - 2;

                }
                else if (type == 1)
                {
                    logger.Meta = "DS Index: " + cells[0] + "; IP Address: " + cells[4] + "#";
                    logger.TotalSensor = cells.Length - 5;
                    for (int i = 5; i < cells.Length; i++)
                    {
                        var sensor = new Sensor();
                        sensor.Logger = logger;
                        // Set project ID
                        sensor.ProjectID = logger.ProjectID;

                        sensor.ColumnIndex = i;
                        sensor.Name = "Column " + (i);
                        sensor.Unit = "Unit " + (i);
                        sensor.CreatedDate = sensor.LastEditedDate = DateTime.Now;
                        sensor.CreatedUser = sensor.LastEditedUser = AppContext.Current.LogedInUser.Username;
                        logger.Sensors.Add(sensor);
                    }
                }
                streamReader.Close();
                entityConntext.SaveChanges();
                //AppContext.Current.RefreshEntityContext();

            }
        }
コード例 #27
0
ファイル: ChartViewBLL.cs プロジェクト: onlyB/GeoViewer
 public Group GetGroupByID(int id, GeoViewerEntities entitiesContext)
 {
     return entitiesContext.Groups.SingleOrDefault(ent => ent.GroupID == id);
 }
コード例 #28
0
ファイル: PictureViewBLL.cs プロジェクト: onlyB/GeoViewer
        //public bool DeleteObject(Models.Object obj)
        //{
        //    SecurityBLL.Current.CheckPermissionThrowException(SecurityBLL.ROLE_VIEWS_MANAGE);
        //    entityConntext.Objects.DeleteObject(obj);
        //    int result = entityConntext.SaveChanges();
        //    if (result > 0 && obj.Type == OBJECT_TYPE_IMAGE)
        //    {
        //        // Delete image file
        //        if (File.Exists(obj.Parameters))
        //        {
        //            File.Delete(obj.Parameters);
        //        }
        //    }
        //    return result > 0;
        //}
        public bool DeleteObject(int id)
        {
            using (var entityConntext = new GeoViewerEntities())
            {
                bool result = false;
                var obj = entityConntext.Objects.SingleOrDefault(ent => ent.ObjectID == id);
                if (obj != null)
                {
                    entityConntext.Objects.DeleteObject(obj);
                    result = entityConntext.SaveChanges() > 0;
                }

                if (result && obj.Type == OBJECT_TYPE_IMAGE)
                {
                    // Delete image file
                    if (File.Exists(obj.Parameters))
                    {
                        File.Delete(obj.Parameters);
                    }
                }
                return result;
            }
        }
コード例 #29
0
ファイル: ChartViewBLL.cs プロジェクト: onlyB/GeoViewer
 public bool UpdateGroup(Group obj)
 {
     using (var entityConntext = new GeoViewerEntities())
     {
         SecurityBLL.Current.CheckPermissionThrowException(new string[]
                                                               {
                                                                   SecurityBLL.ROLE_VIEWS_EDIT,
                                                                   SecurityBLL.ROLE_VIEWS_MANAGE
                                                               });
         ValidateGroup(obj);
         obj.LastEditedDate = DateTime.Now;
         obj.LastEditedUser = AppContext.Current.LogedInUser.Username;
         entityConntext.AttachUpdatedObject(obj);
         return entityConntext.SaveChanges() > 0;
     }
 }
コード例 #30
0
ファイル: PictureViewBLL.cs プロジェクト: onlyB/GeoViewer
 /// <summary>
 /// Get list of sensors which displayed in this picture view
 /// </summary>
 /// <param name="pictureView"></param>
 /// <returns></returns>
 public List<Sensor> GetSensorsInPictureView(PictureView pictureView)
 {
     using (var entityContext = new GeoViewerEntities())
     {
         var sensors = new List<Sensor>();
         foreach (var obj in entityContext.Objects.Where(ent => ent.PictureViewID == pictureView.PictureViewID && ent.Type != OBJECT_TYPE_GROUP_INDICATOR && ent.Type != OBJECT_TYPE_IMAGE))
         {
             var sensor = SensorBLL.Current.GetByID(obj.Parameters.ToInt32TryParse());
             if (sensor != null && !sensors.Contains(sensor)) sensors.Add(sensor);
         }
         return sensors;
     }
 }