예제 #1
0
        public void CreateMeasuresDataModel(int pNumOperators)
        {
            string savedCategory           = null;
            string savedSubCategory        = null;
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            // Setup number of operators
            if (pNumOperators > 0)
            {
                numOperators = pNumOperators;
            }

            var query = from p in db.Measures select p;

            fullMeasureCollection = new ObservableCollection <MeasureSelection>();
            foreach (var item in query)
            {
                if (string.Compare(savedCategory, item.Category) != 0)
                {
                    fullMeasureCollection.Add(new MeasureSelection(item.Category, "", "", MeasureRowType.CategoryType, numOperators, -1));
                    savedCategory = item.Category;
                }
                if (string.Compare(savedSubCategory, item.SubCategory) != 0)
                {
                    fullMeasureCollection.Add(new MeasureSelection(item.SubCategory, item.Category, "", MeasureRowType.SubCategoryType, numOperators, -1));
                    savedSubCategory = item.SubCategory;
                }
                fullMeasureCollection.Add(new MeasureSelection(item.Name, item.Category, item.SubCategory,
                                                               MeasureRowType.DataValue, numOperators, item.MeasureID));
            }

            // Update Visible collection
            UpdateVisMeasureCollection();
        }
예제 #2
0
        public void SaveScenarioFileInfo()
        {
            if (CurExperiment == null)
            {
                return;
            }

            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            Experiment experiment          = null;

            var query = from e in db.Experiments
                        where e.ExperimentID == CurExperiment.ExperimentID
                        select e;

            try
            {
                experiment = query.Single();
            }
            catch (Exception)
            {
                return;
            }

            experiment.ScenarioFilePath = CurExperiment.ScenarioFilePath;
            experiment.ScenarioFileType = CurExperiment.ScenarioFileType;

            db.SubmitChanges();
        }
예제 #3
0
        public List <string> GetFactorLevels(string measureName, string factorToSum)
        {
            List <string> factorLevels = new List <string>();

            // Loop through the experiments measures looking for experiment entities that match
            foreach (ExperimentMeasure expMeasure in ConfigMeasuresTable)
            {
                if ((expMeasure.Measure.Name != null) &&
                    (expMeasure.Measure.Category != null) &&
                    (expMeasure.Measure.Category.CompareTo(measureName) == 0) &&
                    (expMeasure.Measure.SubCategory != null) &&
                    (expMeasure.Measure.SubCategory.CompareTo(factorToSum) == 0) &&
                    ((expMeasure.ExperimentEntityID.HasValue) && (expMeasure.ExperimentEntityID != 0))
                    )
                {
                    factorLevels.Add(expMeasure.ExperimentEntity.Name);
                }
            }

            // Loop through measure table looking for measures that match
            if (factorLevels.Count == 0)
            {
                VisDashboardDataDataContext db = new VisDashboardDataDataContext();

                var query = from p in db.Measures select p;

                foreach (var measure in query)
                {
                    if ((measure.Name != null) &&
                        (measure.Category != null) &&
                        (measure.Category.CompareTo(measureName) == 0) &&
                        (measure.SubCategory != null) &&
                        (measure.SubCategory.CompareTo(factorToSum) == 0))
                    {
                        factorLevels.Add(measure.Name);
                    }
                }
            }

            if (factorLevels.Count == 0)
            {
                return(null);
            }

            // Remove any all or team
            List <string> factorsToRemove = new List <string>();

            foreach (string factorLevel in factorLevels)
            {
                if ((factorLevel.CompareTo("All") == 0) || (factorLevel.CompareTo("Team") == 0))
                {
                    factorsToRemove.Add(factorLevel);
                }
            }

            factorsToRemove.ForEach(x => factorLevels.Remove(x));

            return(factorLevels);
        }
예제 #4
0
        public CreateUserDialog()
        {
            InitializeComponent();

            // Get the data for the role drop down
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            roleCollection.Collection = from r in db.Roles select r.RoleName;
        }
예제 #5
0
        public void ReloadExperimentInfo()
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            if (CurExperiment == null)
            {
                return;
            }

            // All Users
            var allUsers = (from u in db.Users
                            join uIr in db.UserInRoles on
                            new { u.UserID, RoleName = "Experimenter" }
                            equals
                            new { uIr.UserID, uIr.Role.RoleName }
                            orderby u.Username
                            select u)
                           .Union
                               (from u in db.Users
                               join uIr in db.UserInRoles on
                               new { u.UserID, RoleName = "Operator" }
                               equals
                               new { uIr.UserID, uIr.Role.RoleName }
                               orderby u.Username
                               select u);

            // Load Users in Experiment
            var usersInExp = from u in db.Users
                             join uIe in db.UsersInExperiments on
                             new { u.UserID, ExperimentID = CurExperiment.ExperimentID }
            equals
            new { uIe.UserID, uIe.ExperimentID }
            orderby u.Username
            select u;

            UsersInExperiment = new ObservableCollection <User>();
            usersInExp.ToList().ForEach(x => UsersInExperiment.Add(x));;

            // Load Users not in Experiment
            var usersNotInExp = allUsers.Except(usersInExp);

            UsersNotInExperiment = new ObservableCollection <User>();
            usersNotInExp.ToList().ForEach(x => UsersNotInExperiment.Add(x));

            // Load list of users names
            if ((usersInExp.ToList() != null) && (usersInExp.ToList().Count > 0))
            {
                CurExperimentUsers = new String[usersInExp.ToList().Count];
                for (int i = 0; i < usersInExp.ToList().Count; i++)
                {
                    CurExperimentUsers[i] = usersInExp.ToList()[i].Username;
                }
            }
            else
            {
                CurExperimentUsers = null;
            }
        }
