private void DoMigrate(IServerConnection source, IServerConnection target, string resourceId, string[] dependentResourceIds, bool overwrite)
        {
            var diag = new ProgressDialog();

            diag.CancelAbortsThread = true;
            var method = new ProgressDialog.DoBackgroundWork((worker, e, args) =>
            {
                var src               = (IServerConnection)args[0];
                var dst               = (IServerConnection)args[1];
                var resId             = (string)args[2];
                var dependents        = (string[])args[3];
                var overwriteExisting = (bool)args[4];

                var cb = new LengthyOperationProgressCallBack((sender, cbe) =>
                {
                    worker.ReportProgress(cbe.Progress, cbe.StatusMessage);
                });

                var migrator = new ResourceMigrator(source, target);
                migrator.MigrateResource(resId, dependentResourceIds, overwriteExisting, cb);
                return(true);
            });

            diag.RunOperationAsync(Workbench.Instance, method, source, target, resourceId, dependentResourceIds, overwrite);
        }
        public void ResourceMigratorTest()
        {
            var source = new Mock <IServerConnection>();
            var target = new Mock <IServerConnection>();

            Assert.Throws <ArgumentNullException>(() => new ResourceMigrator(null, null));
            Assert.Throws <ArgumentNullException>(() => new ResourceMigrator(source.Object, null));
            Assert.Throws <ArgumentNullException>(() => new ResourceMigrator(null, target.Object));

            var mig = new ResourceMigrator(source.Object, target.Object);

            Assert.NotNull(mig.Source);
            Assert.NotNull(mig.Target);
        }
