Exemplo n.º 1
0
 public UserProfileLoader(
     IDataApiClient dataApiClient,
     IReadonlyObjectDatabase <UserProfile> userDatabase)
 {
     this.dataApiClient = dataApiClient;
     this.userDatabase  = userDatabase;
 }
        public AutoCompleteTextBoxViewModel(
            Func <T, string> displayNameFunc,
            IReadonlyObjectDatabase <T> objectDatabase,
            IAutoCompleteMatcher <T> autoCompleteMatcher,
            uint maxSuggestions            = 10,
            bool allowNewValue             = false,
            Func <string, T> objectBuilder = null)
        {
            if (allowNewValue && objectBuilder == null)
            {
                throw new ArgumentNullException(nameof(objectBuilder), "Object builder must be set, if new values are allowed");
            }

            this.displayNameFunc     = displayNameFunc;
            this.objectDatabase      = objectDatabase;
            this.autoCompleteMatcher = autoCompleteMatcher;
            this.maxSuggestions      = maxSuggestions;
            AcceptsNewValues         = allowNewValue;
            this.objectBuilder       = objectBuilder;
            updateSuggestionsTimer   = new Timer(state => UpdateSuggestions());

            SelectNextCommand       = new RelayCommand(SelectNextSuggestion);
            SelectPreviousCommand   = new RelayCommand(SelectPreviousSuggestion);
            CloseSuggestionsCommand = new RelayCommand(() => ShowSuggestions = false);

            SetBorderBrush();
        }
        public ProtocolParameterViewModel(
            IDataApiClient dataApiClient,

            IReadonlyObjectDatabase <DataCollectionProtocolParameter> protocolParameterDatabase,
            DataCollectionProtocolParameter parameter = null)
        {
            valueViewModelFactory = new ParameterValueViewModelFactory(dataApiClient);

            NameAutoCompleteViewModel = new AutoCompleteTextBoxViewModel <DataCollectionProtocolParameter>(
                x => x.Name,
                protocolParameterDatabase,
                new ProtocolParameterAutoCompleteMatcher(),
                allowNewValue: true,
                objectBuilder: name => new DataCollectionProtocolParameter(name, null, false, DataCollectionProtocolParameterType.Text));
            NameAutoCompleteViewModel.PropertyChanged += NameAutoCompleteViewModel_PropertyChanged;
            var dataTypes = Task.Run(async() => await dataApiClient.ListCollectionNamesAsync(true)).Result;

            DataTypeAutoCompleteViewModel = new AutoCompleteTextBoxViewModel <string>(
                x => x,
                new FixedSetDatabase <string>(dataTypes.ToDictionary(x => x, x => x)),
                new StringAutoCompleteMatcher());
            DataTypeAutoCompleteViewModel.PropertyChanged += DataTypeAutoCompleteViewModel_PropertyChanged;
            ValueViewModel = valueViewModelFactory.Create(SelectedParameterType, DataTypeAutoCompleteViewModel.SelectedObject);
            if (parameter != null)
            {
                NameAutoCompleteViewModel.SelectedObject = Task.Run(() => protocolParameterDatabase.GetFromIdAsync(parameter.Id).Result).Result;
                IsMandatory           = parameter.IsMandatory;
                SelectedParameterType = parameter.Type;
                DataTypeAutoCompleteViewModel.SelectedObject = parameter.DataType;
                DefaultValue = parameter.DefaultValue;
            }
        }
        public CollectionSettingsViewModel(
            CollectionInformation collectionInformation,
            List <CollectionUserPermissions> collectionPermissions,
            IDataApiClient dataApiClient,
            IReadonlyObjectDatabase <UserProfile> userDatabase)
        {
            this.dataApiClient = dataApiClient;
            this.userDatabase  = userDatabase;

            CollectionName                = collectionInformation.CollectionName;
            IsAdmin                       = collectionInformation.UserRoles.Contains(Role.Admin);
            IsUserManager                 = collectionInformation.UserRoles.Intersect(new[] { Role.Admin, Role.UserManager }).Any();
            DisplayName                   = collectionInformation.DisplayName ?? collectionInformation.CollectionName;
            Description                   = collectionInformation.Description;
            SelectedIdGeneratorType       = collectionInformation.IdGeneratorType;
            NonAdminUsersCanOverwriteData = collectionInformation.NonAdminUsersCanOverwriteData;
            IsProtected                   = collectionInformation.IsProtected;
            IsHidden                      = collectionInformation.IsHidden;
            var currentUser = dataApiClient.LoggedInUsername;
            var userPermissionViewModels = BuildUserPermissionsViewModels(collectionInformation, collectionPermissions, currentUser);

            UserPermissions = new ObservableCollection <UserPermissionsViewModel>(userPermissionViewModels);
            Validators      = collectionInformation.ValidatorDefinitions.Select(x => new ValidatorDefinitionViewModel(x)).ToList();

            AddUserCommand    = new RelayCommand(AddUser, () => CanEditUserPermissions);
            DeleteUserCommand = new RelayCommand(DeleteUser, () => CanEditUserPermissions);
            SaveCommand       = new AsyncRelayCommand <IClosable>(Save);
            CancelCommand     = new RelayCommand <IClosable>(closable => closable.Close(false));
        }
