コード例 #1
0
        private void OpenLoginWindow()
        {
            var originalUsername = LoginViewModel.Username;
            var originalPassword = LoginViewModel.Password;

            do
            {
                var result = loginViewSpawner.SpawnBlocking(LoginViewModel);
                if (result == true)
                {
                    var authenticationResult = dataApiClient.Login(LoginViewModel.Username, LoginViewModel.Password);
                    if (authenticationResult.IsAuthenticated)
                    {
                        loginSuccessfulCallback();
                        break;
                    }
                    StaticMessageBoxSpawner.Show("Login failed. Try again...");
                }
                else if (originalUsername != null)
                {
                    LoginViewModel.Username = originalUsername;
                    LoginViewModel.Password = originalPassword;
                    break;
                }
                else
                {
                    break;
                }
            } while (true);
            if (!dataApiClient.IsLoggedIn)
            {
                loginFailedCallback();
            }
        }
コード例 #2
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);
        }
コード例 #3
0
        private async void App_OnStartup(object sender, StartupEventArgs e)
        {
            StaticUiUpdateNotifier.Notifier = new WpfUiUpdateNotifier();
            StaticMessageBoxSpawner.Spawner = new WpfMessageBoxSpawner();

            var dataApiClient = new DataApiClient(new ApiConfiguration(Settings.Default.ApiServerAddress, Settings.Default.ApiServerPort));

            dataApiClient.Login();
            if (!dataApiClient.IsLoggedIn)
            {
                StaticMessageBoxSpawner.Show("Could not log into DataAPI. Shutting down...");
                Shutdown(-1);
                return;
            }
            var permissionCheckerResult = await DataPermissionChecker.Check(dataApiClient, new Dictionary <string, IList <Role> >
            {
                { nameof(DataServiceDefinition), new List <Role> {
                      Role.Viewer, Role.DataProducer
                  } },
                { nameof(IDataServiceTarget), new List <Role> {
                      Role.Viewer, Role.DataProducer
                  } }
            });

            if (!permissionCheckerResult.HasSufficientPermissions)
            {
                StaticMessageBoxSpawner.Show("You don't have enough permissions on the DataAPI to run this application. Please contact Inno-IT.");
                Shutdown(-1);
                return;
            }
            var dataServiceDefinitionDatabase = new GenericDatabase <DataServiceDefinition>(dataApiClient);
            var dataTypeList           = new DataApiDataTypeList(dataApiClient);
            var usernameProxy          = new DataApiUsernameProxy(dataApiClient);
            var sqlExpressionValidator = new SqlExpressionValidator(dataApiClient);
            var mainWindow             = new MainWindow();
            var mainViewModel          = new MainViewModel(
                dataApiClient,
                dataServiceDefinitionDatabase,
                mainWindow,
                dataTypeList,
                usernameProxy,
                sqlExpressionValidator);

            mainWindow.ViewModel = mainViewModel;
            mainWindow.ShowDialog();
        }
コード例 #4
0
        private void PerformMeasurement(object sender, Annotation annotation)
        {
            if (annotation.Points.Count != 2)
            {
                return;
            }
            var imagePoint1     = annotation.Points[0];
            var imagePoint2     = annotation.Points[1];
            var realWorldPoint1 = pinholeToPlaneProjection.Transform(imagePoint1);
            var realWorldPoint2 = pinholeToPlaneProjection.Transform(imagePoint2);
            var distance        = realWorldPoint1.DistanceTo(realWorldPoint2);

            StaticMessageBoxSpawner.Show(
                $"Distance: {distance:F2} mm{Environment.NewLine}"
                + $"{Environment.NewLine}"
                + $"Point 1:  ({imagePoint1.X:F1} px, {imagePoint1.Y:F1} px)  =>  ({realWorldPoint1.X:F2} mm, {realWorldPoint1.Y:F2} mm){Environment.NewLine}"
                + $"Point 2:  ({imagePoint2.X:F1} px, {imagePoint2.Y:F1} px)  =>  ({realWorldPoint2.X:F2} mm, {realWorldPoint2.Y:F2} mm)");
        }
コード例 #5
0
        private async void ShowDerivedData()
        {
            try
            {
                var dataObjectLoader = new DataObjectLoader(dataApiClient, clipboard, new DummyCollectionSwitcher());
                var dataObjects      = await dataObjectLoader.Load(Model.DerivedData, dataObject => { });

                var windowTitle         = $"Derived data for upload '{Model.Filename ?? Model.Id}'";
                var dataWindowViewModel = new DataWindowViewModel(windowTitle, dataObjects);
                var dataWindow          = new DataWindow
                {
                    ViewModel = dataWindowViewModel
                };
                dataWindow.ShowDialog();
            }
            catch (Exception e)
            {
                StaticMessageBoxSpawner.Show($"Could not show derived data: {e.InnermostException().Message}");
            }
        }
コード例 #6
0
        private async Task Delete()
        {
            if (StaticMessageBoxSpawner.Show(
                    $"Are you sure you want to delete '{Id}'",
                    "Delete?",
                    MessageBoxButtons.YesNo)
                != MessageBoxResult.Yes)
            {
                return;
            }

            try
            {
                await dataApiClient.DeleteAsync(DataType, Id);

                deletionCallback(this);
            }
            catch (Exception e)
            {
                StaticMessageBoxSpawner.Show($"Could not delete '{Id}': {e.InnermostException().Message}");
            }
        }
