コード例 #1
0
ファイル: Logic.cs プロジェクト: mazurov/BRS-MFiles
        public static bool UpdateMaster(DocumentsContext ctx, MFilesDocument targetDoc, ObjectVersionWrapper sourceDoc,
                                        IDictionary <string, VaultDetails> vaultDetails, CountriesClient countries)
        {
            targetDoc.Guid         = sourceDoc.Guid;
            targetDoc.CreatedDate  = sourceDoc.CreatedDate;
            targetDoc.ModifiedDate = sourceDoc.ModifiedDate;

            var masterDoc = targetDoc.Document;

            masterDoc.MFilesDocument = targetDoc;
            masterDoc.UnNumber       = string.IsNullOrEmpty(sourceDoc.UnNumber)?sourceDoc.Name:sourceDoc.UnNumber;
            masterDoc.Convention     = vaultDetails[sourceDoc.VaultName].NameInDb ?? sourceDoc.VaultName.ToLower();
            var authorAndType = GetAuthor(sourceDoc, countries);

            if (authorAndType != null)
            {
                masterDoc.Author     = authorAndType.Item1;
                masterDoc.AuthorType = authorAndType.Item2 ? "organization" : "person";
            }
            masterDoc.CountryFull = countries.GetCountryIsoCode2(sourceDoc.Country) != null ? sourceDoc.Country: null;
            masterDoc.Country     = countries.GetCountryIsoCode2(masterDoc.CountryFull);
            masterDoc.Copyright   = sourceDoc.Copyright;
            var period = sourceDoc.GetPeriod();

            if (period != null)
            {
                masterDoc.PeriodStartDate = period.Item1;
                masterDoc.PeriodEndDate   = period.Item2;
            }
            masterDoc.PublicationDate = sourceDoc.PublicationDate;

            lock ("Process") {
                ProcessDocumentTypes(ctx, masterDoc, sourceDoc);
                ProcessMeetings(ctx, masterDoc, sourceDoc);
                ProcessMeetingTypes(ctx, masterDoc, sourceDoc);
                ProcessChemicals(ctx, masterDoc, sourceDoc);
                ProcessPrograms(ctx, masterDoc, sourceDoc);
                ProcessTerms(ctx, masterDoc, sourceDoc);
                ProcessTags(ctx, masterDoc, sourceDoc);

                using (var trans = ctx.Database.BeginTransaction())
                {
                    try
                    {
                        ctx.SaveChanges();
                        trans.Commit();
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                        ClassLogger.Error("SQL exception " + ex);
                        throw;
                    }
                }
            }
            return(true);
        }
コード例 #2
0
ファイル: Logic.cs プロジェクト: mazurov/BRS-MFiles
        public static void Delete(DocumentsContext ctx, MFilesDocument targetDocument)
        {
            if (targetDocument == null)
            {
                return;
            }
            var doc = targetDocument;

            Debug.Assert(doc != null);
            if (doc.Title != null)
            {
                ClassLogger.Info($"Delete document '{doc.Title.Value}'");
            }
            else
            {
                ClassLogger.Warn($"Delete document {doc.Guid}");
            }

            var documents = from x in ctx.Documents where x.DocumentId == doc.Guid select x;

            ctx.Documents.RemoveRange(documents.ToList());

            var titles = from x in ctx.Titles where x.TitleId == doc.Guid select x;

            ctx.Titles.RemoveRange(titles.ToList());

            var descriptions = (from x in ctx.Descriptions where x.DescriptionId == doc.Guid select x).ToList();

            ctx.Descriptions.RemoveRange(descriptions.ToList());

            var files = (from x in ctx.Files where x.FileId == doc.Guid select x).ToList();

            ctx.Files.RemoveRange(files.ToList());

            ctx.MFilesDocuments.Remove(doc);

            using (var trans = ctx.Database.BeginTransaction())
            {
                try
                {
                    ctx.SaveChanges();
                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    ClassLogger.Error($"Delete document {ex.Message}");
                    throw;
                }
            }
        }