Exemplo n.º 5
0
        public UserManagementViewModel(
            IDataApiClient dataApiClient,
            IReadonlyObjectDatabase <UserProfile> userDatabase)
        {
            this.dataApiClient = dataApiClient;

            try
            {
                var userProfileLoader = new UserProfileLoader(dataApiClient, userDatabase);
                var userProfiles      = Task.Run(() => userProfileLoader.LoadAsync()).Result
                                        .OrderBy(x => x.Username);
                UserProfiles = new ObservableCollection <UserProfileViewModel>(userProfiles);
            }
            catch (Exception e)
            {
                StaticMessageBoxSpawner.Show($"Failed to load user profiles: {e.InnermostException().Message}");
                UserProfiles = new ObservableCollection <UserProfileViewModel>();
            }
            CreateUserViewModel              = new CreateUserViewModel(userDatabase, dataApiClient);
            CreateUserViewModel.UserCreated += (sender, userProfile) => UserProfiles.Add(userProfile);

            SaveUserDetailsCommand = new RelayCommand(SaveUserDetails, () => SelectedUserProfile != null);
            AddRoleCommand         = new RelayCommand(AddRole, CanEditUser);
            RemoveRoleCommand      = new RelayCommand(RemoveRole, CanEditUser);
            DeleteUserCommand      = new RelayCommand(DeleteUser, CanEditUser);
        }
Exemplo n.º 6
0
 public ProjectSelectionViewModel(IReadonlyObjectDatabase <DataProject> projectDatabase)
 {
     ProjectAutoCompleteViewModel = new AutoCompleteTextBoxViewModel <DataProject>(
         x => x.Id,
         projectDatabase,
         new DataProjectAutoCompleteMatcher());
 }
Exemplo n.º 7
0
        public MainViewModel(
            IDataApiClient dataApiClient,
            DataVisualizer dataVisualizer,
            IReadonlyObjectDatabase <UserProfile> userDatabase,
            IReadonlyObjectDatabase <DataSet> dataSetDatabase,
            IReadonlyObjectDatabase <DataProject> dataProjectDatabase,
            IClipboard clipboard,
            IClosable mainWindow)
        {
            this.dataApiClient       = dataApiClient;
            this.userDatabase        = userDatabase;
            this.mainWindow          = mainWindow;
            DataSetMainViewModel     = new DataSetMainViewModel(dataApiClient, dataSetDatabase, dataProjectDatabase, clipboard);
            CollectionsMainViewModel = new CollectionsMainViewModel(dataApiClient, dataVisualizer, userDatabase, clipboard);

            var passwordBoxSpawner = new WpfPasswordBoxSpawner();
            var loginViewSpawner   = new WpfWindowSpawner <LoginViewModel>(vm => new LoginWindow {
                ViewModel = vm
            });
            var changePasswordViewSpawner = new WpfWindowSpawner <ChangePasswordViewModel>(vm => new ChangePasswordWindow {
                ViewModel = vm
            });

            UserSwitchViewModel = new UserSwitchViewModel(
                dataApiClient,
                LoginSuccessful,
                LoginFailed,
                passwordBoxSpawner,
                loginViewSpawner,
                changePasswordViewSpawner);
            OpenUserManagementWindowCommand = new RelayCommand(OpenUserManagementWindow);
            OpenAboutWindowCommand          = new RelayCommand(OpenAboutWindow);
        }
Exemplo n.º 8
0
 public UserSelectionViewModel(IReadonlyObjectDatabase <UserProfile> userDatabase)
 {
     UserAutoCompleteViewModel = new AutoCompleteTextBoxViewModel <UserProfile>(
         x => $"{x.FirstName} {x.LastName} ({x.Username})",
         userDatabase,
         new UserAutoCompleteMatcher());
     OkCommand     = new RelayCommand <IClosable>(SaveAndClose, CanSave);
     CancelCommand = new RelayCommand <IClosable>(closable => closable.Close(false));
 }
 public async Task <IEnumerable <string> > FindMatches(
     IReadonlyObjectDatabase <string> objectDatabase,
     string searchText,
     uint maxSuggestions)
 {
     return((await objectDatabase.GetManyAsync())
            .Where(str => Match(str, searchText))
            .Take((int)maxSuggestions));
 }
        public async Task <IEnumerable <TDataServiceDefinition> > FindMatches(
            IReadonlyObjectDatabase <TDataServiceDefinition> objectDatabase,
            string searchText,
            uint maxSuggestions)
        {
            var query = $"Data.Id LIKE '%{searchText}%'";

            return(await objectDatabase.GetManyAsync(query, limit : maxSuggestions));
        }
Exemplo n.º 11
0
        public CollectionListViewModel(
            IDataApiClient dataApiClient,
            IReadonlyObjectDatabase <UserProfile> userDatabase)
        {
            this.dataApiClient = dataApiClient;
            this.userDatabase  = userDatabase;

            RefreshCollectionListCommand = new AsyncRelayCommand(Reload);
        }