コード例 #7
0
        private void ShortIdClicked(object sender, MouseButtonEventArgs e)
        {
            if (DataApiConfiguration == null)
            {
                MessageBox.Show($"BUG: {nameof(DataApiConfiguration)} isn't set for {nameof(ShortIdView)}");
                return;
            }
            var border = sender as Border;

            if (border == null)
            {
                return;
            }
            var stackPanel = border.Child as StackPanel;

            if (stackPanel == null)
            {
                return;
            }
            var textBlock = stackPanel.Children.OfType <TextBlock>().SingleOrDefault();

            if (textBlock == null)
            {
                return;
            }
            var id            = textBlock.Text;
            var query         = $"dataType={Uri.EscapeDataString(ShortId.CollectionName)}&id={Uri.EscapeDataString(ShortId.OriginalId)}";
            var serverAddress = DataApiConfiguration.ServerAddress;

            if (DataApiConfiguration.ServerPort != 443)
            {
                serverAddress += $":{DataApiConfiguration.ServerPort}";
            }
            Clipboard.SetText($"https://{serverAddress}/download/getfile?{query}");
            StaticMessageBoxSpawner.Show($"Short ID '{id}' copied to clipboard");
        }
コード例 #8
0
        private void CopyDataLink(object sender, RoutedEventArgs e)
        {
            if (DataApiConfiguration == null)
            {
                MessageBox.Show($"BUG: {nameof(DataApiConfiguration)} isn't set for {nameof(DataLinkButton)}");
                return;
            }
            if (DataType == null || Id == null)
            {
                MessageBox.Show("Invalid data. This is probably a bug. Contact the application owner.");
                return;
            }
            var query         = $"dataType={Uri.EscapeDataString(DataType)}&id={Uri.EscapeDataString(Id)}";
            var serverAddress = DataApiConfiguration.ServerAddress;

            if (DataApiConfiguration.ServerPort != 443)
            {
                serverAddress += $":{DataApiConfiguration.ServerPort}";
            }
            var link = $"https://{serverAddress}/download/getfile?{query}";

            Clipboard.SetText(link);
            StaticMessageBoxSpawner.Show("Link copied to clipboard");
        }
コード例 #9
0
        public static async Task Download(DataReference dataReference, IDataApiClient dataApiClient)
        {
            try
            {
                var json = await dataApiClient.GetAsync(dataReference.DataType, dataReference.Id);

                if (dataReference.DataType == nameof(DataBlob))
                {
                    var dataBlob  = JsonConvert.DeserializeObject <DataBlob>(json);
                    var extension = dataBlob.Filename != null
                        ? Path.GetExtension(dataBlob.Filename)
                        : ".bin";

                    var fileDialog = new VistaSaveFileDialog
                    {
                        AddExtension    = true,
                        DefaultExt      = extension,
                        OverwritePrompt = true,
                        CheckPathExists = true,
                        Filter          = @"All files (*.*)|*.*",
                        FileName        = dataBlob.Filename
                    };
                    if (fileDialog.ShowDialog() != true)
                    {
                        return;
                    }
                    var outputFilePath = fileDialog.FileName;

                    File.WriteAllBytes(outputFilePath, dataBlob.Data);
                }
                else if (dataReference.DataType == nameof(Image))
                {
                    var image      = JsonConvert.DeserializeObject <Image>(json);
                    var extension  = image.Extension;
                    var fileDialog = new VistaSaveFileDialog
                    {
                        AddExtension    = true,
                        DefaultExt      = extension,
                        OverwritePrompt = true,
                        CheckPathExists = true,
                        Filter          = @"All files (*.*)|*.*",
                        FileName        = image.Filename ?? $"{image.Id}{extension}"
                    };
                    if (fileDialog.ShowDialog() != true)
                    {
                        return;
                    }
                    var outputFilePath = fileDialog.FileName;

                    File.WriteAllBytes(outputFilePath, image.Data);
                }
                else
                {
                    var fileDialog = new VistaSaveFileDialog
                    {
                        AddExtension    = true,
                        DefaultExt      = ".json",
                        OverwritePrompt = true,
                        CheckPathExists = true,
                        Filter          = @"JSON (*.json)|*.json|All files (*.*)|*.*",
                        FileName        = $"{dataReference.DataType}_{dataReference.Id}.json"
                    };
                    if (fileDialog.ShowDialog() != true)
                    {
                        return;
                    }

                    var outputFilePath = fileDialog.FileName;
                    File.WriteAllText(outputFilePath, json);
                }
            }
            catch (Exception e)
            {
                var errorText = e.InnermostException().Message;
                if (string.IsNullOrEmpty(errorText) && e is ApiException apiException)
                {
                    errorText = apiException.StatusCode.ToString();
                }
                StaticMessageBoxSpawner.Show($"Could not download data: {errorText}");
            }
        }
コード例 #10
0
 private void LoginFailed()
 {
     StaticMessageBoxSpawner.Show("No valid login. Shutting down...");
     mainWindow.Close(false);
 }