public DockerImageListViewModel(AppBrowserViewModel appBrowserViewModel, DockerService service)
        {
            this.appBrowserViewModel = appBrowserViewModel;
            this.service             = service;
            ModuleName = "Images";

            imagesMapper = new ObservableCollectionMapper <DockerImage, DockerImageViewModel>(
                image => new DockerImageViewModel(service, image),
                viewModel => viewModel.Image,
                (image, viewModel) => viewModel.Update(),
                (viewModel1, viewModel2) =>
            {
                int r = string.CompareOrdinal(viewModel1.RepoTagsAsText, viewModel2.RepoTagsAsText);
                if (r == 0)
                {
                    r = string.CompareOrdinal(viewModel1.RepoDigestsAsText, viewModel2.RepoDigestsAsText);
                }
                if (r == 0)
                {
                    r = string.CompareOrdinal(viewModel1.Id, viewModel2.Id);
                }
                return(r);
            }
                );

            RefreshCommand      = new BasicCommand(() => service.Connected, o => service.Refresh());
            DeleteImagesCommand = new BasicCommand(() => service.Connected && SelectedImages.Count > 0, o => DeleteImages());

            SelectedImages.CollectionChanged += (sender, args) => { DeleteImagesCommand.UpdateState(); };

            service.StageChanged += () => appBrowserViewModel.ViewContext.Invoke(Update);

            Update();
        }
示例#2
0
        public EurekaServiceViewModel(AppBrowserViewModel appBrowserViewModel, EurekaService service)
        {
            this.appBrowserViewModel = appBrowserViewModel;
            this.service             = service;

            appMapper = new ObservableCollectionMapper <Tuple <EurekaApplication, EurekaApplicationInstance>, EurekaApplicationViewModel>(
                tuple => new EurekaApplicationViewModel(tuple.Item1, tuple.Item2),
                viewModel => Tuple.Create(viewModel.Application, viewModel.Instance),
                (tuple, viewModel) => viewModel.Update(),
                (viewModel1, viewModel2) =>
            {
                int r = string.CompareOrdinal(viewModel1.AppName, viewModel2.AppName);
                if (r == 0)
                {
                    r = string.CompareOrdinal(viewModel1.HostName, viewModel2.HostName);
                }
                if (r == 0)
                {
                    r = string.CompareOrdinal(viewModel1.InstanceId, viewModel2.InstanceId);
                }
                return(r);
            }
                );

            ConnectCommand                = new BasicCommand(() => !service.Connected, o => service.Connect());
            DisconnectCommand             = new BasicCommand(() => service.Connected, o => service.Disconnect());
            RefreshCommand                = new BasicCommand(() => service.Connected, o => service.RefreshApplications());
            DeregisterApplicationsCommand = new BasicCommand(() => service.Connected && SelectedApplications.Count > 0, o => DeregisterApplications());

            SelectedApplications.CollectionChanged += (sender, args) => { DeregisterApplicationsCommand.UpdateState(); };
            service.StateChanged += () => appBrowserViewModel.ViewContext.Invoke(Update);

            Update();
        }
        public MainForm(AppBrowserViewModel appBrowserViewModel)
        {
            this.appBrowserViewModel = appBrowserViewModel;
            this.viewModel           = appBrowserViewModel.MainForm;

            DataContext = viewModel;

            XamlReader.Load(this);

            ModulesTree.DataContext = viewModel.ModulesTree;
            viewModel.ModulesTree.PropertyChanged += ModulesTreeOnPropertyChanged;
        }
示例#4
0
        public void TestEnvironmentCreation()
        {
            AppBrowserViewModel appBrowserViewModel = new AppBrowserViewModel(new AppBrowser(), new MockViewContext());

            appBrowserViewModel.MainForm.AddEnvironment();
            appBrowserViewModel.Environments[0].AddDockerService();
            appBrowserViewModel.Environments[0].AddEurekaService();

            Assert.That(appBrowserViewModel.Environments[0].Services.Select(s => s.ModuleName).ToArray(), Is.EqualTo(new string[] { "Docker", "Eureka" }));
            Assert.That(appBrowserViewModel.MainForm.ModulesTree.Modules.Select(s => s.ModuleName).ToArray(), Is.EqualTo(new string[] { "New Environment" }));
            Assert.That(appBrowserViewModel.MainForm.ModulesTree.Modules[0].GetSubModules().Select(s => s.ModuleName).ToArray(), Is.EqualTo(new string[] { "Docker", "Eureka" }));
            Assert.That(appBrowserViewModel.MainForm.ModulesTree.SelectedModule, Is.InstanceOf(typeof(EurekaServiceViewModel)));
        }