예제 #6
0
        public bool AddNewUser(CreateUserInfo newUserInfo)
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    // Lookup the role ID
                    Role desiredRole = null;
                    var  query       = from p in db.Roles where p.RoleName == newUserInfo.UserInRole select p;

                    try
                    {
                        desiredRole = query.Single();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Could not process user role.", "User Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                        return(false);
                    }

                    // Try to add new user to database
                    User newUser = new User {
                        Username = newUserInfo.Username, Password = newUserInfo.Password
                    };
                    UserInRole newUserInRole = new UserInRole
                    {
                        ApplicationName = "DashboardPermissionTool",
                        RoleID          = desiredRole.RoleID
                    };

                    newUserInRole.User = newUser;
                    db.UserInRoles.InsertOnSubmit(newUserInRole);
                    db.SubmitChanges();
                    ts.Complete();
                }
                catch (SqlException e)
                {
                    if (e.Message.Contains("Violation of UNIQUE KEY constraint 'U_Username'. Cannot insert duplicate key in object 'dbo.User'"))
                    {
                        MessageBox.Show("This user already exists.", "User Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    else
                    {
                        MessageBox.Show("Database Error: " + e.Message, "User Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    return(false);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return(false);
                }
            }

            return(true);
        }
예제 #7
0
        public bool UpdateConfigDisplay(ConfigDisplay configDisplay, int width, int height)
        {
            if (configDisplay == null)
            {
                return(false);
            }

            // Obtain the edited display display
            VisDashboardDataDataContext db      = new VisDashboardDataDataContext();
            ConfigDisplay existingConfigDisplay = null;

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    var query = from cd in db.ConfigDisplays
                                where cd.ConfigID == configDisplay.ConfigID &&
                                cd.Name == configDisplay.Name
                                select cd;

                    try
                    {
                        existingConfigDisplay = query.Single();
                    }
                    catch (Exception)
                    {
                        return(false);
                    }

                    // Update the size if needed
                    if ((existingConfigDisplay.Width != width) || (existingConfigDisplay.Height != height))
                    {
                        existingConfigDisplay.Width  = width;
                        existingConfigDisplay.Height = height;
                        db.SubmitChanges();
                    }
                }
                catch (SqlException e)
                {
                    MessageBox.Show("Database Error: " + e.Message, "Display Deletion Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    return(false);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return(false);
                }
                finally
                {
                    ts.Complete();
                    ts.Dispose();
                    db = null;
                }
            }

            return(true);
        }
예제 #8
0
        public CreateUserDialog()
        {
            InitializeComponent();

            // Get the data for the role drop down
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            roleCollection.Collection = from r in db.Roles select r.RoleName;
        }
예제 #9
0
        public SelectExpUsersDialog()
        {
            InitializeComponent();

            dbContext = new VisDashboardDataDataContext();
            ts        = new TransactionScope();

            pendingAdds    = new List <UsersInExperiment>();
            pendingDeletes = new List <int>();
        }
예제 #10
0
        public SelectExpUsersDialog()
        {
            InitializeComponent();

            dbContext = new VisDashboardDataDataContext();
            ts = new TransactionScope();

            pendingAdds = new List<UsersInExperiment>();
            pendingDeletes = new List<int>();
        }
예제 #11
0
        public bool LoadUser(string username, string password)
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            User newUser = null;
            var query = from p in db.Users where p.Username == username select p;

            try
            {
                newUser = query.Single();
            }
            catch (Exception)
            {
                MessageBox.Show("Username or password is incorrect.", "Login Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                return false;
            }

            // Check password
            if (string.Compare(password, newUser.Password) != 0)
            {
                MessageBox.Show("Username or password is incorrect.", "Login Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                return false;
            }

            if ((newUser.UserInRoles != null) && (newUser.UserInRoles.Count == 1))
            {
                if (newUser.UserInRoles[0].Role.RoleName.CompareTo("Administrator") == 0)
                {
                }
                else if (newUser.UserInRoles[0].Role.RoleName.CompareTo("Experimenter") == 0)
                {
                }
                else
                {
                    MessageBox.Show("Account must be either an Administrator or an Experimenter to use this interface.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    return false;
                }
            }
            else
            {
                if (newUser.UserInRoles.Count > 1)
                {
                    MessageBox.Show("User account has more than one role.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                else
                {
                    MessageBox.Show("User account has no assigned role.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                return false;
            }

            currentUser = newUser;
            OnPropertyChanged("");
            return true;
        }
예제 #12
0
        public bool LoadUser(string username, string password)
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            User newUser = null;
            var  query   = from p in db.Users where p.Username == username select p;

            try
            {
                newUser = query.Single();
            }
            catch (Exception)
            {
                MessageBox.Show("Username or password is incorrect.", "Login Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                return(false);
            }

            // Check password
            if (string.Compare(password, newUser.Password) != 0)
            {
                MessageBox.Show("Username or password is incorrect.", "Login Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                return(false);
            }

            if ((newUser.UserInRoles != null) && (newUser.UserInRoles.Count == 1))
            {
                if (newUser.UserInRoles[0].Role.RoleName.CompareTo("Administrator") == 0)
                {
                }
                else if (newUser.UserInRoles[0].Role.RoleName.CompareTo("Experimenter") == 0)
                {
                }
                else
                {
                    MessageBox.Show("Account must be either an Administrator or an Experimenter to use this interface.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    return(false);
                }
            }
            else
            {
                if (newUser.UserInRoles.Count > 1)
                {
                    MessageBox.Show("User account has more than one role.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                else
                {
                    MessageBox.Show("User account has no assigned role.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                }
                return(false);
            }

            currentUser = newUser;
            OnPropertyChanged("");
            return(true);
        }
예제 #13
0
        public void LoadConfigDisplayInfo()
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            bool userFound = false;

            if (CurConfig == null)
            {
                return;
            }

            // Load Available Display Names
            displayNames       = new ObservableCollection <string>();
            ConfigDisplayTable = new ObservableCollection <ExperimentDisplay>();

            List <ExperimentDisplay> expDisplayAll = (from eD in db.ExperimentDisplays
                                                      join uIc in db.UsersInConfigs on
                                                      new { eD.UserID, ConfigID = CurConfig.ConfigID }
                                                      equals
                                                      new { uIc.UserID, uIc.ConfigID }
                                                      where eD.ExperimentID == CurExperimentID
                                                      select eD).ToList();

            foreach (ExperimentDisplay expDisplay in expDisplayAll)
            {
                // Make sure all users in configuration have access to this display
                foreach (User user in UsersInConfig)
                {
                    userFound = false;
                    foreach (ExperimentDisplay expDisplay2 in expDisplayAll)
                    {
                        if ((expDisplay2.UserID == user.UserID) &&
                            (expDisplay2.DisplayID == expDisplay.DisplayID))
                        {
                            userFound = true;
                            break;
                        }
                    }
                    if (!userFound)
                    {
                        break;
                    }
                }
                if ((userFound) && (!DisplayNames.Contains(expDisplay.Display.Name)))
                {
                    // Add this Display to the available Display list
                    ConfigDisplayTable.Add(expDisplay);
                    DisplayNames.Add(expDisplay.Display.Name);
                }
            }

            OnPropertyChanged("DisplayNames");
        }
예제 #14
0
        public int LocateMeasureID(string measureName, string factorName, string levelName, out Measure measure)
        {
            foreach (ExperimentMeasure expMeasure in ConfigMeasuresTable)
            {
                if ((expMeasure.Measure.Name != null) &&
                    (expMeasure.Measure.Name.CompareTo(levelName) == 0) &&
                    (expMeasure.Measure.Category != null) &&
                    (expMeasure.Measure.Category.CompareTo(measureName) == 0) &&
                    (expMeasure.Measure.SubCategory != null) &&
                    (expMeasure.Measure.SubCategory.CompareTo(factorName) == 0) &&
                    ((!expMeasure.ExperimentEntityID.HasValue) || (expMeasure.ExperimentEntityID == 0))
                    )
                {
                    measure = expMeasure.Measure;
                    return(expMeasure.Measure.MeasureID);
                }
                else if ((expMeasure.Measure.Name != null) &&
                         (expMeasure.ExperimentEntityID > 0) &&
                         (expMeasure.ExperimentEntity.Name.CompareTo(levelName) == 0) &&
                         (expMeasure.Measure.Category != null) &&
                         (expMeasure.Measure.Category.CompareTo(measureName) == 0) &&
                         (expMeasure.Measure.SubCategory != null) &&
                         (expMeasure.Measure.SubCategory.CompareTo(factorName) == 0)
                         )
                {
                    measure = expMeasure.Measure;
                    return(expMeasure.Measure.MeasureID);
                }
            }

            // Nothing found in experiment - Check full measure list
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            var query = from p in db.Measures select p;

            foreach (var item in query)
            {
                if ((string.Compare(item.Category, measureName) == 0) &&
                    (string.Compare(item.SubCategory, factorName) == 0) &&
                    (string.Compare(item.Name, levelName) == 0))
                {
                    measure = item;
                    return(item.MeasureID);
                }
            }

            measure = null;
            return(-1);
        }
예제 #15
0
        public void DeleteExperimentDisplays(Experiment experiment)
        {
            if (experiment == null)
            {
                return;
            }

            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            var oldExperimentMeasures = from ed in db.ExperimentDisplays
                                        where ed.ExperimentID == experiment.ExperimentID
                                        select ed;

            db.ExperimentDisplays.DeleteAllOnSubmit(oldExperimentMeasures);
            db.SubmitChanges();
        }
예제 #16
0
        private void ClearExperimentEntities()
        {
            if (CurExperiment == null)
            {
                return;
            }

            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            var oldEntities = from e in db.ExperimentEntities
                              where e.ExperimentID == CurExperiment.ExperimentID
                              select e;

            db.ExperimentEntities.DeleteAllOnSubmit(oldEntities);
            db.SubmitChanges();
        }
예제 #17
0
        public void LoadExperiementDisplays(Experiment currentExperiment,
                                            ObservableCollection <User> experimentUsers)
        {
            VisDashboardDataDataContext db = null;

            // Parameter checking
            if ((currentExperiment == null) || (experimentUsers == null) ||
                (experimentUsers.Count == 0))
            {
                return;
            }

            // Connect to database
            db = new VisDashboardDataDataContext();
            var query = from ed in db.ExperimentDisplays
                        where ed.ExperimentID == currentExperiment.ExperimentID
                        select ed;

            ExperimentDisplay[] expDisplays = query.ToArray();

            // Clear Radio buttons
            ClearRadioButtons();

            // Fill out the radio button table
            for (int i = 0; i < expDisplays.Length; i++)
            {
                for (int j = 0; j < this.Count; j++)
                {
                    if (this[j].DisplayID == expDisplays[i].DisplayID)
                    {
                        for (int z = 0; z < experimentUsers.Count; z++)
                        {
                            if (experimentUsers[z].UserID == expDisplays[i].UserID)
                            {
                                // Set the radio button
                                this[j][z] = RadioButtonType.On;
                                break;
                            }
                        }
                        break;
                    }
                }
            }

            // Recalculate all rollups
            RefreshAllCol();
        }
예제 #18
0
        public void LoadUserExperiments(User user)
        {
            if (user.UserID <= 0)
            {
                return;
            }

            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            var exp = from e in db.Experiments
                      where e.CreatorID == user.UserID
                      select e;

            Experiments = exp.ToArray();

            ExperimentNames = (from e in db.Experiments
                               where e.CreatorID == user.UserID
                               select e.Name).ToArray();
        }
예제 #19
0
        public ObservableCollection <ConfigDisplay> LoadConfigDisplays()
        {
            VisDashboardDataDataContext          db = new VisDashboardDataDataContext();
            ObservableCollection <ConfigDisplay> displayConfigsCol = null;

            if (CurConfig == null)
            {
                return(null);
            }

            // All Users in an experiment
            var diplayConfigs = from cd in db.ConfigDisplays
                                where cd.ConfigID == CurConfig.ConfigID
                                select cd;

            displayConfigsCol = new ObservableCollection <ConfigDisplay>();
            diplayConfigs.ToList().ForEach(x => displayConfigsCol.Add(x));
            return(displayConfigsCol);
        }
예제 #20
0
        public void CreateDisplayDataModel(int pNumOperators)
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            // Clear the existing list
            Clear();

            // Setup number of operators
            if (pNumOperators > 0)
            {
                numOperators = pNumOperators;
            }

            var query = from d in db.Displays select d;

            foreach (var item in query)
            {
                Add(new DisplaySelection(item.Name, numOperators, item.DisplayID, item.ImageResourcePath));
            }
        }
예제 #21
0
        public void LoadExperimentConfigs(Experiment experiment)
        {
            if ((experiment == null) || (experiment.ExperimentID <= 0))
            {
                return;
            }

            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            var config = from c in db.Configs
                         where c.ExperimentID == experiment.ExperimentID
                         select c;

            Configs = config.ToArray();

            ConfigNames = (from c in db.Configs
                           where c.ExperimentID == experiment.ExperimentID
                           select c.Name).ToArray();

            CurExperimentID = experiment.ExperimentID;
        }
예제 #22
0
        public bool AddNewConfig(CreateConfigInfo newConfigInfo)
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    Config newConfig = new Config
                    {
                        Name         = newConfigInfo.Name,
                        ExperimentID = newConfigInfo.ExperimentID
                    };

                    db.Configs.InsertOnSubmit(newConfig);
                    db.SubmitChanges();
                }
                catch (SqlException e)
                {
                    MessageBox.Show("Database Error: " + e.Message, "Config Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    return(false);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return(false);
                }
                finally
                {
                    ts.Complete();
                    ts.Dispose();
                    db = null;
                }
            }

            return(true);
        }
예제 #23
0
        public void SaveDatabaseChanges()
        {
            if (dbContext != null)
            {
                // Add pending adds
                foreach (UsersInExperiment addObject in pendingAdds)
                {
                    // Make sure this add object does not already exist
                    UsersInExperiment[] userInExperiment = (from uIe in dbContext.UsersInExperiments
                                                            where ((uIe.UserID == addObject.UserID) && (uIe.ExperimentID == ExpDataModel.CurExperiment.ExperimentID))
                                                            select uIe).ToArray();

                    if (userInExperiment.Length == 0)
                    {
                        dbContext.UsersInExperiments.InsertOnSubmit(addObject);
                    }
                }

                // Add pending deletes
                foreach (int deleteUserID in pendingDeletes)
                {
                    UsersInExperiment[] userInExperiment = (from uIe in dbContext.UsersInExperiments
                                                            where ((uIe.UserID == deleteUserID) && (uIe.ExperimentID == ExpDataModel.CurExperiment.ExperimentID))
                                                            select uIe).ToArray();
                    if (userInExperiment.Length == 1)
                    {
                        DatabaseHelper.DeleteByPK <UsersInExperiment, int>(userInExperiment[0].ID, dbContext);
                    }
                }

                dbContext.SubmitChanges();
                ts.Complete();
                ts.Dispose();
                dbContext = null;
            }
        }
예제 #24
0
        public bool UpdateConfigDisplay(ConfigDisplay configDisplay, int width, int height)
        {
            if (configDisplay == null)
            {
                return false;
            }

            // Obtain the edited display display
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            ConfigDisplay existingConfigDisplay = null;

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    var query = from cd in db.ConfigDisplays
                                where cd.ConfigID == configDisplay.ConfigID &&
                                cd.Name == configDisplay.Name
                                select cd;

                    try
                    {
                        existingConfigDisplay = query.Single();
                    }
                    catch (Exception)
                    {
                        return false;
                    }

                    // Update the size if needed
                    if ((existingConfigDisplay.Width != width) || (existingConfigDisplay.Height != height))
                    {
                        existingConfigDisplay.Width = width;
                        existingConfigDisplay.Height = height;
                        db.SubmitChanges();
                    }
                }
                catch (SqlException e)
                {
                    MessageBox.Show("Database Error: " + e.Message, "Display Deletion Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    return false;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return false;
                }
                finally
                {
                    ts.Complete();
                    ts.Dispose();
                    db = null;
                }
            }

            return true;

        }
예제 #25
0
        public List<string> GetFactorLevels(string measureName, string factorToSum)
        {
            List<string> factorLevels = new List<string>();

            // Loop through the experiments measures looking for experiment entities that match
            foreach (ExperimentMeasure expMeasure in ConfigMeasuresTable)
            {
                if ((expMeasure.Measure.Name != null) &&
                    (expMeasure.Measure.Category != null) &&
                    (expMeasure.Measure.Category.CompareTo(measureName) == 0) &&
                    (expMeasure.Measure.SubCategory != null) &&
                    (expMeasure.Measure.SubCategory.CompareTo(factorToSum) == 0) &&
                    ((expMeasure.ExperimentEntityID.HasValue) && (expMeasure.ExperimentEntityID != 0))
                    )
                {
                    factorLevels.Add(expMeasure.ExperimentEntity.Name);
                }
            }

            // Loop through measure table looking for measures that match
            if (factorLevels.Count == 0)
            {
                VisDashboardDataDataContext db = new VisDashboardDataDataContext();

                var query = from p in db.Measures select p;

                foreach (var measure in query)
                {
                    if ((measure.Name != null) &&
                        (measure.Category != null) &&
                        (measure.Category.CompareTo(measureName) == 0) &&
                        (measure.SubCategory != null) &&
                        (measure.SubCategory.CompareTo(factorToSum) == 0))
                    {
                        factorLevels.Add(measure.Name);
                    }
                }
            }

            if (factorLevels.Count == 0)
            {
                return null;
            }

            // Remove any all or team
            List<string> factorsToRemove = new List<string>();

            foreach (string factorLevel in factorLevels)
            {
                if ((factorLevel.CompareTo("All") == 0) || (factorLevel.CompareTo("Team") == 0))
                {
                    factorsToRemove.Add(factorLevel);
                }
            }

            factorsToRemove.ForEach(x => factorLevels.Remove(x));

            return factorLevels;
        }
예제 #26
0
        public void ScanDDDScenario(MeasuresDataModel measureDataModel)
        {
            List<String> dmIDs = new List<String>();
            List<AssetEntity> entities = new List<AssetEntity>();
            Dictionary<String, ExperimentEntity> entityMap = new Dictionary<string, ExperimentEntity>();

            int operatorTypeID = -1;
            int assetTypeID = -1;

            try
            {
                if ((CurExperiment.ScenarioFilePath == null) || (CurExperiment.ScenarioFilePath.Length <= 0))
                {
                    return;
                }

                MessageBoxResult result = MessageBox.Show("Scanning a scenario file will clear all selections on the Measures tab.  Do you wish to continue?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (result != MessageBoxResult.Yes)
                {
                    return;
                }

                // Open scenario file
                XPathDocument Doc = new XPathDocument(CurExperiment.ScenarioFilePath);
                XPathNavigator navigator = Doc.CreateNavigator();
                navigator.MoveToRoot();

                // Make sure this is a DDD Scenario file
                XPathNavigator node = navigator.SelectSingleNode("/Scenario/ScenarioName");
                String scenarioName = node.Value;

                if ((scenarioName == null) || (scenarioName.Length <= 0))
                {
                    return;
                }

                // Get all of the DecisionMaker ids
                XPathNodeIterator iterator = navigator.Select("/Scenario/DecisionMaker");
                String dmID = null;

                while (iterator.MoveNext())
                {
                    node = iterator.Current.SelectSingleNode("Identifier");
                    dmID = node.Value;

                    if ((dmID == null) || (dmID.Length <= 0))
                    {
                        continue;
                    }

                    dmIDs.Add(dmID);
                }

                // Get all of the entity names
                iterator = navigator.Select("/Scenario/Create_Event");
                String entityID = null;

                while (iterator.MoveNext())
                {
                    string ownerName = null;
                    node = iterator.Current.SelectSingleNode("ID");
                    entityID = node.Value;

                    node = iterator.Current.SelectSingleNode("Owner");
                    if (node != null)
                    {
                        ownerName = node.Value;
                    }

                    if ((dmID == null) || (dmID.Length <= 0))
                    {
                        continue;
                    }

                    AssetEntity newAssetEntity = new AssetEntity();
                    newAssetEntity.AssetName = entityID;
                    newAssetEntity.OwnerName = ownerName;
                    entities.Add(newAssetEntity);
                }

                // Clear the experiment measures
                measureDataModel.DeleteExperimentMeasures(CurExperiment);

                // Clear the experiment entities
                ClearExperimentEntities();

                // Connect to database
                VisDashboardDataDataContext db = new VisDashboardDataDataContext();

                // Get Entity type for operators
                var query = from et in db.EntityTypes where et.Name == "Operator" select et;

                try
                {
                    operatorTypeID = query.Single().EntityTypeID;
                }
                catch (Exception)
                {
                    return;
                }

                // Get Entity type for assets
                query = from et in db.EntityTypes where et.Name == "Asset" select et;

                try
                {
                    assetTypeID = query.Single().EntityTypeID;
                }
                catch (Exception)
                {
                    return;
                }

                // Add the new experiment DMs
                ExperimentEntity newExpEntity = null;

                foreach (String id in dmIDs)
                {
                    newExpEntity = new ExperimentEntity();
                    newExpEntity.Name = id;
                    newExpEntity.ExperimentID = CurExperiment.ExperimentID;
                    newExpEntity.EntityTypeID = operatorTypeID;
                    newExpEntity.OwnerExperimentEntityID = null;

                    db.ExperimentEntities.InsertOnSubmit(newExpEntity);
                    entityMap.Add(id, newExpEntity);
                }

                foreach (AssetEntity entity in entities)
                {
                    newExpEntity = new ExperimentEntity();
                    newExpEntity.Name = entity.AssetName;
                    newExpEntity.ExperimentID = CurExperiment.ExperimentID;
                    newExpEntity.EntityTypeID = assetTypeID;
                    if ((entity.OwnerName != null) && (entityMap.Keys.Contains(entity.OwnerName)))
                    {
                        newExpEntity.ExperimentEntity1 = entityMap[entity.OwnerName];
                    }
                    else
                    {
                        newExpEntity.OwnerExperimentEntityID = null;
                    }

                    db.ExperimentEntities.InsertOnSubmit(newExpEntity);
                    entityMap.Add(entity.AssetName, newExpEntity);
                }
                db.SubmitChanges();

                // Add new Experiment Measures
                ExperimentMeasure newExperimentMeasure = null;
                var queryMeasures = from p in db.Measures select p;

                foreach(UsersInExperiment user in CurExperiment.UsersInExperiments)
                {

                    foreach (var measure in queryMeasures)
                    {
                        if (measure.Name.CompareTo("Operator") == 0)
                        {
                            foreach (String id in dmIDs)
                            {
                                newExperimentMeasure = new ExperimentMeasure
                                {
                                    ExperimentID = CurExperiment.ExperimentID,
                                    MeasureID = measure.MeasureID,
                                    UserID = user.UserID,
                                    ExperimentEntity = entityMap[id],
                                    Allowed = false
                                };
                                db.ExperimentMeasures.InsertOnSubmit(newExperimentMeasure);
                            }
                        }
                        else if (measure.Name.CompareTo("Asset") == 0)
                        {
                            foreach (AssetEntity entity in entities)
                            {
                                newExperimentMeasure = new ExperimentMeasure
                                {
                                    ExperimentID = CurExperiment.ExperimentID,
                                    MeasureID = measure.MeasureID,
                                    UserID = user.UserID,
                                    ExperimentEntity = entityMap[entity.AssetName],
                                    Allowed = false
                                };
                                db.ExperimentMeasures.InsertOnSubmit(newExperimentMeasure);
                            }
                        }
                    }
                }

                db.SubmitChanges();

                // Reload experiment measures
                measureDataModel.LoadExperiementMeasures(CurExperiment,
                    UsersInExperiment);

            }
            catch (Exception)
            {
                return;
            }
        }
예제 #27
0
        public Boolean RemoveCurrentDisplay()
        {
            // Remove the current display if it already exists
            VisDashboardDataDataContext db      = new VisDashboardDataDataContext();
            ConfigDisplay existingConfigDisplay = null;

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    var query = from cd in db.ConfigDisplays
                                where cd.ConfigID == CurConfig.ConfigID &&
                                cd.Name == CurConfigDisplay.Name
                                select cd;

                    try
                    {
                        existingConfigDisplay = query.Single();
                    }
                    catch (Exception)
                    {
                        return(false);
                    }

                    // Delete any contained DisplayFactors
                    foreach (DisplayFactor factor in existingConfigDisplay.DisplayFactors)
                    {
                        db.DisplayFactors.DeleteOnSubmit(factor);
                    }

                    // Delete any contained DisplayBlockedFactors
                    foreach (DisplayBlockedFactor blockedFactor in existingConfigDisplay.DisplayBlockedFactors)
                    {
                        db.DisplayBlockedFactors.DeleteOnSubmit(blockedFactor);
                    }

                    // Delete this ConfigDisplay
                    db.ConfigDisplays.DeleteOnSubmit(existingConfigDisplay);

                    db.SubmitChanges();
                }
                catch (SqlException e)
                {
                    MessageBox.Show("Database Error: " + e.Message, "Display Deletion Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    return(false);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return(false);
                }
                finally
                {
                    ts.Complete();
                    ts.Dispose();
                    db = null;
                }
            }

            return(true);
        }
예제 #28
0
        public void SaveExperiementDisplays(Experiment currentExperiment,
                                            ObservableCollection <User> experimentUsers)
        {
            VisDashboardDataDataContext db = null;

            // Parameter checking
            if ((currentExperiment == null) || (experimentUsers == null) ||
                (experimentUsers.Count == 0))
            {
                return;
            }

            // Connect to the database
            db = new VisDashboardDataDataContext();

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    // Remove old experiment measures entries
                    var itemsToDelete = from em in db.ExperimentDisplays
                                        where em.ExperimentID == currentExperiment.ExperimentID
                                        select em;
                    db.ExperimentDisplays.DeleteAllOnSubmit(itemsToDelete);

                    // Loop through the data in radio button table
                    for (int i = 0; i < this.Count; i++)
                    {
                        if (this[i].DisplayID > 0)
                        {
                            for (int j = 0; j < experimentUsers.Count; j++)
                            {
                                if (this[i][j] == RadioButtonType.On)
                                {
                                    db.ExperimentDisplays.InsertOnSubmit(new ExperimentDisplay
                                    {
                                        ExperimentID = currentExperiment.ExperimentID,
                                        DisplayID    = this[i].DisplayID,
                                        UserID       = experimentUsers[j].UserID
                                    });
                                }
                            }
                        }
                    }

                    // Submit the database changes
                    db.SubmitChanges();
                }
                catch (SqlException e)
                {
                    MessageBox.Show("Database Error: " + e.Message, "Failed to save database displays", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return;
                }
                finally
                {
                    // Cleanup
                    ts.Complete();
                    ts.Dispose();
                    db = null;
                }
            }
        }
예제 #29
0
        public Boolean AddCurrentDisplay()
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    // Copy data into new object
                    ConfigDisplay newConfigDisplay = new ConfigDisplay
                    {
                        Name              = CurConfigDisplay.Name,
                        ConfigID          = CurConfig.ConfigID,
                        DisplayID         = CurConfigDisplay.Display.DisplayID,
                        MeasureName       = CurConfigDisplay.MeasureName,
                        MetricName        = CurConfigDisplay.MetricName,
                        NumFactors        = CurConfigDisplay.NumFactors,
                        NumBlockedFactors = CurConfigDisplay.NumBlockedFactors,
                        Width             = CurConfigDisplay.Width,
                        Height            = CurConfigDisplay.Height
                    };

                    // Copy DisplayFactors to new object
                    foreach (DisplayFactor factor in CurConfigDisplay.DisplayFactors)
                    {
                        DisplayFactor newDisplayFactor = new DisplayFactor
                        {
                            FactorName  = factor.FactorName,
                            FactorLabel = factor.FactorLabel,
                            FactorPos   = factor.FactorPos
                        };
                        newConfigDisplay.DisplayFactors.Add(newDisplayFactor);
                    }

                    // Copy DisplayBlockedFactors to new object
                    foreach (DisplayBlockedFactor blockedFactor in CurConfigDisplay.DisplayBlockedFactors)
                    {
                        DisplayBlockedFactor newDisplayBlockedFactor = new DisplayBlockedFactor
                        {
                            MeasureID = blockedFactor.MeasureID,
                            LevelName = blockedFactor.LevelName
                        };
                        newConfigDisplay.DisplayBlockedFactors.Add(newDisplayBlockedFactor);
                    }

                    db.ConfigDisplays.InsertOnSubmit(newConfigDisplay);
                    db.SubmitChanges();
                }
                catch (SqlException e)
                {
                    MessageBox.Show("Database Error: " + e.Message, "Display Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    return(false);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return(false);
                }
                finally
                {
                    ts.Complete();
                    ts.Dispose();
                    db = null;
                }
            }

            return(true);
        }
예제 #30
0
        public ObservableCollection<ConfigDisplay> LoadConfigDisplays()
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            ObservableCollection<ConfigDisplay> displayConfigsCol = null;

            if (CurConfig == null)
            {
                return null;
            }

            // All Users in an experiment
            var diplayConfigs = from cd in db.ConfigDisplays
                            where cd.ConfigID == CurConfig.ConfigID
                            select cd;

            displayConfigsCol = new ObservableCollection<ConfigDisplay>();
            diplayConfigs.ToList().ForEach(x => displayConfigsCol.Add(x));
            return displayConfigsCol;

        }
예제 #31
0
        public void LoadConfigInfo()
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            bool userFound = false;

            if (CurConfig == null)
            {
                return;
            }

            // Reset the CurConfigDisplay
            ClearConfigDisplay();

            // Clear the Display Builder
            ClearDisplayBuilder();

            // All Users in an experiment
            var allUsers = from uIe in db.UsersInExperiments
                            where uIe.ExperimentID == CurExperimentID
                            select uIe.User;

            // Load Users in Config
            var usersInExp = from u in db.Users
                             join uIe in db.UsersInConfigs on
                             new { u.UserID, ConfigID = CurConfig.ConfigID }
                             equals
                             new { uIe.UserID, uIe.ConfigID }
                             orderby u.Username
                             select u;
            UsersInConfig = new ObservableCollection<User>();
            usersInExp.ToList().ForEach(x => UsersInConfig.Add(x)); ;

            // Load Users not in Config
            var usersNotInExp = allUsers.Except(usersInExp);
            UsersNotInConfig = new ObservableCollection<User>();
            usersNotInExp.ToList().ForEach(x => UsersNotInConfig.Add(x));

            // Load list of users names
            if ((usersInExp.ToList() != null) && (usersInExp.ToList().Count > 0))
            {
                CurConfigUsers = new String[usersInExp.ToList().Count];
                for (int i = 0; i < usersInExp.ToList().Count; i++)
                {
                    CurConfigUsers[i] = usersInExp.ToList()[i].Username;
                }
            }
            else
            {
                CurConfigUsers = null;
            }

            // Load available measure names
            ConfigMeasuresTable = new ObservableCollection<ExperimentMeasure>();

            List<ExperimentMeasure> expMeasuresAll = (from eM in db.ExperimentMeasures
                                                      join uIc in db.UsersInConfigs on
                                                      new { eM.UserID, ConfigID = CurConfig.ConfigID }
                                                      equals
                                                      new { uIc.UserID, uIc.ConfigID }
                                                      where eM.ExperimentID == CurExperimentID
                                                      select eM).ToList();

            foreach (ExperimentMeasure expMeasure in expMeasuresAll)
            {
                if ((expMeasure.Allowed.HasValue) && (expMeasure.Allowed == false))
                {
                    continue;
                }

                // Make sure all users in configuration have access to this measure
                foreach (User user in UsersInConfig)
                {
                    userFound = false;
                    foreach (ExperimentMeasure expMeasure2 in expMeasuresAll)
                    {
                        if ((expMeasure2.UserID == user.UserID) &&
                            (expMeasure2.MeasureID == expMeasure.MeasureID))
                        {
                            userFound = true;
                            break;
                        }
                    }
                    if (!userFound)
                    {
                        break;
                    }
                }
                if (userFound)
                {
                    // Add this measure to the available measure list
                    ConfigMeasuresTable.Add(expMeasure);
                }
            }

            measureNames = new ObservableCollection<string>();
            foreach (ExperimentMeasure expMeasure in ConfigMeasuresTable)
            {
                if (!MeasureNames.Contains(expMeasure.Measure.Category))
                {
                    MeasureNames.Add(expMeasure.Measure.Category);
                }
            }
            OnPropertyChanged("MeasureNames");

            // Load Display Info
            LoadConfigDisplayInfo();

        }
예제 #32
0
        private void ClearExperimentEntities()
        {
            if (CurExperiment == null)
            {
                return;
            }

            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            var oldEntities = from e in db.ExperimentEntities
                        where e.ExperimentID == CurExperiment.ExperimentID
                        select e;

            db.ExperimentEntities.DeleteAllOnSubmit(oldEntities);
            db.SubmitChanges();
        }
예제 #33
0
        public int LocateMeasureID(string measureName, string factorName, string levelName, out Measure measure)
        {
            foreach (ExperimentMeasure expMeasure in ConfigMeasuresTable)
            {
                if ((expMeasure.Measure.Name != null) &&
                    (expMeasure.Measure.Name.CompareTo(levelName) == 0) &&
                    (expMeasure.Measure.Category != null) &&
                    (expMeasure.Measure.Category.CompareTo(measureName) == 0) &&
                    (expMeasure.Measure.SubCategory != null) &&
                    (expMeasure.Measure.SubCategory.CompareTo(factorName) == 0) &&
                    ((!expMeasure.ExperimentEntityID.HasValue) || (expMeasure.ExperimentEntityID == 0))
                    )
                {
                    measure = expMeasure.Measure;
                    return expMeasure.Measure.MeasureID;
                }
                else if ((expMeasure.Measure.Name != null) &&
                    (expMeasure.ExperimentEntityID > 0) &&
                    (expMeasure.ExperimentEntity.Name.CompareTo(levelName) == 0) &&
                    (expMeasure.Measure.Category != null) &&
                    (expMeasure.Measure.Category.CompareTo(measureName) == 0) &&
                    (expMeasure.Measure.SubCategory != null) &&
                    (expMeasure.Measure.SubCategory.CompareTo(factorName) == 0)
                    )
                {
                    measure = expMeasure.Measure;
                    return expMeasure.Measure.MeasureID;
                }
            }

            // Nothing found in experiment - Check full measure list
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            var query = from p in db.Measures select p;
            foreach (var item in query)
            {
                if ((string.Compare(item.Category, measureName) == 0) &&
                    (string.Compare(item.SubCategory, factorName) == 0) &&
                    (string.Compare(item.Name, levelName) == 0))
                {
                    measure = item;
                    return item.MeasureID;
                }
            }

            measure = null;
            return -1;
        }
예제 #34
0
        public bool AddNewUser(CreateUserInfo newUserInfo)
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    // Lookup the role ID
                    Role desiredRole = null;
                    var query = from p in db.Roles where p.RoleName == newUserInfo.UserInRole select p;

                    try
                    {
                        desiredRole = query.Single();
                    }
                    catch (Exception)
                    {
                        MessageBox.Show("Could not process user role.", "User Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                        return false;
                    }

                    // Try to add new user to database
                    User newUser = new User { Username = newUserInfo.Username, Password = newUserInfo.Password };
                    UserInRole newUserInRole = new UserInRole
                        {
                            ApplicationName = "DashboardPermissionTool",
                            RoleID = desiredRole.RoleID                            
                        };

                    newUserInRole.User = newUser;
                    db.UserInRoles.InsertOnSubmit(newUserInRole);
                    db.SubmitChanges();
                    ts.Complete();
                }
                catch (SqlException e)
                {
                    if (e.Message.Contains("Violation of UNIQUE KEY constraint 'U_Username'. Cannot insert duplicate key in object 'dbo.User'"))
                    {
                        MessageBox.Show("This user already exists.", "User Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    else
                    {
                        MessageBox.Show("Database Error: " + e.Message, "User Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    return false;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return false;
                }
            }

            return true;
        }
예제 #35
0
        public void ScanDDDScenario(MeasuresDataModel measureDataModel)
        {
            List <String>      dmIDs    = new List <String>();
            List <AssetEntity> entities = new List <AssetEntity>();
            Dictionary <String, ExperimentEntity> entityMap = new Dictionary <string, ExperimentEntity>();

            int operatorTypeID = -1;
            int assetTypeID    = -1;

            try
            {
                if ((CurExperiment.ScenarioFilePath == null) || (CurExperiment.ScenarioFilePath.Length <= 0))
                {
                    return;
                }

                MessageBoxResult result = MessageBox.Show("Scanning a scenario file will clear all selections on the Measures tab.  Do you wish to continue?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (result != MessageBoxResult.Yes)
                {
                    return;
                }

                // Open scenario file
                XPathDocument  Doc       = new XPathDocument(CurExperiment.ScenarioFilePath);
                XPathNavigator navigator = Doc.CreateNavigator();
                navigator.MoveToRoot();

                // Make sure this is a DDD Scenario file
                XPathNavigator node         = navigator.SelectSingleNode("/Scenario/ScenarioName");
                String         scenarioName = node.Value;

                if ((scenarioName == null) || (scenarioName.Length <= 0))
                {
                    return;
                }

                // Get all of the DecisionMaker ids
                XPathNodeIterator iterator = navigator.Select("/Scenario/DecisionMaker");
                String            dmID     = null;

                while (iterator.MoveNext())
                {
                    node = iterator.Current.SelectSingleNode("Identifier");
                    dmID = node.Value;

                    if ((dmID == null) || (dmID.Length <= 0))
                    {
                        continue;
                    }

                    dmIDs.Add(dmID);
                }

                // Get all of the entity names
                iterator = navigator.Select("/Scenario/Create_Event");
                String entityID = null;

                while (iterator.MoveNext())
                {
                    string ownerName = null;
                    node     = iterator.Current.SelectSingleNode("ID");
                    entityID = node.Value;

                    node = iterator.Current.SelectSingleNode("Owner");
                    if (node != null)
                    {
                        ownerName = node.Value;
                    }

                    if ((dmID == null) || (dmID.Length <= 0))
                    {
                        continue;
                    }

                    AssetEntity newAssetEntity = new AssetEntity();
                    newAssetEntity.AssetName = entityID;
                    newAssetEntity.OwnerName = ownerName;
                    entities.Add(newAssetEntity);
                }

                // Clear the experiment measures
                measureDataModel.DeleteExperimentMeasures(CurExperiment);

                // Clear the experiment entities
                ClearExperimentEntities();

                // Connect to database
                VisDashboardDataDataContext db = new VisDashboardDataDataContext();

                // Get Entity type for operators
                var query = from et in db.EntityTypes where et.Name == "Operator" select et;

                try
                {
                    operatorTypeID = query.Single().EntityTypeID;
                }
                catch (Exception)
                {
                    return;
                }

                // Get Entity type for assets
                query = from et in db.EntityTypes where et.Name == "Asset" select et;

                try
                {
                    assetTypeID = query.Single().EntityTypeID;
                }
                catch (Exception)
                {
                    return;
                }

                // Add the new experiment DMs
                ExperimentEntity newExpEntity = null;

                foreach (String id in dmIDs)
                {
                    newExpEntity                         = new ExperimentEntity();
                    newExpEntity.Name                    = id;
                    newExpEntity.ExperimentID            = CurExperiment.ExperimentID;
                    newExpEntity.EntityTypeID            = operatorTypeID;
                    newExpEntity.OwnerExperimentEntityID = null;

                    db.ExperimentEntities.InsertOnSubmit(newExpEntity);
                    entityMap.Add(id, newExpEntity);
                }

                foreach (AssetEntity entity in entities)
                {
                    newExpEntity              = new ExperimentEntity();
                    newExpEntity.Name         = entity.AssetName;
                    newExpEntity.ExperimentID = CurExperiment.ExperimentID;
                    newExpEntity.EntityTypeID = assetTypeID;
                    if ((entity.OwnerName != null) && (entityMap.Keys.Contains(entity.OwnerName)))
                    {
                        newExpEntity.ExperimentEntity1 = entityMap[entity.OwnerName];
                    }
                    else
                    {
                        newExpEntity.OwnerExperimentEntityID = null;
                    }

                    db.ExperimentEntities.InsertOnSubmit(newExpEntity);
                    entityMap.Add(entity.AssetName, newExpEntity);
                }
                db.SubmitChanges();

                // Add new Experiment Measures
                ExperimentMeasure newExperimentMeasure = null;
                var queryMeasures = from p in db.Measures select p;

                foreach (UsersInExperiment user in CurExperiment.UsersInExperiments)
                {
                    foreach (var measure in queryMeasures)
                    {
                        if (measure.Name.CompareTo("Operator") == 0)
                        {
                            foreach (String id in dmIDs)
                            {
                                newExperimentMeasure = new ExperimentMeasure
                                {
                                    ExperimentID     = CurExperiment.ExperimentID,
                                    MeasureID        = measure.MeasureID,
                                    UserID           = user.UserID,
                                    ExperimentEntity = entityMap[id],
                                    Allowed          = false
                                };
                                db.ExperimentMeasures.InsertOnSubmit(newExperimentMeasure);
                            }
                        }
                        else if (measure.Name.CompareTo("Asset") == 0)
                        {
                            foreach (AssetEntity entity in entities)
                            {
                                newExperimentMeasure = new ExperimentMeasure
                                {
                                    ExperimentID     = CurExperiment.ExperimentID,
                                    MeasureID        = measure.MeasureID,
                                    UserID           = user.UserID,
                                    ExperimentEntity = entityMap[entity.AssetName],
                                    Allowed          = false
                                };
                                db.ExperimentMeasures.InsertOnSubmit(newExperimentMeasure);
                            }
                        }
                    }
                }

                db.SubmitChanges();

                // Reload experiment measures
                measureDataModel.LoadExperiementMeasures(CurExperiment,
                                                         UsersInExperiment);
            }
            catch (Exception)
            {
                return;
            }
        }
예제 #36
0
        public void LoadUserExperiments(User user)
        {
            if (user.UserID <= 0)
            {
                return;
            }

            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            var exp = from e in db.Experiments
                              where e.CreatorID == user.UserID
                              select e;
            Experiments = exp.ToArray();

            ExperimentNames = (from e in db.Experiments
                               where e.CreatorID == user.UserID
                              select e.Name).ToArray();
        }
예제 #37
0
        public void LoadExperimentConfigs(Experiment experiment)
        {
            if ((experiment == null) || (experiment.ExperimentID <= 0))
            {
                return;
            }

            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            var config = from c in db.Configs
                              where c.ExperimentID == experiment.ExperimentID
                              select c;
            Configs = config.ToArray();

            ConfigNames = (from c in db.Configs
                           where c.ExperimentID == experiment.ExperimentID
                              select c.Name).ToArray();

            CurExperimentID = experiment.ExperimentID;
        }
예제 #38
0
        public void SaveScenarioFileInfo()
        {
            if (CurExperiment == null)
            {
                return;
            }

            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            Experiment experiment = null;

            var query = from e in db.Experiments
                      where e.ExperimentID == CurExperiment.ExperimentID
                      select e;

            try
            {
                experiment = query.Single();
            }
            catch (Exception)
            {
                return;
            }

            experiment.ScenarioFilePath = CurExperiment.ScenarioFilePath;
            experiment.ScenarioFileType = CurExperiment.ScenarioFileType;

            db.SubmitChanges();
        }
예제 #39
0
        public bool AddNewConfig(CreateConfigInfo newConfigInfo)
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    Config newConfig = new Config
                    {
                        Name = newConfigInfo.Name,
                        ExperimentID = newConfigInfo.ExperimentID
                    };

                    db.Configs.InsertOnSubmit(newConfig);
                    db.SubmitChanges();
                }
                catch (SqlException e)
                {
                    MessageBox.Show("Database Error: " + e.Message, "Config Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    return false;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return false;
                }
                finally
                {
                    ts.Complete();
                    ts.Dispose();
                    db = null;
                }
            }

            return true;
        }
예제 #40
0
        public void LoadExperiementMeasures(Experiment currentExperiment,
                                            ObservableCollection <User> experimentUsers)
        {
            VisDashboardDataDataContext db = null;

            // Parameter checking
            if ((currentExperiment == null) || (experimentUsers == null) ||
                (experimentUsers.Count == 0))
            {
                return;
            }

            // Connect to database
            db = new VisDashboardDataDataContext();
            var query = from em in db.ExperimentMeasures
                        where em.ExperimentID == currentExperiment.ExperimentID
                        select em;

            ExperimentMeasure [] expMeasures = query.ToArray();

            // Clear Radio buttons
            ClearRadioButtons();

            // Delete Existing scenerio specific entity measures
            for (int j = 0; j < fullMeasureCollection.Count; j++)
            {
                if (fullMeasureCollection[j].ExperimentEntityID > 0)
                {
                    fullMeasureCollection.Remove(fullMeasureCollection[j]);
                    j--;
                }
            }

            // Add scenerio specific entity measures
            int           numAdded         = 0;
            List <string> addedEntityNames = new List <string>();

            for (int j = 0; j < fullMeasureCollection.Count; j++)
            {
                for (int i = 0; i < expMeasures.Length; i++)
                {
                    if ((fullMeasureCollection[j].MeasureID == expMeasures[i].MeasureID) && (expMeasures[i].ExperimentEntityID > 0) &&
                        (addedEntityNames.Contains(expMeasures[i].ExperimentEntity.Name) != true))
                    {
                        MeasureSelection insertMeasure = new MeasureSelection(expMeasures[i].ExperimentEntity.Name, fullMeasureCollection[j].Category,
                                                                              fullMeasureCollection[j].SubCategory,
                                                                              MeasureRowType.DataValue, numOperators, fullMeasureCollection[j].MeasureID);
                        insertMeasure.ExperimentEntityID = (int)expMeasures[i].ExperimentEntityID;
                        fullMeasureCollection.Insert(j + numAdded + 1, insertMeasure);
                        addedEntityNames.Add(expMeasures[i].ExperimentEntity.Name);
                        numAdded++;
                        fullMeasureCollection[j].MeasureDisabled = true;
                    }
                }
                j       += numAdded;
                numAdded = 0;
                addedEntityNames.Clear();
            }

            // Reload the display
            UpdateVisMeasureCollection();

            // Fill out the radio button table
            for (int i = 0; i < expMeasures.Length; i++)
            {
                for (int j = 0; j < fullMeasureCollection.Count; j++)
                {
                    if ((fullMeasureCollection[j].MeasureID == expMeasures[i].MeasureID) &&
                        ((!expMeasures[i].ExperimentEntityID.HasValue) || (fullMeasureCollection[j].ExperimentEntityID == expMeasures[i].ExperimentEntityID)))
                    {
                        for (int z = 0; z < experimentUsers.Count; z++)
                        {
                            if (experimentUsers[z].UserID == expMeasures[i].UserID)
                            {
                                if ((expMeasures[i].Allowed.HasValue && (expMeasures[i].Allowed == true)) ||
                                    (expMeasures[i].Allowed.HasValue == false))
                                {
                                    // Set the radio button
                                    fullMeasureCollection[j][z] = RadioButtonType.On;
                                    break;
                                }
                            }
                        }
                        break;
                    }
                }
            }

            // Recalculate all rollups
            RefreshAllCol();

            // Recalculate Subcategory rollups
            RefreshSubCategory();

            // Recalculated Category rollups
            RefreshCategory();
        }
예제 #41
0
        public void LoadConfigDisplayInfo()
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            bool userFound = false;

            if (CurConfig == null)
            {
                return;
            }

            // Load Available Display Names
            displayNames = new ObservableCollection<string>();
            ConfigDisplayTable = new ObservableCollection<ExperimentDisplay>();

            List<ExperimentDisplay> expDisplayAll = (from eD in db.ExperimentDisplays
                                                      join uIc in db.UsersInConfigs on
                                                      new { eD.UserID, ConfigID = CurConfig.ConfigID }
                                                      equals
                                                      new { uIc.UserID, uIc.ConfigID }
                                                      where eD.ExperimentID == CurExperimentID
                                                      select eD).ToList();

            foreach (ExperimentDisplay expDisplay in expDisplayAll)
            {
                // Make sure all users in configuration have access to this display
                foreach (User user in UsersInConfig)
                {
                    userFound = false;
                    foreach (ExperimentDisplay expDisplay2 in expDisplayAll)
                    {
                        if ((expDisplay2.UserID == user.UserID) &&
                            (expDisplay2.DisplayID == expDisplay.DisplayID))
                        {
                            userFound = true;
                            break;
                        }
                    }
                    if (!userFound)
                    {
                        break;
                    }
                }
                if ((userFound) && (!DisplayNames.Contains(expDisplay.Display.Name)))
                {
                    // Add this Display to the available Display list
                    ConfigDisplayTable.Add(expDisplay);
                    DisplayNames.Add(expDisplay.Display.Name);
                }
            }

            OnPropertyChanged("DisplayNames");

        }
예제 #42
0
        public void SaveDatabaseChanges()
        {
            if (dbContext != null)
            {
                // Add pending adds
                foreach (UsersInExperiment addObject in pendingAdds)
                {
                    // Make sure this add object does not already exist
                    UsersInExperiment[] userInExperiment = (from uIe in dbContext.UsersInExperiments
                                                            where ((uIe.UserID == addObject.UserID) && (uIe.ExperimentID == ExpDataModel.CurExperiment.ExperimentID))
                                                            select uIe).ToArray();

                    if (userInExperiment.Length == 0)
                    {
                        dbContext.UsersInExperiments.InsertOnSubmit(addObject);
                    }
                }

                // Add pending deletes
                foreach (int deleteUserID in pendingDeletes)
                {
                    UsersInExperiment[] userInExperiment = (from uIe in dbContext.UsersInExperiments
                                                            where ((uIe.UserID == deleteUserID) && (uIe.ExperimentID == ExpDataModel.CurExperiment.ExperimentID))
                                                            select uIe).ToArray();
                    if (userInExperiment.Length == 1)
                    {
                        DatabaseHelper.DeleteByPK<UsersInExperiment, int>(userInExperiment[0].ID, dbContext);                    
                    }
                }

                dbContext.SubmitChanges();
                ts.Complete();
                ts.Dispose();
                dbContext = null;
            }
        }
예제 #43
0
        public Boolean AddCurrentDisplay()
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    // Copy data into new object
                    ConfigDisplay newConfigDisplay = new ConfigDisplay
                    {
                        Name = CurConfigDisplay.Name,
                        ConfigID = CurConfig.ConfigID,
                        DisplayID = CurConfigDisplay.Display.DisplayID,
                        MeasureName = CurConfigDisplay.MeasureName,
                        MetricName = CurConfigDisplay.MetricName,
                        NumFactors = CurConfigDisplay.NumFactors,
                        NumBlockedFactors = CurConfigDisplay.NumBlockedFactors,
                        Width = CurConfigDisplay.Width,
                        Height = CurConfigDisplay.Height
                    };

                    // Copy DisplayFactors to new object
                    foreach (DisplayFactor factor in CurConfigDisplay.DisplayFactors)
                    {
                        DisplayFactor newDisplayFactor = new DisplayFactor
                        {
                            FactorName = factor.FactorName,
                            FactorLabel = factor.FactorLabel,
                            FactorPos = factor.FactorPos
                        };
                        newConfigDisplay.DisplayFactors.Add(newDisplayFactor);
                    }

                    // Copy DisplayBlockedFactors to new object
                    foreach (DisplayBlockedFactor blockedFactor in CurConfigDisplay.DisplayBlockedFactors)
                    {
                        DisplayBlockedFactor newDisplayBlockedFactor = new DisplayBlockedFactor
                        {
                            MeasureID = blockedFactor.MeasureID,
                            LevelName = blockedFactor.LevelName
                        };
                        newConfigDisplay.DisplayBlockedFactors.Add(newDisplayBlockedFactor);
                    }

                    db.ConfigDisplays.InsertOnSubmit(newConfigDisplay);
                    db.SubmitChanges();
                }
                catch (SqlException e)
                {
                    MessageBox.Show("Database Error: " + e.Message, "Display Creation Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    return false;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return false;
                }
                finally
                {
                    ts.Complete();
                    ts.Dispose();
                    db = null;
                }
            }

            return true;
        }
예제 #44
0
        public void LoadConfigInfo()
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            bool userFound = false;

            if (CurConfig == null)
            {
                return;
            }

            // Reset the CurConfigDisplay
            ClearConfigDisplay();

            // Clear the Display Builder
            ClearDisplayBuilder();

            // All Users in an experiment
            var allUsers = from uIe in db.UsersInExperiments
                           where uIe.ExperimentID == CurExperimentID
                           select uIe.User;

            // Load Users in Config
            var usersInExp = from u in db.Users
                             join uIe in db.UsersInConfigs on
                             new { u.UserID, ConfigID = CurConfig.ConfigID }
            equals
            new { uIe.UserID, uIe.ConfigID }
            orderby u.Username
            select u;

            UsersInConfig = new ObservableCollection <User>();
            usersInExp.ToList().ForEach(x => UsersInConfig.Add(x));;

            // Load Users not in Config
            var usersNotInExp = allUsers.Except(usersInExp);

            UsersNotInConfig = new ObservableCollection <User>();
            usersNotInExp.ToList().ForEach(x => UsersNotInConfig.Add(x));

            // Load list of users names
            if ((usersInExp.ToList() != null) && (usersInExp.ToList().Count > 0))
            {
                CurConfigUsers = new String[usersInExp.ToList().Count];
                for (int i = 0; i < usersInExp.ToList().Count; i++)
                {
                    CurConfigUsers[i] = usersInExp.ToList()[i].Username;
                }
            }
            else
            {
                CurConfigUsers = null;
            }

            // Load available measure names
            ConfigMeasuresTable = new ObservableCollection <ExperimentMeasure>();

            List <ExperimentMeasure> expMeasuresAll = (from eM in db.ExperimentMeasures
                                                       join uIc in db.UsersInConfigs on
                                                       new { eM.UserID, ConfigID = CurConfig.ConfigID }
                                                       equals
                                                       new { uIc.UserID, uIc.ConfigID }
                                                       where eM.ExperimentID == CurExperimentID
                                                       select eM).ToList();

            foreach (ExperimentMeasure expMeasure in expMeasuresAll)
            {
                if ((expMeasure.Allowed.HasValue) && (expMeasure.Allowed == false))
                {
                    continue;
                }

                // Make sure all users in configuration have access to this measure
                foreach (User user in UsersInConfig)
                {
                    userFound = false;
                    foreach (ExperimentMeasure expMeasure2 in expMeasuresAll)
                    {
                        if ((expMeasure2.UserID == user.UserID) &&
                            (expMeasure2.MeasureID == expMeasure.MeasureID))
                        {
                            userFound = true;
                            break;
                        }
                    }
                    if (!userFound)
                    {
                        break;
                    }
                }
                if (userFound)
                {
                    // Add this measure to the available measure list
                    ConfigMeasuresTable.Add(expMeasure);
                }
            }

            measureNames = new ObservableCollection <string>();
            foreach (ExperimentMeasure expMeasure in ConfigMeasuresTable)
            {
                if (!MeasureNames.Contains(expMeasure.Measure.Category))
                {
                    MeasureNames.Add(expMeasure.Measure.Category);
                }
            }
            OnPropertyChanged("MeasureNames");

            // Load Display Info
            LoadConfigDisplayInfo();
        }
