Example #1
0
 private ResourceSyncStatistics CallSyncBundle(ResourceAssembly assembly, ResourceBundle bundle)
 {
     var bundles = new List<ResourceBundle>();
     if (bundle != null)
         bundles.Add(bundle);
     return service.SyncBundles(assembly, bundles);
 }
 private ResourceSyncStatistics SyncBundleCallback(ResourceAssembly assembly, ResourceBundle bundle)
 {
     var bundles = new List<ResourceBundle>();
     if (bundle != null)
         bundles.Add(bundle);
     return syncResourcesManager.SyncBundles(assembly, bundles);
 }
        public ResourceAssembly SyncTranslations(ResourceAssembly assembly, ResourceBundle bundle, List<ResourceTranslation> translations)
        {
            Project project = projectRepository.GetProjectByID(assembly.ProjectID);
            if (project == null)
                throw new ArgumentException("Project ID not found: {0}", assembly.ProjectID.ToString());

            ResourceAssembly existingAssembly = assemblyRepository.FindAssemblyByName(assembly.ProjectID, assembly.FileName);
            if (existingAssembly == null)
                throw new ArgumentException("Assembly not found: {0}", assembly.FileName);

            ResourceBundle existingBundle = bundleRepository.FindBundleWithResourcesAndTranslationsByName(assembly.ProjectID, existingAssembly.ID, bundle.Name);
            if (existingBundle == null)
            {
                logger.Warn("Bundle not found: {0}", bundle.Name);
                return null;
            }

            foreach (var translation in translations)
            {
                // also syncs resource translation status!
                SyncTranslation(project, existingAssembly, existingBundle, translation);
            }

            new TranslationStatusUtil().CalcBundleTranslationStatusFromResources(existingBundle);
            // Assembly status done by caller via CalculateAssemblyStatusFromBundles

            return existingAssembly;
        }
 public void DeleteNonExistingBundles(ResourceAssembly ra, List<string> existingBundleNames)
 {
     var bundleList = bundleRepository.FindBundlesForAssembly(ra);
     bundleList.RemoveAll(b => existingBundleNames.Contains(b.Name));
     foreach (var remainingExistingBundle in bundleList)
         MarkBundleDeleted(remainingExistingBundle);
 }
        public TranslationStatus GetWorstTranslationStatusForAssemblyFromBundles(ResourceAssembly ra)
        {
            var status = (from bundle in context.ResourceBundles
                    where bundle.ProjectID == ra.ProjectID
                        && bundle.ResourceAssemblyID == ra.ID
                        && bundle.WorstTranslationStatus >= 0
                        && bundle.BundleSyncStatus != BundleSyncStatus.REMOVED
                    select (TranslationStatus?)bundle.WorstTranslationStatus).Min();

            return status.HasValue ? status.Value : TranslationStatus.NO_NEED_TO_TRANSLATE;
        }
        public void CollectResourceAssembly()
        {
            assembly = new ResourceAssembly();
            assembly.FileFormat = ".NET Assembly";
            assembly.FileName = ass.GetName().Name;
            assembly.ProjectID = 1; // TODO
            logger.Info("Found assembly {0}", ass.FullName);

            // nur Assembly
            var stats = bundleSyncCallback(assembly, null);
            AddStats(stats);
        }
        // TODO Import From Csv?
        private TranslationSyncStatistics SyncTranslationsCallback(int projectID, string assemblyName, string bundleName, List<ResourceTranslation> translations)
        {
            var ra = new ResourceAssembly();
            ra.ProjectID = projectID;
            ra.FileName = assemblyName;

            var rb = new ResourceBundle();
            rb.ProjectID = projectID;
            rb.Name = bundleName;

            return syncTranslationsManager.SyncTranslations(ra, rb, translations);
        }
        public ResourceAssembly SyncResourceAssembly(ResourceAssembly template)
        {
            var existingAssembly = assemblyRepository.FindAssemblyByName(template.ProjectID, template.FileName);
            if (existingAssembly == null)
            {
                existingAssembly = CreateNewAssembly(template);
            }
            else
            {
                existingAssembly.LastSyncDateTime = DateTime.UtcNow;
            }

            return existingAssembly;
        }
