private bool LocaleMissing(List<ProjectLocale> locales, Resource resource)
        {
            foreach (var locale in locales)
                if (!resource.Translations.Any(t => t.Locale == locale.LocaleCode))
                    return true;

            return false;
        }
 public void DeleteTranslationsForResource(Resource resource)
 {
     context.ResourceTranslations.RemoveRange(
         from translation in context.ResourceTranslations
         where translation.ResourceID == resource.ID
         select translation
         );
 }
        public void CalcResourceTranslationStatusFromTranslations(List<ProjectLocale> locales, Resource resource)
        {
            if (LocaleMissing(locales, resource))
            {
                resource.WorstTranslationStatus = TranslationStatus.NOT_TRANSLATED;
                return;
            }

            TranslationStatus worstStatus = (TranslationStatus)int.MaxValue;
            foreach (var translation in resource.Translations)
                if (translation.TranslationStatus < worstStatus)
                    worstStatus = translation.TranslationStatus;

            if (worstStatus == (TranslationStatus)int.MaxValue)
                worstStatus = TranslationStatus.NOT_TRANSLATED;

            resource.WorstTranslationStatus = worstStatus;
        }
 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;
 }
        private void MarkResourceDeleted(Resource resourceToDelete)
        {
            if (resourceToDelete.ResourceSyncStatus != ResourceSyncStatus.REMOVED)
            {
                syncStatistics.RemovedResources++;

                resourceToDelete.ResourceSyncStatus = ResourceSyncStatus.REMOVED;
                resourceToDelete.LastChangeDateTime = DateTime.UtcNow;
            }
        }
 private bool HasResourceChanges(Resource existingResource, Resource template)
 {
     return (!existingResource.BinaryValue.SequenceEqual(template.BinaryValue)
         || existingResource.DesignerSupportFlag != template.DesignerSupportFlag
         || existingResource.ResourceClass != template.ResourceClass
         || existingResource.ResourceType != template.ResourceType
         || existingResource.StringValue != template.StringValue);
 }
        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 void ApplyChangesToResource(Resource existingResource, Resource template)
        {
            existingResource.BinaryValue = template.BinaryValue;
            existingResource.DesignerSupportFlag = template.DesignerSupportFlag;
            existingResource.ResourceClass = template.ResourceClass;
            existingResource.ResourceType = template.ResourceType;
            existingResource.StringValue = template.StringValue;
            existingResource.WorstTranslationStatus = existingResource.NeedsTranslation() ? TranslationStatus.NOT_TRANSLATED : TranslationStatus.NO_NEED_TO_TRANSLATE;

            existingResource.ResourceSyncStatus = ResourceSyncStatus.UPDATED;
            existingResource.LastChangeDateTime = DateTime.UtcNow;

            syncStatistics.UpdatedResources++;
        }
        private void CollectSingleResource(string resourceName, IDictionaryEnumerator dict, ResourceBundle bundle, ResourceReader reader, Object dictValue)
        {
            var resource = new Resource();
            resource.Key = dict.Key.ToString();
            resource.CreateDateTime = DateTime.UtcNow;
            resource.LastChangeDateTime = DateTime.UtcNow;
            resource.DesignerSupportFlag = resource.Key.StartsWith(">>");

            String type;
            byte[] data;
            reader.GetResourceData(dict.Key.ToString(), out type, out data);
            resource.ResourceClass = type;
            resource.BinaryValue = data;

            bundle.Resources.Add(resource);

            resource.StringValue = dictValue != null ? dictValue.ToString() : null;
            if (dictValue is String)
                resource.ResourceType = ResourceType.STRING;
            else if (dictValue is Bitmap)
                resource.ResourceType = ResourceType.IMAGE;
            else
                resource.ResourceType = ResourceType.OTHER_BINARY;
        }
        private void CollectResourcesFromArray(string resourceName, IDictionaryEnumerator dict, ResourceBundle bundle)
        {
            String[] strings = (String[])dict.Value;
            for (int i = 0; i < strings.Length; i++)
            {
                var resource = new Resource();
                resource.Key = dict.Key.ToString() + "[" + i + "]";
                resource.StringValue = strings[i];
                resource.CreateDateTime = DateTime.UtcNow;
                resource.LastChangeDateTime = DateTime.UtcNow;

                resource.ResourceClass = "ResourceTypeCode.String";
                resource.BinaryValue = Encoding.UTF8.GetBytes(strings[i]);
                resource.ResourceType = ResourceType.STRING_ARRAY;

                bundle.Resources.Add(resource);
            }
        }
 public void AddResource(Resource resource)
 {
     context.Resources.Add(resource);
 }