示例#5
0
        static void Main(string[] args)
        {
            Application         application         = new Application(Platform.Detect);
            AppBrowser          appBrowser          = new AppBrowser();
            EtoViewContext      viewContext         = new EtoViewContext();
            AppBrowserViewModel appBrowserViewModel = new AppBrowserViewModel(appBrowser, viewContext);

            MainForm mainForm = new MainForm(appBrowserViewModel);

            viewContext.MainForm = mainForm;

            application.Run(mainForm);
        }
        public AppEnvironmentViewModel(AppBrowserViewModel appBrowserViewModel, AppEnvironment environment)
        {
            this.appBrowserViewModel = appBrowserViewModel;
            this.environment         = environment;

            serviceMapper = new ObservableCollectionMapper <IService, IServiceViewModel>(
                CreateServiceViewModel,
                viewModel => viewModel.Service,
                (service, viewModel) => viewModel.Update(),
                (viewModel1, viewModel2) => string.CompareOrdinal(viewModel1.ModuleName, viewModel2.ModuleName)
                );

            environment.ServiceListChanged += Update;
            Services.CollectionChanged     += (sender, args) => SubModulesChanged?.Invoke();
            Update();
        }
示例#7
0
        public DockerServiceViewModel(AppBrowserViewModel appBrowserViewModel, DockerService service)
        {
            this.appBrowserViewModel = appBrowserViewModel;
            this.service             = service;
            ModuleName = service.Name;

            imageList     = new DockerImageListViewModel(appBrowserViewModel, service);
            containerList = new DockerContainerListViewModel(appBrowserViewModel, service);

            ConnectCommand    = new BasicCommand(() => !service.Connected, o => service.Connect());
            DisconnectCommand = new BasicCommand(() => service.Connected, o => service.Disconnect());
            RefreshCommand    = new BasicCommand(() => service.Connected, o => service.Refresh());

            service.StageChanged += () => appBrowserViewModel.ViewContext.Invoke(Update);

            Update();
        }
示例#8
0
        public DockerContainerListViewModel(AppBrowserViewModel appBrowserViewModel, DockerService service)
        {
            this.appBrowserViewModel = appBrowserViewModel;
            this.service             = service;
            ModuleName = "Containers";

            containersMapper = new ObservableCollectionMapper <DockerContainer, DockerContainerViewModel>(
                container => new DockerContainerViewModel(service, container),
                viewModel => viewModel.Container,
                (container, viewModel) => viewModel.Update(),
                (viewModel1, viewModel2) =>
            {
                int r = string.CompareOrdinal(viewModel1.Image, viewModel2.Image);
                if (r == 0)
                {
                    r = string.CompareOrdinal(viewModel1.Id, viewModel2.Id);
                }
                return(r);
            }
                );

            RefreshCommand         = new BasicCommand(() => service.Connected, o => service.Refresh());
            StartContainersCommand = new BasicCommand(() => service.Connected && SelectedContainers.Count > 0, o => StartContainers());
            StopContainersCommand  = new BasicCommand(() => service.Connected && SelectedContainers.Count > 0, o => StopContainers());

            SelectedContainers.CollectionChanged += (sender, args) =>
            {
                StartContainersCommand.UpdateState();
                StopContainersCommand.UpdateState();
            };

            service.StageChanged += () => appBrowserViewModel.ViewContext.Invoke(Update);
            service.LogChanged   += UpdateLog;

            Update();

            timer = new Timer(TimerCallback, null, 0, 500);
        }
 public ModulesTreeViewModel(AppBrowserViewModel appBrowserViewModel)
 {
     this.appBrowserViewModel = appBrowserViewModel;
     appBrowserViewModel.Environments.CollectionChanged += (sender, args) => Update();
     Update();
 }