Example #9
0
        private TranslationSyncStatistics SyncTranslationCallback(int projectID, string assemblyName, string bundleName, List<ResourceTranslation> translations)
        {
            logger.Info("Send {0} translations for asssembly {1}, bundle {2}",
                translations.Count, assemblyName, bundleName);

            var ra = new ResourceAssembly();
            ra.ProjectID = projectID;
            ra.FileName = assemblyName;

            var rb = new ResourceBundle();
            rb.ProjectID = projectID;
            rb.Name = bundleName;

            return service.SyncTranslations(ra, rb, translations);
        }
        public ResourceSyncStatistics SyncBundleDeletions(ResourceAssembly ra, List<string> existingBundleNames)
        {
            var context = new TinyTranslatorDbContext();

            var task = new SyncResourcesTask(
                new ResourceAssemblyRepository(context),
                new ResourceBundleRepository(context),
                new ResourceRepository(context),
                new ResourceTranslationRepository(context)
                );

            var assembly = task.SyncResourceAssembly(ra);
            task.DeleteNonExistingBundles(assembly, existingBundleNames);
            context.SaveChanges();

            task.CalculateAssemblyStatusFromBundles(assembly);
            context.SaveChanges();

            return task.Statistics;
        }
        public void SyncAllBundlesWithDeletions(ResourceAssembly existingAssembly, ICollection<ResourceBundle> newBundles)
        {
            var existingBundles = bundleRepository.FindBundlesForAssembly(existingAssembly);

            foreach (var newBundle in newBundles)
            {
                var existingBundle = existingBundles.FirstOrDefault(b => b.Name == newBundle.Name);
                if (existingBundle == null)
                    CreateNewBundle(existingAssembly, newBundle);
                else
                {
                    UpdateBundle(existingAssembly, existingBundle, newBundle);
                    existingBundles.Remove(existingBundle);
                }
            }

            foreach (var remainingExistingBundle in existingBundles)
            {
                MarkBundleDeleted(remainingExistingBundle);
            }
        }
        private ResourceSyncStatistics InnerSyncResourceAssembly(ResourceAssembly ra, ICollection<ResourceBundle> bundles, bool deleteBundles)
        {
            var context = new TinyTranslatorDbContext();

            var task = new SyncResourcesTask(
                new ResourceAssemblyRepository(context),
                new ResourceBundleRepository(context),
                new ResourceRepository(context),
                new ResourceTranslationRepository(context)
                );

            var assembly = task.SyncResourceAssembly(ra);
            if (deleteBundles)
                task.SyncAllBundlesWithDeletions(assembly, bundles);
            else
                task.SyncSomeBundles(assembly, bundles);
            context.SaveChanges();

            task.CalculateAssemblyStatusFromBundles(assembly);
            context.SaveChanges();

            return task.Statistics;
        }
        public TranslationSyncStatistics SyncTranslations(ResourceAssembly assembly, ResourceBundle bundle, List<ResourceTranslation> translations)
        {
            var context = new TinyTranslatorDbContext();

            var task = new SyncTranslationsTask(
                new ProjectRepository(context),
                new ResourceAssemblyRepository(context),
                new ResourceBundleRepository(context),
                new ResourceRepository(context),
                new ResourceTranslationRepository(context)
                );

            var existingAssembly = task.SyncTranslations(assembly, bundle, translations);
            context.SaveChanges();

            if (existingAssembly != null)
            {
                task.CalculateAssemblyStatusFromBundles(existingAssembly);
                context.SaveChanges();
            }

            return task.Statistics;
        }
 public ResourceSyncStatistics SyncBundles(ResourceAssembly ra, ICollection<ResourceBundle> bundles)
 {
     return InnerSyncResourceAssembly(ra, bundles, deleteBundles: false);
 }
 private ResourceSyncStatistics DeleteBundlesClassback(ResourceAssembly assembly, List<string> existingAssemblies)
 {
     return syncResourcesManager.SyncBundleDeletions(assembly, existingAssemblies);
 }
 public void AddAssembly(ResourceAssembly newAssembly)
 {
     context.ResourceAssemblies.Add(newAssembly);
 }
 public ResourceSyncStatistics SyncResourceAssembly(ResourceAssembly ra, ICollection<ResourceBundle> bundles)
 {
     return InnerSyncResourceAssembly(ra, bundles, true);
 }
 public List<ResourceBundle> FindBundlesForAssembly(ResourceAssembly ra)
 {
     var query = from rb in context.ResourceBundles where rb.ResourceAssemblyID == ra.ID select rb;
     return query.ToList();
 }
        private void UpdateBundle(ResourceAssembly existingAssembly, ResourceBundle existingBundle, ResourceBundle newBundle)
        {
            bool haveChanges = UpdateResources(existingAssembly, existingBundle, newBundle.Resources);

            if (haveChanges)
            {
                syncStatistics.UpdatedBundles++;

                existingBundle.LastChangeDateTime = DateTime.UtcNow;
                existingBundle.BundleSyncStatus = BundleSyncStatus.UPDATED;
                new TranslationStatusUtil().CalcBundleTranslationStatusFromResources(existingBundle);
            }
        }