コード例 #3
0
ファイル: Logic.cs プロジェクト: mazurov/BRS-MFiles
        public static MFilesDocument CreateSlave(DocumentsContext ctx, MFilesDocument master, ObjectVersionWrapper sourceDoc, IDictionary <string, VaultDetails> vaultDetails, string thumbnailsUrlPattern)
        {
            MFilesDocument targetDoc = null;

            if (sourceDoc.Guid != master.Guid)
            {
                targetDoc = ctx.MFilesDocuments.Create();
            }
            else
            {
                targetDoc = master;
            }
            return(UpdateSlave(ctx, master, targetDoc, sourceDoc, vaultDetails, thumbnailsUrlPattern));
        }
コード例 #4
0
ファイル: Logic.cs プロジェクト: mazurov/BRS-MFiles
        public static MFilesDocument UpdateSlave(DocumentsContext ctx, MFilesDocument masterDoc, MFilesDocument targetDoc, ObjectVersionWrapper sourceDoc, IDictionary <string, VaultDetails> vaultDetails, string thumbnailsUrlPattern)
        {
            if (sourceDoc.Guid != masterDoc.Guid)
            {
                targetDoc.Guid         = sourceDoc.Guid;
                targetDoc.ModifiedDate = sourceDoc.ModifiedDate;
                targetDoc.CreatedDate  = sourceDoc.CreatedDate;
            }
            else
            {
                targetDoc = masterDoc;
            }

            var doc = masterDoc.Document;

            Debug.Assert(doc != null);

            string languageCode;

            // TODO: should be in configuration or don't use CultureUtils
            // or we need to update language in M-Files
            if (sourceDoc.Language == "Portugese")
            {
                languageCode = "pt";
            }
            else if (sourceDoc.Language == "Azeri")
            {
                languageCode = "az";
            }
            else
            {
                languageCode = CultureUtils.GetLangTwoLetterCode(sourceDoc.Language);
            }

            if (languageCode == null)
            {
                ClassLogger.Warn(
                    $"Could not find language code for  {sourceDoc.Language} (Document {sourceDoc.UnNumber})");
                return(null);
            }

            var title = doc.Titles.FirstOrDefault(t => t.Language == languageCode && t.Document == doc);

            if (title == null || title.MFilesDocument == targetDoc)
            {
                if (title == null)
                {
                    title = new Title {
                        MFilesDocument = targetDoc
                    };
                    doc.Titles.Add(title);
                }

                title.Document       = doc;
                title.Language       = languageCode;
                title.LanguageFull   = sourceDoc.Language;
                title.MFilesDocument = targetDoc;
                title.Value          = sourceDoc.Title;
            }

            var descirpiton = doc.Descriptions.FirstOrDefault(t => t.Language == languageCode && t.Document == doc);

            if (descirpiton == null || descirpiton.MFilesDocument == targetDoc)
            {
                if (descirpiton == null)
                {
                    descirpiton = new Description();
                    doc.Descriptions.Add(descirpiton);
                }
                descirpiton.Document       = doc;
                descirpiton.Language       = languageCode;
                descirpiton.LanguageFull   = sourceDoc.Language;
                descirpiton.MFilesDocument = targetDoc;
                descirpiton.Value          = sourceDoc.Description;
            }


            var file          = sourceDoc.File;
            var repositoryUrl = vaultDetails[sourceDoc.VaultName].Url ?? "";


            var targetFile = ctx.Files.FirstOrDefault(f => f.FileId == targetDoc.Guid);

            if (targetFile == null)
            {
                targetFile = new File();
                doc.Files.Add(targetFile);
            }
            targetFile.Document       = doc;
            targetFile.MFilesDocument = targetDoc;
            targetFile.Language       = languageCode;
            targetFile.LanguageFull   = sourceDoc.Language;
            targetFile.Name           = file.Name;
            targetFile.Extension      = file.Extension.ToLower();
            targetFile.Size           = file.Size;
            targetFile.MimeType       = Mime.Lookup(file.Name + "." + file.Extension.ToLower());
            targetFile.Url            = file.GetUrl(repositoryUrl);
            targetFile.ThumbnailUrl   = thumbnailsUrlPattern.Replace("{vault}", sourceDoc.VaultName)
                                        .Replace("{file}", $"{targetFile.Name}.{targetFile.Extension}");


            using (var trans = ctx.Database.BeginTransaction())
            {
                try
                {
                    ctx.SaveChanges();
                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    ClassLogger.Error(ex);
                    throw;
                }
            }

            return(targetDoc);
        }