Exemplo n.º 12
0
        public async Task <IEnumerable <DataSet> > FindMatches(
            IReadonlyObjectDatabase <DataSet> objectDatabase,
            string searchText,
            uint maxSuggestions)
        {
            var normalizedSearchText = SearchTextNormalizer.Normalize(searchText);
            var searchQuery          = $"Data.{nameof(DataSet.Id)} LIKE '%{normalizedSearchText}%'";

            return(await objectDatabase.GetManyAsync(searchQuery, limit : maxSuggestions));
        }
Exemplo n.º 13
0
 public CreateUserViewModel(
     IReadonlyObjectDatabase <UserProfile> userDatabase,
     IDataApiClient dataApiClient)
 {
     this.userDatabase  = userDatabase;
     this.dataApiClient = dataApiClient;
     PasswordBox        = new PasswordBox();
     PasswordRepeatBox  = new PasswordBox();
     SaveCommand        = new RelayCommand(SaveAndClose, CanSave);
 }
Exemplo n.º 14
0
        public async Task <IEnumerable <UserProfile> > FindMatches(
            IReadonlyObjectDatabase <UserProfile> objectDatabase,
            string searchText,
            uint maxSuggestions)
        {
            var allUserProfiles = await objectDatabase.GetManyAsync(); // User profile SQL queries is not supported

            // and hence we have to do the search ourself
            return(allUserProfiles.Where(user => Match(user, searchText)));
        }
Exemplo n.º 15
0
        public async Task <IEnumerable <DataCollectionProtocolParameter> > FindMatches(
            IReadonlyObjectDatabase <DataCollectionProtocolParameter> objectDatabase,
            string searchText,
            uint maxSuggestions)
        {
            var normalizedSearchText = SearchTextNormalizer.Normalize(searchText);
            var query = $"Data.Name LIKE '%{normalizedSearchText}%'";

            return(await objectDatabase.GetManyAsync(query, limit : maxSuggestions));
        }
        public Task <IEnumerable <JObject> > FindMatches(
            IReadonlyObjectDatabase <JObject> objectDatabase,
            string searchText,
            uint maxSuggestions)
        {
            var normalizedSearchText = SearchTextNormalizer.Normalize(searchText);
            var query = $"Data.Id LIKE '%{normalizedSearchText}%'";

            return(objectDatabase.GetManyAsync(query, limit: maxSuggestions));
        }
Exemplo n.º 17
0
 public CollectionsMainViewModel(
     IDataApiClient dataApiClient,
     DataVisualizer dataVisualizer,
     IReadonlyObjectDatabase <UserProfile> userDatabase,
     IClipboard clipboard)
 {
     this.dataApiClient      = dataApiClient;
     this.dataVisualizer     = dataVisualizer;
     this.clipboard          = clipboard;
     collectionSwitcher      = new CollectionSwitcher(SwitchToCollection, Constants.DefaultQuery);
     CollectionListViewModel = new CollectionListViewModel(dataApiClient, userDatabase);
     CollectionListViewModel.PropertyChanged += CollectionListViewModel_PropertyChanged;
 }
Exemplo n.º 18
0
        public CollectionViewModel(
            CollectionInformation collectionInformation,
            IDataApiClient dataApiClient,
            IReadonlyObjectDatabase <UserProfile> userDatabase)
        {
            CollectionInformation = collectionInformation;
            this.dataApiClient    = dataApiClient;

            this.userDatabase = userDatabase;
            Permission        = TranslatePermission(collectionInformation.UserRoles);

            CanEditCollectionSettings           = collectionInformation.UserRoles.Intersect(new[] { Role.UserManager, Role.Admin }).Any();
            OpenCollectionSettingsWindowCommand = new AsyncRelayCommand(OpenCollectionSettingsWindow, () => CanEditCollectionSettings);
        }
Exemplo n.º 19
0
        public DataSetMainViewModel(
            IDataApiClient dataApiClient,
            IReadonlyObjectDatabase <DataSet> dataSetDatabase,
            IReadonlyObjectDatabase <DataProject> projectDatabase,
            IClipboard clipboard)
        {
            this.dataApiClient           = dataApiClient;
            this.dataSetDatabase         = dataSetDatabase;
            this.projectDatabase         = projectDatabase;
            this.clipboard               = clipboard;
            DataSetAutoCompleteViewModel = new AutoCompleteTextBoxViewModel <DataSet>(
                x => x.Id,
                dataSetDatabase,
                new DataSetAutoCompleteMatcher());
            DataSetAutoCompleteViewModel.PropertyChanged += DataSetAutoCompleteViewModel_PropertyChanged;
            ProjectAutoCompleteViewModel = new AutoCompleteTextBoxViewModel <DataProject>(
                x => x.Id,
                projectDatabase,
                new DataProjectAutoCompleteMatcher());
            ProjectAutoCompleteViewModel.PropertyChanged += ProjectAutoCompleteViewModel_PropertyChanged;

            LoadDataSetListCommand     = new AsyncRelayCommand(LoadDataSetList);
            LoadDataProjectListCommand = new AsyncRelayCommand(LoadDataProjectList);
        }