Example #20
0
 private ResourceSyncStatistics CallDeleteBundle(ResourceAssembly assembly, List<string> existingAssemblies)
 {
     return service.SyncBundleDeletions(assembly, existingAssemblies);
 }
 public void SyncSomeBundles(ResourceAssembly existingAssembly, ICollection<ResourceBundle> newBundles)
 {
     foreach (var newBundle in newBundles)
     {
         var existingBundle = bundleRepository.FindBundleByName(existingAssembly.ProjectID, existingAssembly.ID, newBundle.Name);
         if (existingBundle == null)
             CreateNewBundle(existingAssembly, newBundle);
         else
             UpdateBundle(existingAssembly, existingBundle, newBundle);
     }
 }
 private ResourceAssembly CreateNewAssembly(ResourceAssembly template)
 {
     ResourceAssembly newAssembly = new ResourceAssembly();
     newAssembly.CreateDateTime = DateTime.UtcNow;
     newAssembly.LastSyncDateTime = DateTime.UtcNow;
     newAssembly.FileFormat = template.FileFormat;
     newAssembly.FileName = template.FileName;
     newAssembly.ProjectID = template.ProjectID;
     assemblyRepository.AddAssembly(newAssembly);
     syncStatistics.AddedAssemblies++;
     return newAssembly;
 }
 public TranslationSyncStatistics SyncTranslations(ResourceAssembly assembly, ResourceBundle bundle, List<ResourceTranslation> translations)
 {
     return syncTranslationsManager.SyncTranslations(assembly, bundle, translations);
 }
        private void CreateNewBundle(ResourceAssembly existingAssembly, ResourceBundle template)
        {
            var bundle = new ResourceBundle();
            bundle.BundleSyncStatus = BundleSyncStatus.ADDED;
            bundle.CreateDateTime = DateTime.UtcNow;
            bundle.LastChangeDateTime = DateTime.UtcNow;
            bundle.Name = template.Name;
            bundle.ProjectID = existingAssembly.ProjectID;
            bundle.ResourceAssembly = existingAssembly;
            bundle.Resources = new List<Resource>();
            bundleRepository.AddBundle(bundle);

            foreach (var newResource in template.Resources)
                CreateNewResource(existingAssembly, bundle, newResource);

            // es gibt noch keine Translations für dieses Bundle
            new TranslationStatusUtil().CalcBundleTranslationStatusFromResources(bundle);

            syncStatistics.AddedBundles++;
        }
        private bool UpdateResources(ResourceAssembly existingAssembly, ResourceBundle existingBundle, ICollection<Resource> newResources)
        {
            bool changes = false;

            var existingResources = resourceRepository.GetResourcesForBundle(existingBundle);
            List<Resource> resourcesToDelete = new List<Resource>(existingResources);

            foreach (var newResource in newResources)
            {
                var existingResource = existingResources.FirstOrDefault(r => r.Key == newResource.Key);
                if (existingResource == null)
                {
                    CreateNewResource(existingAssembly, existingBundle, newResource);
                    changes = true;
                }
                else
                {
                    resourcesToDelete.Remove(existingResource);
                    if (HasResourceChanges(existingResource, newResource))
                    {
                        changes = true;
                        translationRepository.DeleteTranslationsForResource(existingResource);
                        ApplyChangesToResource(existingResource, newResource);
                    }
                }
            }

            foreach (var resourceToDelete in resourcesToDelete)
            {
                changes = true;
                MarkResourceDeleted(resourceToDelete);
            }

            return changes;
        }
        private void SyncTranslation(Project project, ResourceAssembly existingAssembly, ResourceBundle existingBundle, ResourceTranslation translation)
        {
            // try find resource
            var existingResource = existingBundle.Resources.FirstOrDefault(r => r.Key == translation.Resource.Key);
            if (existingResource == null)
            {
                Statistics.ResourceNotFound++;
                return;
            }

            // compare resource
            if (existingResource.ResourceClass != translation.Resource.ResourceClass)
            {
                Statistics.ResourceMismatch++;
                return;
            }

            if (existingResource.StringValue == translation.StringValue &&
                existingResource.BinaryValue.SequenceEqual(translation.BinaryValue))
            {
                Statistics.UnchangedResource++;
                return;
            }

            // try find translation
            var existingTranslation = existingResource.Translations.FirstOrDefault(t => t.Locale == translation.Locale);
            if (existingTranslation != null &&
                (existingTranslation.StringValue == translation.StringValue &&
                existingTranslation.BinaryValue.SequenceEqual(translation.BinaryValue) ||
                existingTranslation.TranslationStatus >= translation.TranslationStatus))
            {
                Statistics.ExistingTranslations++;
                return;
            }

            // maybe delete old
            if (existingTranslation != null)
                translationRepository.DeleteTranslation(existingTranslation);

            // add new translation
            ResourceTranslation translationObj = CreateTranslation(existingAssembly, existingBundle, existingResource, translation);
            translationRepository.AddTranslation(translationObj);
            existingResource.Translations.Add(translationObj);
            Statistics.AddedTranslations++;

            // update resource translation status
            new TranslationStatusUtil().CalcResourceTranslationStatusFromTranslations(project.Translations, existingResource);
        }
 public void CalculateAssemblyStatusFromBundles(ResourceAssembly assembly)
 {
     assembly.WorstTranslationStatus = bundleRepository.GetWorstTranslationStatusForAssemblyFromBundles(assembly);
 }
        private void CreateNewResource(ResourceAssembly existingAssembly, ResourceBundle existingBundle, Resource template)
        {
            Resource resource = new Resource();
            resource.BinaryValue = template.BinaryValue;
            resource.CreateDateTime = DateTime.UtcNow;
            resource.DesignerSupportFlag = template.DesignerSupportFlag;
            resource.Key = template.Key;
            resource.LastChangeDateTime = DateTime.UtcNow;
            resource.ProjectID = existingAssembly.ProjectID;
            resource.ResourceBundle = existingBundle;
            resource.ResourceClass = template.ResourceClass;
            resource.ResourceSyncStatus = ResourceSyncStatus.ADDED;
            resource.ResourceType = template.ResourceType;
            resource.StringValue = template.StringValue;
            resource.WorstTranslationStatus = resource.NeedsTranslation() ? TranslationStatus.NOT_TRANSLATED : TranslationStatus.NO_NEED_TO_TRANSLATE;
            existingBundle.Resources.Add(resource);
            resourceRepository.AddResource(resource);

            syncStatistics.AddedResources++;
        }
 private ResourceTranslation CreateTranslation(ResourceAssembly existingAssembly, ResourceBundle existingBundle, Resource existingResource, ResourceTranslation template)
 {
     ResourceTranslation translation = new ResourceTranslation();
     translation.BinaryValue = template.BinaryValue;
     translation.Locale = template.Locale;
     translation.ProjectID = existingAssembly.ProjectID;
     translation.Resource = existingResource;
     translation.ResourceAssemblyID = existingAssembly.ID;
     translation.ResourceBundleID = existingBundle.ID;
     translation.ResourceID = existingResource.ID;
     translation.StringValue = template.StringValue;
     translation.TranslationBy = template.TranslationBy;
     translation.TranslationDateTime = template.TranslationDateTime;
     translation.TranslationStatus = template.TranslationStatus;
     return translation;
 }
 public ResourceSyncStatistics SyncResourceAssembly(ResourceAssembly ra, ICollection<ResourceBundle> bundles)
 {
     return syncResourcesManager.SyncResourceAssembly(ra, bundles);
 }