예제 #45
0
        public Boolean RemoveCurrentDisplay()
        {
            // Remove the current display if it already exists
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();
            ConfigDisplay existingConfigDisplay = null;

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    var query = from cd in db.ConfigDisplays
                                where cd.ConfigID == CurConfig.ConfigID &&
                                cd.Name == CurConfigDisplay.Name
                                select cd;

                    try
                    {
                        existingConfigDisplay = query.Single();
                    }
                    catch (Exception)
                    {
                        return false;
                    }

                    // Delete any contained DisplayFactors
                    foreach (DisplayFactor factor in existingConfigDisplay.DisplayFactors)
                    {
                        db.DisplayFactors.DeleteOnSubmit(factor);
                    }

                    // Delete any contained DisplayBlockedFactors
                    foreach (DisplayBlockedFactor blockedFactor in existingConfigDisplay.DisplayBlockedFactors)
                    {
                        db.DisplayBlockedFactors.DeleteOnSubmit(blockedFactor);
                    }

                    // Delete this ConfigDisplay
                    db.ConfigDisplays.DeleteOnSubmit(existingConfigDisplay);

                    db.SubmitChanges();
                }
                catch (SqlException e)
                {
                    MessageBox.Show("Database Error: " + e.Message, "Display Deletion Failed", MessageBoxButton.OK, MessageBoxImage.Error);
                    return false;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return false;
                }
                finally
                {
                    ts.Complete();
                    ts.Dispose();
                    db = null;
                }
            }

            return true;
        }
