private async Task CreateBiblosDSArchiveAsync(UDSEntity uds, UDSStorageFacade udsStorageFacade, bool isMainDocument = false) { try { await udsStorageFacade.GenerateStorageAsync(async (udsArchive, attributeGroups, attributeModes) => { BiblosDS.BiblosDSManagement.AttributeMode attributeMode_ReadOnly = attributeModes.Single(f => f.IdMode == 0); BiblosDS.BiblosDSManagement.AttributeMode attributeMode_ModifyAlways = attributeModes.Single(f => f.IdMode == 3); BiblosDS.BiblosDSManagement.AttributeMode attributeMode_ModifyNotArchived = attributeModes.Single(f => f.IdMode == 2); BiblosDS.BiblosDSManagement.AttributeGroup attributeGroup_chain = attributeGroups.SingleOrDefault(a => a.GroupType.Equals(BiblosDS.BiblosDSManagement.AttributeGroupType.Chain)); BiblosDS.BiblosDSManagement.AttributeGroup attributeGroup_default = attributeGroups.SingleOrDefault(a => a.GroupType.Equals(BiblosDS.BiblosDSManagement.AttributeGroupType.Undefined)); await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_default, attributeMode_ReadOnly, AttributeHelper.AttributeName_Signature, "System.String", true); await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_default, attributeMode_ReadOnly, AttributeHelper.AttributeName_Filename, "System.String", true); await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_default, attributeMode_ModifyAlways, AttributeHelper.AttributeName_PrivacyLevel, "System.Int64", false); await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_default, attributeMode_ModifyAlways, AttributeHelper.AttributeName_SignModels, "System.String", false); if (isMainDocument) { await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_chain, attributeMode_ModifyNotArchived, "Subject", "System.String", false); await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_chain, attributeMode_ReadOnly, "Year", "System.Int64", true); await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_chain, attributeMode_ReadOnly, "Number", "System.Int64", true); await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_chain, attributeMode_ReadOnly, "Date", "System.DateTime", true, isMainDate: true); foreach (Metadata metadata in uds.MetaData) { await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_chain, metadata.Required ? attributeMode_ReadOnly : attributeMode_ModifyNotArchived, metadata.PropertyName, metadata.BiblosPropertyType.FullName, metadata.Required); } } }, BiblosDS_Storage_MainPath, BiblosDS_Storage_StorageType, isMainDocument); } catch (Exception ex) { _logger.WriteError(ex, LogCategories); throw ex; } }
public async Task <BiblosDS.BiblosDSManagement.Attribute> GenerateBiblosDSAttribute(BiblosDS.BiblosDSManagement.Archive archive, BiblosDS.BiblosDSManagement.AttributeGroup attributeGroup, BiblosDS.BiblosDSManagement.AttributeMode attributeMode, string attributeName, string attributeType, bool isRequired, bool isMainDate = false) { BiblosDS.BiblosDSManagement.Attribute attribute = new BiblosDS.BiblosDSManagement.Attribute { IdAttribute = Guid.NewGuid(), Archive = archive, AttributeGroup = attributeGroup, AttributeType = attributeType, Disabled = false, IsAutoInc = false, IsChainAttribute = attributeGroup.GroupType == BiblosDS.BiblosDSManagement.AttributeGroupType.Chain, IsEnumerator = false, IsMainDate = isMainDate, IsRequired = isRequired, IsRequiredForPreservation = false, IsSectional = false, IsUnique = false, IsVisible = true, IsVisibleForUser = true, Name = attributeName, Mode = attributeMode }; _logger.WriteInfo(new LogMessage(string.Concat("Creating biblosds attribute ", attribute.Name)), LogCategories); await _administrationClient.AddAttributeAsync(attribute); return(attribute); }
private async Task UpdateArchiveAsync(UDSEntity uds, UDSStorageFacade udsStorageFacade, bool isMainDocument = false) { _logger.WriteInfo(new LogMessage("starting update archive"), LogCategories); if (udsStorageFacade.UDS.Model.Documents != null) { IList <BiblosDS.BiblosDSManagement.Archive> archives = _administrationClient.GetArchives().ToList(); string miscellaneousArchiveName = string.Concat("Archive_UDS_Miscellaneous_", udsStorageFacade.UDS.Model.Title); BiblosDS.BiblosDSManagement.Archive miscellaneousArchive = new BiblosDS.BiblosDSManagement.Archive { Name = miscellaneousArchiveName }; if (udsStorageFacade.UDS.Model.Documents.Document != null) { BiblosDS.BiblosDSManagement.Archive udsArchive = archives.SingleOrDefault(a => a.Name.Equals(udsStorageFacade.UDS.Model.Documents.Document.BiblosArchive)); if (udsArchive == null) { if (udsStorageFacade.UDS.Model.Documents.Document.CreateBiblosArchive) { await CreateBiblosDSArchiveAsync(uds, udsStorageFacade, true); _logger.WriteInfo(new LogMessage("Archive created successfully"), LogCategories); } else { _logger.WriteError(new LogMessage(string.Format("Archive {0} to update not found", udsStorageFacade.UDS.Model.Documents.Document.BiblosArchive)), LogCategories); } } else { BiblosDS.BiblosDSManagement.Attribute[] attributes = _administrationClient.GetAttributesFromArchive(udsArchive.IdArchive); Task <BiblosDS.BiblosDSManagement.AttributeMode[]> task_attributeModes = _administrationClient.GetAttributeModesAsync(); BiblosDS.BiblosDSManagement.AttributeMode[] attributeModes = await task_attributeModes; BiblosDS.BiblosDSManagement.AttributeMode attributeMode_ReadOnly = attributeModes.Single(f => f.IdMode == 0); BiblosDS.BiblosDSManagement.AttributeMode attributeMode_ModifyAlways = attributeModes.Single(f => f.IdMode == 3); BiblosDS.BiblosDSManagement.AttributeMode attributeMode_ModifyNotArchived = attributeModes.Single(f => f.IdMode == 2); Metadata[] addedMetadata = uds.MetaData.Where(m => !attributes.Any(a => a.Name.Equals(m.PropertyName))).ToArray(); string[] requiredAttributes = { AttributeHelper.AttributeName_Signature, AttributeHelper.AttributeName_Filename, AttributeHelper.AttributeName_UDSSubject, AttributeHelper.AttributeName_UDSYear, AttributeHelper.AttributeName_UDSNumber, AttributeHelper.AttributeName_Date, AttributeHelper.AttributeName_SignModels }; BiblosDS.BiblosDSManagement.Attribute[] dynamicAttributes = attributes.Where(a => !requiredAttributes.Any(r => r.Equals(a.Name))).ToArray(); BiblosDS.BiblosDSManagement.Attribute[] deprecatedAttribute = dynamicAttributes.Where(a => !uds.MetaData.Any(m => m.PropertyName.Equals(a.Name))).ToArray(); //creo i nuovi attributi aggiunti all'archivio foreach (Metadata metadata in addedMetadata) { BiblosDS.BiblosDSManagement.Attribute attribute = attributes.FirstOrDefault(a => a.AttributeGroup.GroupType == BiblosDS.BiblosDSManagement.AttributeGroupType.Chain); BiblosDS.BiblosDSManagement.AttributeGroup attributeGroup_chain = attribute.AttributeGroup; await udsStorageFacade.GenerateBiblosDSAttribute(udsArchive, attributeGroup_chain, attributeMode_ModifyAlways, metadata.PropertyName, metadata.BiblosPropertyType.FullName, metadata.Required); } //disabilito gli attributi tolti dall'archivio foreach (BiblosDS.BiblosDSManagement.Attribute item in deprecatedAttribute) { item.IsRequired = false; item.IsVisible = false; item.IsVisibleForUser = false; item.Mode = attributeMode_ReadOnly; _logger.WriteInfo(new LogMessage(string.Concat("Updating biblosds attribute ", item.Name)), LogCategories); await _administrationClient.UpdateAttributeAsync(item); } } } if (udsStorageFacade.UDS.Model.Documents.DocumentAttachment != null && udsStorageFacade.UDS.Model.Documents.DocumentAttachment.CreateBiblosArchive) { BiblosDS.BiblosDSManagement.Archive udsAttachmentArchive = archives.SingleOrDefault(a => a.Name.Equals(udsStorageFacade.UDS.Model.Documents.DocumentAttachment.BiblosArchive)); if (udsAttachmentArchive == null) { udsStorageFacade.UDS.Model.Documents.DocumentAttachment.BiblosArchive = miscellaneousArchiveName; if (!archives.Any(a => a.Name.Equals(miscellaneousArchiveName))) { await CreateBiblosDSArchiveAsync(uds, udsStorageFacade); archives.Add(miscellaneousArchive); _logger.WriteInfo(new LogMessage("Archive Miscellaneous created successfully"), LogCategories); } } } if (udsStorageFacade.UDS.Model.Documents.DocumentAnnexed != null && udsStorageFacade.UDS.Model.Documents.DocumentAnnexed.CreateBiblosArchive) { BiblosDS.BiblosDSManagement.Archive udsAnnexedArchive = archives.SingleOrDefault(a => a.Name.Equals(udsStorageFacade.UDS.Model.Documents.DocumentAnnexed.BiblosArchive)); if (udsAnnexedArchive == null) { udsStorageFacade.UDS.Model.Documents.DocumentAnnexed.BiblosArchive = miscellaneousArchiveName; if (!archives.Any(a => a.Name.Equals(miscellaneousArchiveName))) { await CreateBiblosDSArchiveAsync(uds, udsStorageFacade); archives.Add(miscellaneousArchive); _logger.WriteInfo(new LogMessage("Archive Miscellaneous created successfully"), LogCategories); } } } if ((udsStorageFacade.UDS.Model.Documents.Document != null && udsStorageFacade.UDS.Model.Documents.Document.DematerialisationEnabled) || (udsStorageFacade.UDS.Model.Documents.DocumentAttachment != null && udsStorageFacade.UDS.Model.Documents.DocumentAttachment.DematerialisationEnabled) || (udsStorageFacade.UDS.Model.Documents.DocumentAnnexed != null && udsStorageFacade.UDS.Model.Documents.DocumentAnnexed.DematerialisationEnabled)) { if (!archives.Any(a => a.Name.Equals(miscellaneousArchiveName))) { await CreateBiblosDSArchiveAsync(uds, udsStorageFacade); archives.Add(miscellaneousArchive); _logger.WriteInfo(new LogMessage("Archive Miscellaneous created successfully"), LogCategories); } if (udsStorageFacade.UDS.Model.Documents.DocumentDematerialisation == null || !udsStorageFacade.UDS.Model.Documents.DocumentDematerialisation.Instances.Any()) { udsStorageFacade.AddDocumentDematerialisation(udsStorageFacade.UDS.Model.Documents, miscellaneousArchiveName); } } } }
public async Task GenerateStorageAsync(Func <BiblosDS.BiblosDSManagement.Archive, BiblosDS.BiblosDSManagement.AttributeGroup[], BiblosDS.BiblosDSManagement.AttributeMode[], Task> funcMapBiblosAttributes, string StorageMainPath, string StorageType, bool isMainDocument = false) { try { _logger.WriteInfo(new LogMessage("Creating biblosds archives"), LogCategories); Task <BiblosDS.BiblosDSManagement.StorageType[]> task_storagesTypes = _administrationClient.GetStoragesTypeAsync(); Task <BiblosDS.BiblosDSManagement.AttributeMode[]> task_attributeModes = _administrationClient.GetAttributeModesAsync(); BiblosDS.BiblosDSManagement.Storage storage = new BiblosDS.BiblosDSManagement.Storage(); BiblosDS.BiblosDSManagement.StorageArea storageArea = new BiblosDS.BiblosDSManagement.StorageArea(); BiblosDS.BiblosDSManagement.Archive archive = new BiblosDS.BiblosDSManagement.Archive(); BiblosDS.BiblosDSManagement.AttributeGroup attributeGroup_default = new BiblosDS.BiblosDSManagement.AttributeGroup(); BiblosDS.BiblosDSManagement.AttributeGroup attributeGroup_chain = new BiblosDS.BiblosDSManagement.AttributeGroup(); archive.IdArchive = Guid.NewGuid(); archive.Name = isMainDocument ? string.Concat("Archive_UDS_", Builder.UDSName) : string.Concat("Archive_UDS_Miscellaneous_", Builder.UDSName); archive.AuthorizationAssembly = string.Empty; archive.AuthorizationClassName = string.Empty; archive.AutoVersion = false; archive.EnableSecurity = false; archive.FiscalDocumentType = string.Empty; archive.FullSignEnabled = false; archive.IsLegal = false; archive.LastIdBiblos = 0; archive.LowerCache = 512 * (1024 * 1024); archive.MaxCache = 1024 * (1024 * 1024); archive.PathCache = string.Empty; archive.PathPreservation = string.Empty; archive.PathTransito = string.Empty; archive.PdfConversionEmabled = false; archive.ThumbnailEmabled = false; archive.TransitoEnabled = false; archive.UpperCache = 768 * (1024 * 1024); _logger.WriteInfo(new LogMessage(string.Concat("Creating biblosds archive ", archive.Name)), LogCategories); archive.IdArchive = await _administrationClient.AddArchiveAsync(archive); storage.IdStorage = Guid.NewGuid(); storage.IsVisible = true; storage.AuthenticationKey = string.Empty; storage.AuthenticationPassword = string.Empty; storage.EnableFulText = false; storage.MainPath = Path.Combine(StorageMainPath, string.Concat("UDS", Builder.UDSName.Replace(" ", ""), isMainDocument ? null : "Miscellaneous")); storage.Name = isMainDocument ? string.Concat("Storage_UDS_", Builder.UDSName) : string.Concat("Storage_UDS_Miscellaneous_", Builder.UDSName); storage.StorageRuleAssembly = string.Empty; storage.StorageRuleClassName = string.Empty; BiblosDS.BiblosDSManagement.StorageType[] storagesTypes = await task_storagesTypes; storage.StorageType = storagesTypes.Single(f => f.Type.Equals(StorageType, StringComparison.InvariantCultureIgnoreCase)); _logger.WriteInfo(new LogMessage(string.Concat("Creating biblosds storage name ", storage.Name)), LogCategories); await _administrationClient.AddStorageAsync(storage); BiblosDS.BiblosDSManagement.Archive[] archives = _administrationClient.GetArchives(); BiblosDS.BiblosDSManagement.Storage[] storages = _administrationClient.GetAllStorages(); BiblosDS.BiblosDSManagement.Archive udsArchive = archives.SingleOrDefault(a => a.Name.Equals(archive.Name)); BiblosDS.BiblosDSManagement.Storage udsStorage = storages.SingleOrDefault(a => a.Name.Equals(storage.Name)); if (udsArchive == null) { throw new Exception(string.Format("Archive not found. Archive Name: {0}", archive.Name)); } if (udsStorage == null) { throw new Exception(string.Format("Storage not found. Storage Name: {0}", storage.Name)); } storageArea.IdStorageArea = Guid.NewGuid(); storageArea.Enable = true; storageArea.MaxFileNumber = 4096; storageArea.MaxSize = Convert.ToInt64(4096) * (1024 * 1024); storageArea.Name = isMainDocument ? string.Concat("StorageArea_UDS_", Builder.UDSName) : string.Concat("StorageArea_UDS_Miscellaneous_", Builder.UDSName); storageArea.Path = "DVD"; storageArea.Priority = 0; storageArea.Storage = udsStorage; storageArea.Archive = udsArchive; _logger.WriteInfo(new LogMessage(string.Concat("Creating biblosds storage area", storageArea.Name)), LogCategories); await _administrationClient.AddStorageAreaAsync(storageArea); BiblosDS.BiblosDSManagement.ArchiveStorage archiveStorage = new BiblosDS.BiblosDSManagement.ArchiveStorage { Active = true, Archive = udsArchive, Storage = udsStorage }; _logger.WriteInfo(new LogMessage("Creating biblosds archive_storage"), LogCategories); await _administrationClient.AddArchiveStorageAsync(archiveStorage); attributeGroup_default.IdAttributeGroup = Guid.NewGuid(); attributeGroup_default.Description = "default document attributes"; attributeGroup_default.GroupType = BiblosDS.BiblosDSManagement.AttributeGroupType.Undefined; attributeGroup_default.IdArchive = udsArchive.IdArchive; attributeGroup_default.IsVisible = true; _logger.WriteInfo(new LogMessage("Creating biblosds attributeGroup_default"), LogCategories); await _administrationClient.AddAttributeGroupAsync(attributeGroup_default); attributeGroup_chain.IdAttributeGroup = Guid.NewGuid(); attributeGroup_chain.Description = "UDS chain attributes"; attributeGroup_chain.GroupType = BiblosDS.BiblosDSManagement.AttributeGroupType.Chain; attributeGroup_chain.IdArchive = udsArchive.IdArchive; attributeGroup_chain.IsVisible = true; _logger.WriteInfo(new LogMessage("Creating biblosds attributeGroup_chain"), LogCategories); await _administrationClient.AddAttributeGroupAsync(attributeGroup_chain); BiblosDS.BiblosDSManagement.AttributeMode[] attributeModes = await task_attributeModes; BiblosDS.BiblosDSManagement.AttributeGroup[] attributeGroups = { attributeGroup_default, attributeGroup_chain }; await funcMapBiblosAttributes(archive, attributeGroups, attributeModes); if (isMainDocument) { UDS.Model.Documents.Document.BiblosArchive = archive.Name; return; } if (UDS.Model.Documents.DocumentAttachment != null && UDS.Model.Documents.DocumentAttachment.CreateBiblosArchive) { UDS.Model.Documents.DocumentAttachment.BiblosArchive = archive.Name; } if (UDS.Model.Documents.DocumentAnnexed != null && UDS.Model.Documents.DocumentAnnexed.CreateBiblosArchive) { UDS.Model.Documents.DocumentAnnexed.BiblosArchive = archive.Name; } //aggiungo il blocco riguardante la Dematerializzazione se questa è prevista if ((UDS.Model.Documents.Document != null && UDS.Model.Documents.Document.DematerialisationEnabled) || (UDS.Model.Documents.DocumentAttachment != null && UDS.Model.Documents.DocumentAttachment.DematerialisationEnabled) || (UDS.Model.Documents.DocumentAnnexed != null && UDS.Model.Documents.DocumentAnnexed.DematerialisationEnabled)) { AddDocumentDematerialisation(UDS.Model.Documents, archive.Name); } } catch (Exception ex) { _logger.WriteError(ex, LogCategories); throw ex; } }