Exemple #3
0
        private static int DoMigrate(OSGeo.MapGuide.MaestroAPI.IServerConnection source, OSGeo.MapGuide.MaestroAPI.IServerConnection target, CopyMoveToServerDialog migrate)
        {
            var diag = new ProgressDialog();

            diag.CancelAbortsThread = true;
            var method = new ProgressDialog.DoBackgroundWork((worker, e, args) =>
            {
                var src       = (IServerConnection)args[0];
                var dst       = (IServerConnection)args[1];
                var ids       = (string[])args[2];
                var folder    = (string)args[3];
                var overwrite = (bool)args[4];
                var act       = (MigrationAction)args[5];

                var cb = new LengthyOperationProgressCallBack((sender, cbe) =>
                {
                    worker.ReportProgress(cbe.Progress, cbe.StatusMessage);
                });

                var migrator = new ResourceMigrator(source, target);
                int affected = 0;
                switch (act)
                {
                case MigrationAction.Copy:
                    affected = migrator.CopyResources(ids, folder, overwrite, cb);
                    break;

                case MigrationAction.Move:
                    affected = migrator.MoveResources(ids, folder, overwrite, cb);
                    break;
                }
                return(affected);
            });

            return((int)diag.RunOperationAsync(Workbench.Instance, method, source, target, migrate.SourceResourceIds, migrate.TargetFolder, migrate.OverwriteResources, migrate.SelectedAction));
        }
        public void CopyResourcesWithOverwriteTest()
        {
            var sr = new Mock <IResourceService>();
            var tr = new Mock <IResourceService>();

            var tc = new Mock <IConnectionCapabilities>();

            tc.Setup(c => c.GetMaxSupportedResourceVersion(It.IsAny <string>())).Returns(new Version(1, 0, 0));

            var source = new Mock <IServerConnection>();
            var target = new Mock <IServerConnection>();

            var emptyDataList = new ResourceDataList()
            {
                ResourceData = new System.ComponentModel.BindingList <ResourceDataListResourceData>()
            };

            string [] resources =
            {
                "Library://Test/Data.FeatureSource",
                "Library://Test/Data1.FeatureSource",
                "Library://Test/Data2.FeatureSource",
                "Library://Test/Data3.FeatureSource",
                "Library://Test/Data4.FeatureSource",
            };

            var res1 = new Mock <IResource>();
            var res2 = new Mock <IResource>();
            var res3 = new Mock <IResource>();
            var res4 = new Mock <IResource>();
            var res5 = new Mock <IResource>();

            res1.Setup(r => r.ResourceID).Returns(resources[0]);
            res2.Setup(r => r.ResourceID).Returns(resources[1]);
            res3.Setup(r => r.ResourceID).Returns(resources[2]);
            res4.Setup(r => r.ResourceID).Returns(resources[3]);
            res5.Setup(r => r.ResourceID).Returns(resources[4]);

            sr.Setup(r => r.EnumerateResourceData(It.IsAny <string>())).Returns(emptyDataList);
            sr.Setup(r => r.GetResource(resources[0])).Returns(res1.Object);
            sr.Setup(r => r.GetResource(resources[1])).Returns(res2.Object);
            sr.Setup(r => r.GetResource(resources[2])).Returns(res3.Object);
            sr.Setup(r => r.GetResource(resources[3])).Returns(res4.Object);
            sr.Setup(r => r.GetResource(resources[4])).Returns(res5.Object);
            //tr.Setup(r => r.ResourceExists(It.IsAny<string>())).Returns(false);

            source.Setup(c => c.ResourceService).Returns(sr.Object);
            target.Setup(c => c.ResourceService).Returns(tr.Object);
            target.Setup(c => c.Capabilities).Returns(tc.Object);

            var mig = new ResourceMigrator(source.Object, target.Object);

            Assert.NotNull(mig.Source);
            Assert.NotNull(mig.Target);

            int migrated = mig.CopyResources(resources, "Library://Migrated/", true, null);

            Assert.Equal(5, migrated);

            sr.Verify(c => c.GetResource(resources[0]), Times.Once);
            sr.Verify(c => c.GetResource(resources[1]), Times.Once);
            sr.Verify(c => c.GetResource(resources[2]), Times.Once);
            sr.Verify(c => c.GetResource(resources[3]), Times.Once);
            sr.Verify(c => c.GetResource(resources[4]), Times.Once);

            sr.Verify(c => c.EnumerateResourceData(resources[0]), Times.Once);
            sr.Verify(c => c.EnumerateResourceData(resources[1]), Times.Once);
            sr.Verify(c => c.EnumerateResourceData(resources[2]), Times.Once);
            sr.Verify(c => c.EnumerateResourceData(resources[3]), Times.Once);
            sr.Verify(c => c.EnumerateResourceData(resources[4]), Times.Once);

            tr.Verify(c => c.SaveResourceAs(It.IsAny <IResource>(), It.IsAny <string>()), Times.Exactly(5));
        }
        internal string[] CopyResourcesToFolder(RepositoryHandle[] data, string targetConnectionName, string folderId)
        {
            string rootSourceParent = GetCommonParent(data);

            //There is an implicit assumption here that all items dropped come from the same connection
            var sourceConn = data.First().Connection;
            var targetConn = _connManager.GetConnection(targetConnectionName);
            var migrator   = new ResourceMigrator(sourceConn, targetConn);

            //Collect all source ids
            var sourceIds = new List <string>();

            foreach (var resId in data.Select(x => x.ResourceId.ToString()))
            {
                if (ResourceIdentifier.IsFolderResource(resId))
                {
                    sourceIds.AddRange(GetFullResourceList(sourceConn, resId));
                }
                else
                {
                    sourceIds.Add(resId);
                }
            }

            var targets = new List <string>();

            foreach (var resId in sourceIds)
            {
                var dstId = resId.Replace(rootSourceParent, folderId);
                System.Diagnostics.Trace.TraceInformation($"{resId} => {dstId}"); //NOXLATE
                targets.Add(dstId);
            }

            bool overwrite = true;
            var  existing  = new List <string>();

            foreach (var resId in targets)
            {
                if (targetConn.ResourceService.ResourceExists(resId))
                {
                    existing.Add(resId);
                }
            }
            if (existing.Count > 0)
            {
                overwrite = MessageService.AskQuestion(string.Format(Strings.PromptOverwriteOnTargetConnection, existing.Count));
            }

            var wb     = Workbench.Instance;
            var dlg    = new ProgressDialog();
            var worker = new ProgressDialog.DoBackgroundWork((w, evt, args) =>
            {
                LengthyOperationProgressCallBack cb = (s, cbe) =>
                {
                    w.ReportProgress(cbe.Progress, cbe.StatusMessage);
                };

                return(migrator.CopyResources(sourceIds.ToArray(), targets.ToArray(), overwrite, new RebaseOptions(rootSourceParent, folderId), cb));
            });

            var result = (string[])dlg.RunOperationAsync(wb, worker);

            RefreshModel(targetConn.DisplayName, folderId);
            ExpandNode(targetConn.DisplayName, folderId);
            return(result);
        }