예제 #46
0
        public void ReloadExperimentInfo()
        {
            VisDashboardDataDataContext db = new VisDashboardDataDataContext();

            if (CurExperiment == null)
            {
                return;
            }

            // All Users
            var allUsers = (from u in db.Users
                           join uIr in db.UserInRoles on
                             new { u.UserID, RoleName = "Experimenter" }
                             equals
                             new { uIr.UserID, uIr.Role.RoleName }
                             orderby u.Username
                           select u)
                           .Union
                            (from u in db.Users
                           join uIr in db.UserInRoles on
                             new { u.UserID, RoleName = "Operator" }
                             equals
                             new { uIr.UserID, uIr.Role.RoleName }
                             orderby u.Username
                           select u);

            // Load Users in Experiment
            var usersInExp = from u in db.Users
                             join uIe in db.UsersInExperiments on
                             new { u.UserID, ExperimentID = CurExperiment.ExperimentID }
                             equals
                             new { uIe.UserID, uIe.ExperimentID }
                             orderby u.Username
                             select u;
            UsersInExperiment = new ObservableCollection<User>();
            usersInExp.ToList().ForEach(x => UsersInExperiment.Add(x)); ;

            // Load Users not in Experiment
            var usersNotInExp = allUsers.Except(usersInExp);
            UsersNotInExperiment = new ObservableCollection<User>();
            usersNotInExp.ToList().ForEach(x => UsersNotInExperiment.Add(x));

            // Load list of users names
            if ((usersInExp.ToList() != null) && (usersInExp.ToList().Count > 0))
            {
                CurExperimentUsers = new String[usersInExp.ToList().Count];
                for (int i = 0; i < usersInExp.ToList().Count; i++)
                {
                    CurExperimentUsers[i] = usersInExp.ToList()[i].Username;
                }
            }
            else
            {
                CurExperimentUsers = null;
            }
        }