private void LoadVersion(int version) { this.Cursor = Cursors.WaitCursor; var objSimples = mCurrentODSimples[0]; if (version > 0) { // Mostrar versão historica (e bloquear alterações) ObjDigSimples VersaoObjectoDigital = (ObjDigSimples)SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.LoadID(objSimples.pid, objSimples.historico[version].timestamp); FicheirosOrderManager1.Deactivate(); ObjectToView(VersaoObjectoDigital); grpODTitleAndPub.Enabled = false; FicheirosOrderManager1.ActivateReadOnlyMode(); } else { // Mostar versão original (desbloquear alterações) FicheirosOrderManager1.Deactivate(); ObjectToView(objSimples); grpODTitleAndPub.Enabled = true; if (FedoraHelper.HasObjDigWritePermission(objSimples.pid)) { FicheirosOrderManager1.DeactivateReadOnlyMode(); } } this.Cursor = Cursors.Default; }
private void ProcessSelectionChange() { this.Cursor = Cursors.WaitCursor; var items = lstView.SelectedItems; if (items.Count != 1) { previewControl.Clear(); this.Cursor = Cursors.Default; return; } else { if (items[0].Tag.GetType() == typeof(ObjDigSimples)) { var selectedItem = (ObjDigSimples)items[0].Tag; if (selectedItem == null && FedoraHelper.HasObjDigReadPermission(selectedItem.pid)) { previewControl.Clear(); return; } previewControl.ShowPDF(selectedItem.pid); } else if (items[0].Tag.GetType() == typeof(Anexo)) { previewControl.ShowAnexo(items[0].Tag as Anexo); } else if (items[0].Tag.GetType() == typeof(GISADataset.ObjetoDigitalRow)) { var selectedItem = (GISADataset.ObjetoDigitalRow)items[0].Tag; previewControl.ShowPDF(selectedItem.pid); } } this.Cursor = Cursors.Default; }
private void FormFullScreenPdf_Load(object sender, EventArgs e) { this.previewControl.Qualidade = FedoraHelper.TranslateQualityEnum(this.preSelectedQuality); lstView.Focus(); if (lstView.Items.Count > 0) { lstView.selectItem(lstView.Items[0]); } }
private void CreateDatabaseObjDigSimplesSolto(ObjDigSimples odSimples) { Debug.Assert(odSimples.guiorder > 0); var odRow = GisaDataSetHelper.GetInstance().ObjetoDigital.AddObjetoDigitalRow(odSimples.pid, odSimples.titulo, odSimples.publicado, odSimples.guiorder, new byte[] { }, 0); //PermissoesHelper.AddNewObjDigGrantPermissions(odRow, currentNivel); FedoraHelper.RelateODtoUI(odSimples, odRow, currentNivel.GetFRDBaseRows().Single()); newObjects.Add(odRow, odSimples); }
private void DocumentoSimplesOrderManager1_RemoveInvoked(object sender, EventArgs e) { var result = MessageBox.Show("Tem a certeza que pretende apagar o(s) objeto(s) digital(ais) selecionado(s)?", "Apagar objeto(s) digital(ais)", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.No) { return; } // TODO: avisar se existem ods associadados a subdocumentos var odsSimples = new List <ObjDigSimples>(); if (mCurrentODComp != null) { odsSimples = mCurrentODComp.objSimples; } else { odsSimples = mCurrentODSimples; } DocumentoSimplesOrderManager1.getSelectedItems().ForEach(item => { var selectedODSimples = item.Tag as ObjDigSimples; var odSimples = odsSimples.SingleOrDefault(od => od.pid.Equals(selectedODSimples.pid)); if (odSimples != null) // se OD está com o estado "added" basta removê-lo da lista; caso contrário é necessário atualizá-lo { odSimples.state = State.deleted; } var nRow = FedoraHelper.GetRelatedNivelDoc(selectedODSimples.pid); if (nRow != null) { DocumentoSimplesOrderManager1.RefreshItem(item, "", null, ""); var docSimples = new SubDocumento(); docSimples.nRow = nRow; docSimples.id = nRow.ID; docSimples.guiorder = item.Index + 1; docSimples.designacao = nRow.GetNivelDesignadoRows().Single().Designacao; item.Tag = docSimples; } item.Remove(); }); UpdateODCompostoStatePublicado(); UpdateGrpODComposto(); if (DocumentoSimplesOrderManager1.getSelectedItems().Count == 1 && DocumentoSimplesOrderManager1.getSelectedItems()[0].Tag.GetType() == typeof(SubDocumento)) { DocumentoSimplesOrderManager1.SetEditMixedMode(); } }
public override void ModelToView() { IsPopulated = false; if (IsReadOnlyMode) { trvODsFedora.Nodes.Clear(); if (SessionHelper.AppConfiguration.GetCurrentAppconfiguration().IsFedoraEnable()) { var odRows = FedoraHelper.GetObjetosDigitais(CurrentFRDBase); foreach (var odRow in odRows.OrderBy(r => r.GUIOrder)) { AddObjetoDigital(odRow); } } } else { odHelper.currentNivel = CurrentFRDBase.NivelRow; odHelper.LoadData(); controlObjetoDigital1.ViewMode = odHelper.mContexto; controlObjetoDigital1.CurrentODSimples = odHelper.currentODSimples; controlObjetoDigital1.CurrentODComp = odHelper.currentODComp; controlObjetoDigital1.docSimplesSemOD = odHelper.docSimplesSemOD; switch (odHelper.mContexto) { case ObjetoDigitalFedoraHelper.Contexto.objetosDigitais: //this.lblFuncao.Text = "Objetos Digitais"; controlObjetoDigital1.Titulo = controlObjetoDigital1.CurrentODComp != null ? controlObjetoDigital1.CurrentODComp.titulo : odHelper.currentNivel.GetNivelDesignadoRows().Single().Designacao; break; case ObjetoDigitalFedoraHelper.Contexto.imagens: //this.lblFuncao.Text = "Objeto Digital Simples"; controlObjetoDigital1.Titulo = odHelper.currentODSimples.Count > 0 ? odHelper.currentODSimples[0].titulo : odHelper.currentNivel.GetNivelDesignadoRows().Single().Designacao; break; default: // igual a ObjetoDigitalFedoraHelper.Contexto.objetosDigitais.nenhum //this.lblFuncao.Text = "Objeto(s) Digital(ais) associado(s) não encontrado(s)"; break; } controlObjetoDigital1.ModelToView(); } IsPopulated = true; }
public void Clear(bool preserveQualitySelected) { this.webBrowser.Navigate(""); this.objectoActual = null; this.isDocumentLoaded = false; this.cmbQuality.Enabled = false; if (!preserveQualitySelected) { this.cmbQuality.SelectedItem = FedoraHelper.TranslateQualityEnum(defaultQuality); } errorLabel.Text = ""; errorLabel.Visible = true; lblFicheiro.Text = ""; this.Cursor = Cursors.Default; }
private void RefreshDetails(TreeNode node) { controlFedoraPdfViewer1.BringToFront(); if (node != null && node.Nodes.Count == 0) // não mostrar pdf do composto { var odRow = node.Tag as GISADataset.ObjetoDigitalRow; if (FedoraHelper.HasObjDigReadPermission(odRow.pid)) { this.controlFedoraPdfViewer1.ShowPDF(odRow.pid); } } else { ClearPreview(); } }
public void ShowPDF(string pid) { this.cmbQuality.Enabled = true; this.Cursor = Cursors.WaitCursor; this.objectoActual = pid; var qualidade = FedoraHelper.TranslateQualityEnum(cmbQuality.SelectedItem as string); bool success; string errorMessage; string fileName = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.GetDisseminatorByUrl(pid, qualidade, out success, out errorMessage); if (success) { errorLabel.Visible = false; Uri fileUri; if (Uri.TryCreate(@fileName, UriKind.RelativeOrAbsolute, out fileUri)) { webBrowser.Navigate(fileUri); } else { Clear(); } } else { ShowError(errorMessage); } // obter o nome (do ficheiro) da primeira imagem do objeto digital var od = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.LoadID(pid, null) as ObjDigSimples; if (od != null) { lblFicheiro.Text = od.fich_associados.First().url.Split('/').Last(); } else { lblFicheiro.Text = "n/d"; } this.Cursor = Cursors.Default; }
public frmObjetoDigitalSimples() { InitializeComponent(); ficheirosOrderManager1.OrderManagerSelectedIndexChangedEvent += new EventHandler <BeforeNewSelectionEventArgs>(OrderManagerSelectedIndexChangedEvent); ficheirosOrderManager1.FullScreenInvoked += new EventHandler <EventArgs>(FicheirosOrderManager1_FullScreenInvoked); ficheirosOrderManager1.AttachedFileAdded += new EventHandler <EventArgs>(FicheirosOrderManager1_AttachedFileAdded); ficheirosOrderManager1.AttachedFileDeleted += new EventHandler <EventArgs>(FicheirosOrderManager1_AttachedFileDeleted); versionControl.Enabled = false; ButtonTI.Image = SharedResourcesOld.CurrentSharedResources.ChamarPicker; CurrentToolTip.SetToolTip(ButtonTI, "Adicionar título predefinido"); var configRow = GisaDataSetHelper.GetInstance().GlobalConfig.Cast <GISADataset.GlobalConfigRow>().Single(); var defaultQuality = configRow.IsQualidadeImagemNull() ? Quality.Low : FedoraHelper.TranslateQualityEnum(configRow.QualidadeImagem); this.previewControl.SetupOtherMode(); }
public ControlObjetoDigital() { InitializeComponent(); DocumentoSimplesOrderManager1.OrderManagerSelectedIndexChangedEvent += new EventHandler <BeforeNewSelectionEventArgs>(OrderManagerSelectedIndexChangedEvent); DocumentoSimplesOrderManager1.FullScreenInvoked += new EventHandler <EventArgs>(DocumentoSimplesOrderManager1_FullScreenInvoked); DocumentoSimplesOrderManager1.NewInvoked += new EventHandler <EventArgs>(DocumentoSimplesOrderManager1_NewInvoked); DocumentoSimplesOrderManager1.EditInvoked += new EventHandler <EventArgs>(DocumentoSimplesOrderManager1_EditInvoked); DocumentoSimplesOrderManager1.RemoveInvoked += new EventHandler <EventArgs>(DocumentoSimplesOrderManager1_RemoveInvoked); FicheirosOrderManager1.OrderManagerSelectedIndexChangedEvent += new EventHandler <BeforeNewSelectionEventArgs>(OrderManagerSelectedIndexChangedEvent); FicheirosOrderManager1.FullScreenInvoked += new EventHandler <EventArgs>(FicheirosOrderManager1_FullScreenInvoked); FicheirosOrderManager1.AttachedFileAdded += new EventHandler <EventArgs>(FicheirosOrderManager1_AttachedFileAdded); FicheirosOrderManager1.AttachedFileDeleted += new EventHandler <EventArgs>(FicheirosOrderManager1_AttachedFileDeleted); var configRow = GisaDataSetHelper.GetInstance().GlobalConfig.Cast <GISADataset.GlobalConfigRow>().Single(); var defaultQuality = configRow.IsQualidadeImagemNull() ? Quality.Low : FedoraHelper.TranslateQualityEnum(configRow.QualidadeImagem); this.previewControl.SetupOtherMode(); }
private void cmbQuality_SelectedIndexChanged(object sender, EventArgs e) { if (lastSelectedIndex == cmbQuality.SelectedIndex) { return; } lastSelectedIndex = cmbQuality.SelectedIndex; if (objectoActual != null) { if (objectoActual.GetType() == typeof(Anexo)) { ShowAnexo(objectoActual as Anexo); } else if (objectoActual.GetType() == typeof(String) && FedoraHelper.HasObjDigReadPermission(objectoActual as string)) { ShowPDF(objectoActual as string); } } }
private void AddOrRemoveODRelations(ObjDigComposto odComp, ObjDigSimples odSimples, GISADataset.ObjetoDigitalRow odRow) { var frdRow = currentNivel.GetFRDBaseRows().Single(); if (odComp.state == State.added) { var imgODRow = odRow.GetSFRDImagemObjetoDigitalRows().SingleOrDefault(r => r.IDFRDBase == frdRow.ID); if (imgODRow != null) // esta row é nula no caso dos ODs Simples associados a subdocumentos { imgODRow.SFRDImagemRowParent.Delete(); imgODRow.Delete(); } GisaDataSetHelper.GetInstance().ObjetoDigitalRelacaoHierarquica.AddObjetoDigitalRelacaoHierarquicaRow(odRow, currentObjetoDigitalRowComp, new byte[] { }, 0); } else if (odComp.state == State.deleted) { if (odRow.GetSFRDImagemObjetoDigitalRows().Count() == 0) // se se tratar de um od simples sem estar relacionado com um subdocumento cria-se relacao com a UI selecionada { FedoraHelper.RelateODtoUI(odSimples, odRow, currentNivel.GetFRDBaseRows().Single()); } } }
private void btnFullScreen_Click(object sender, EventArgs e) { // Clonar a lista de nós a apresentar em modo full screen List <ListViewItem> clonedItemList = new List <ListViewItem>(); var nodesList = trvODsFedora.Nodes.Count > 1 ? trvODsFedora.Nodes : trvODsFedora.Nodes[0].Nodes; if (trvODsFedora.Nodes.Count == 1 && nodesList.Count == 0) { var item = new ListViewItem(trvODsFedora.Nodes[0].Text) { Tag = new ObjDigSimples() { pid = ((GISADataset.ObjetoDigitalRow)trvODsFedora.Nodes[0].Tag).pid } }; FormFullScreenPdf ecraCompleto = new FormFullScreenPdf(new List <ListViewItem>() { item }, 0, FedoraHelper.TranslateQualityEnum(controlFedoraPdfViewer1.Qualidade)); ecraCompleto.ShowDialog(); } else { clonedItemList.AddRange(nodesList.Cast <TreeNode>().Select(node => new ListViewItem(node.Text) { Tag = new ObjDigSimples() { pid = ((GISADataset.ObjetoDigitalRow)node.Tag).pid } })); var selectedItemIndex = trvODsFedora.SelectedNode != null ? trvODsFedora.SelectedNode.Index : -1; // Instanciar uma janela modal para mostrar a lista clonada (passamos o identificador do objecto pai, caso exista) FormFullScreenPdf ecraCompleto = new FormFullScreenPdf(clonedItemList, selectedItemIndex, FedoraHelper.TranslateQualityEnum(controlFedoraPdfViewer1.Qualidade)); ecraCompleto.ShowDialog(); } }
public ControlFedoraPdfViewer() { InitializeComponent(); //GISADataset.GlobalConfigRow configRow = null; //var defaultQuality = Quality.Low; var configRow = GisaDataSetHelper.GetInstance().GlobalConfig.Cast <GISADataset.GlobalConfigRow>().Single(); defaultQuality = configRow.IsQualidadeImagemNull() ? Quality.Low : FedoraHelper.TranslateQualityEnum(configRow.QualidadeImagem); foreach (Quality quality in Enum.GetValues(typeof(Quality))) { var qualityString = FedoraHelper.TranslateQualityEnum(quality); cmbQuality.Items.Add(qualityString); if (quality == defaultQuality) { cmbQuality.SelectedItem = qualityString; } } objectoActual = null; isDocumentLoaded = false; }
private ListViewItem AddODSimplesToList(ObjDigSimples objSimples) { var hasReadPermission = true; if (objSimples.state != State.added) { hasReadPermission = FedoraHelper.HasObjDigReadPermission(objSimples.pid); } var item = DocumentoSimplesOrderManager1.CreateItem(FedoraHelper.GetDesignacaoUI(objSimples.pid), objSimples.titulo, objSimples.state == State.added ? "" : objSimples.pid, objSimples.publicado, objSimples); // marcar os objetos simples para os quais não existe permissão de leitura if (!hasReadPermission) { item.ForeColor = Color.Gray; } if (objSimples.state == State.notFound) { item.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, FontStyle.Italic, System.Drawing.GraphicsUnit.Point, System.Convert.ToByte(0)); } return(item); }
private void ShellOpenImg() { if (this.pictImagem == null) { return; } this.Cursor = Cursors.WaitCursor; try { string sUrl = null; System.Diagnostics.Process p = new System.Diagnostics.Process(); switch (TipoAcessoRecurso) { case ResourceAccessType.Web: if (((GISADataset.GlobalConfigRow)(GisaDataSetHelper.GetInstance().GlobalConfig.Select()[0])).URLBaseActivo) { sUrl = string.Format(((GISADataset.GlobalConfigRow)(GisaDataSetHelper.GetInstance().GlobalConfig.Select()[0])).URLBase.Replace("<id>", "{0}"), SourceLocation); } else { sUrl = SourceLocation; } break; case ResourceAccessType.Smb: sUrl = SourceLocation; break; case ResourceAccessType.Fedora: var configRow = GisaDataSetHelper.GetInstance().GlobalConfig.Cast <GISADataset.GlobalConfigRow>().Single(); var qualidade = configRow.IsQualidadeImagemNull() ? Quality.Low : FedoraHelper.TranslateQualityEnum(configRow.QualidadeImagem); bool success; string errorMessage; sUrl = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.GetDisseminatorByUrl(SourceLocation, qualidade, out success, out errorMessage); if (String.IsNullOrEmpty(sUrl) || !File.Exists(sUrl) || !success) { sUrl = null; } if (!success) { MessageBox.Show(errorMessage, "Repositório Digital", MessageBoxButtons.OK, MessageBoxIcon.Warning); } break; case ResourceAccessType.DICAnexo: sUrl = DocInPortoHelper.getDocInPortoAnexo(SourceLocation, OtherLocationParams); // break; case ResourceAccessType.DICConteudo: sUrl = DocInPortoHelper.getDocInPortoConteudo(SourceLocation); break; } if (sUrl != null && sUrl.Length > 0) { p = System.Diagnostics.Process.Start(sUrl); } } catch (Win32Exception ex) { Trace.WriteLine(ex.ToString()); if (ex.NativeErrorCode == 2) { //ERROR FILE NOT FOUND MessageBox.Show("O caminho especificado não é válido.", "Imagem", MessageBoxButtons.OK, MessageBoxIcon.Error); } } this.Cursor = Cursors.Default; }
public void ShowFullScreenMode(List <ListViewItem> itemsToDisplay, int selectedItemIndex) { // Clonar a lista de nós a apresentar em modo full screen List <ListViewItem> clonedItemList = new List <ListViewItem>(); clonedItemList.AddRange(itemsToDisplay.Select(item => item.Clone() as ListViewItem)); // Instanciar uma janela modal para mostrar a lista clonada (passamos o identificador do objecto pai, caso exista) FormFullScreenPdf ecraCompleto = new FormFullScreenPdf(clonedItemList, selectedItemIndex, FedoraHelper.TranslateQualityEnum(previewControl.Qualidade)); ecraCompleto.ShowDialog(); }
private static void UpdateNvlDocSimplesOrderNr(ObjDigSimples odSimples) { if (odSimples.gisa_id != null && odSimples.gisa_id.Length > 0) { var nds = GisaDataSetHelper.GetInstance().NivelDocumentoSimples.Cast <GISADataset.NivelDocumentoSimplesRow>().SingleOrDefault(r => r.RowState != DataRowState.Deleted && r.ID == FedoraHelper.GetGisaID(odSimples.gisa_id)); if (nds != null) { nds.GUIOrder = odSimples.guiorder; } } }
private void ViewToModelObjsSimples(List <ObjDigSimples> odsSimples, ObjDigComposto odComp, GISADataset.ObjetoDigitalRow odRowComp) { odsSimples.ForEach(odSimples => { var odRow = default(GISADataset.ObjetoDigitalRow); switch (odSimples.state) { case State.added: if (odComp != null && odComp.state != State.deleted) { CreateDatabaseObjDigSimples(odComp, odRowComp, odSimples); } else { CreateDatabaseObjDigSimplesSolto(odSimples); } break; case State.modified: odRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().Single(r => r.RowState != DataRowState.Deleted && r.pid.Equals(odSimples.pid)); odRow.Titulo = odSimples.titulo; odRow.Publicado = odSimples.publicado; odRow.GUIOrder = odSimples.guiorder; UpdateNvlDocSimplesOrderNr(odSimples); if (odComp != null) { AddOrRemoveODRelations(odComp, odSimples, odRow); } break; case State.deleted: odRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().Single(r => r.RowState != DataRowState.Deleted && r.pid.Equals(odSimples.pid)); FedoraHelper.DeleteObjDigitalRows(odRow); break; case State.unchanged: // apanhar o caso de a ordem do OD Simples ter mudado odRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().Single(r => r.RowState != DataRowState.Deleted && r.pid.Equals(odSimples.pid)); odRow.GUIOrder = odSimples.guiorder; UpdateNvlDocSimplesOrderNr(odSimples); if (odComp != null) { AddOrRemoveODRelations(odComp, odSimples, odRow); } break; } }); // atualizar a tipologia e assuntos dos objetos simples // - se houver um objeto composto, nenhum dos seus simples não pode ter tipologia e assuntos definidos // - se não houver um objeto composto: // * se o nro de objetos simples for um, então esse objeto simples pode ter tipologia e assuntos definidos // * se o nro de objetos simples for maior que um, então nenhum desses objetos pode ter tipologia e assuntos definidos if (odComp == null || odComp.state == State.deleted) { var ods = odsSimples.Where(od => od.state != State.deleted); if (ods.Count() == 1) { var odSimples = ods.Single(); var frdRow = currentNivel.GetFRDBaseRows().Single(); var idxTip = frdRow.GetIndexFRDCARows().SingleOrDefault(idx => idx["Selector"] != DBNull.Value && idx.Selector == -1); if (idxTip != null) { odSimples.tipologia = idxTip.ControloAutRow.GetControloAutDicionarioRows().Single(cad => cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).DicionarioRow.Termo; } var assuntos = frdRow.GetIndexFRDCARows().Where(idx => idx.ControloAutRow.IDTipoNoticiaAut < 4).SelectMany(idx => idx.ControloAutRow.GetControloAutDicionarioRows()).Where(cad => cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).Select(cad => cad.DicionarioRow.Termo); if (assuntos.Count() > 0) { odSimples.assuntos = assuntos.ToList(); } } else { odsSimples.Where(od => od.state != State.deleted).ToList().ForEach(od => { od.tipologia = ""; od.assuntos.Clear(); if (od.state == State.unchanged) { od.state = State.modified; } }); } } else { odsSimples.Where(od => od.state != State.deleted).ToList().ForEach(od => { od.tipologia = ""; od.assuntos.Clear(); if (od.state == State.unchanged) { od.state = State.modified; } }); } }
public void LoadData() { currentODSimples = new List <ObjDigSimples>(); docSimplesSemOD = new List <SubDocumento>(); var tnrID = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First().IDTipoNivelRelacionado; // só é considerado válido um contexto definido por um nivel documental if (currentNivel.IDTipoNivel != TipoNivel.DOCUMENTAL) { mContexto = ObjetoDigitalFedoraHelper.Contexto.nenhum; return; } mContexto = IdentifyViewMode(currentNivel); GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection()); try { GisaDataSetHelper.ManageDatasetConstraints(false); // carregar a informação da bd consuante o tipo nivel selecionado if (tnrID == (long)TipoNivelRelacionado.SD) { var nUpperRow = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Single().NivelRowByNivelRelacaoHierarquicaUpper; DBAbstractDataLayer.DataAccessRules.FedoraRule.Current.LoadObjDigitalData(GisaDataSetHelper.GetInstance(), nUpperRow.ID, nUpperRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First().IDTipoNivelRelacionado, ho.Connection); } else { DBAbstractDataLayer.DataAccessRules.FedoraRule.Current.LoadObjDigitalData(GisaDataSetHelper.GetInstance(), currentNivel.ID, tnrID, ho.Connection); } GisaDataSetHelper.ManageDatasetConstraints(true); } catch (Exception e) { // TODO: apanhar a excepção provocada por uma falha com a comunicação com o servidor Trace.WriteLine(e); throw; } finally { ho.Dispose(); } List <string> pidsParaApagar = new List <string>(); // por algum motivo, no repositório, o objeto composto tem na sua estrutura ods simples que já foram apagados var frdRow = currentNivel.GetFRDBaseRows().Single(); var imgRows = new List <GISADataset.SFRDImagemRow>(); imgRows.AddRange(frdRow.GetSFRDImagemRows().Where(r => r.Tipo.Equals(FedoraHelper.typeFedora))); if (imgRows.Count == 0) { if (tnrID == (long)TipoNivelRelacionado.SD) // Identificar, caso exista, o OD Composto no documento/processo do subdocumento { var nUpperRow = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Single().NivelRowByNivelRelacaoHierarquicaUpper; // determinar se o documento/processo tem um OD composto associado var imgRowsUpper = nUpperRow.GetFRDBaseRows().Single().GetSFRDImagemRows().Where(r => r.Tipo.Equals(FedoraHelper.typeFedora)).ToList(); if (imgRowsUpper.Count != 1) { return; // não existe nenhum OD composto para o OD simples associado ao subdocumento } // o documento/processo tem um OD associado. Determinar se esse OD é composto var odRowUpper = imgRowsUpper[0].GetSFRDImagemObjetoDigitalRows().Single().ObjetoDigitalRow; if (odRowUpper.GetObjetoDigitalRelacaoHierarquicaRowsByObjetoDigitalObjetoDigitalRelacaoHierarquicaUpper().Count() > 0) { // o OD é composto currentODComp = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.LoadID(odRowUpper.pid, null) as ObjDigComposto; currentObjetoDigitalRowComp = odRowUpper; if (currentODComp == null) { return; // não se conseguiu obter o OD do servidor... } // clona o próprio e todos os seus simples currentODComp.original = currentODComp.Clone(); } } else if (tnrID == (long)TipoNivelRelacionado.D) // documento/processo sem ODs associados directamente mas com subdocumentos com ODs simples { GetSubDocsImgRows(imgRows); GetODRows(imgRows); } } else if (imgRows.Count == 1) // existe 1 OD associado mas não se sabe se é simples ou composto { var odRow = imgRows[0].GetSFRDImagemObjetoDigitalRows().Single().ObjetoDigitalRow; var od = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.LoadID(odRow.pid, null); if (od == null) { ObjectNotFound(odRow.pid); return; } od.publicado = odRow.Publicado; if (tnrID == (long)TipoNivelRelacionado.SD) // o OD é garantidamente simples { PermissoesHelper.LoadObjDigitalPermissions(currentNivel, SessionHelper.GetGisaPrincipal().TrusteeUserOperator.TrusteeRow); currentObjetoDigitalRow = odRow; currentODSimples = new List <ObjDigSimples>() { od as ObjDigSimples }; var nUpperRow = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Single().NivelRowByNivelRelacaoHierarquicaUpper; // determinar se o documento/processo tem um OD composto associado var imgRowsUpper = nUpperRow.GetFRDBaseRows().Single().GetSFRDImagemRows().Where(r => r.Tipo.Equals(FedoraHelper.typeFedora)).ToList(); if (imgRowsUpper.Count == 1) { // o documento/processo tem um OD associado. Determinar se esse OD é composto var odRowUpper = imgRowsUpper[0].GetSFRDImagemObjetoDigitalRows().Single().ObjetoDigitalRow; if (odRowUpper.GetObjetoDigitalRelacaoHierarquicaRowsByObjetoDigitalObjetoDigitalRelacaoHierarquicaUpper().Count() > 0) { // o OD é composto currentODComp = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.LoadID(odRowUpper.pid, null) as ObjDigComposto; currentObjetoDigitalRowComp = odRowUpper; if (currentODComp == null) { ObjectNotFound(odRowUpper.pid); return; } // não se conseguiu obter o OD do servidor... ((ObjDigSimples)od).parentDocumentTitle = nUpperRow.GetNivelDesignadoRows().Single().Designacao; //currentODComp.publicado = currentObjetoDigitalRowComp.Publicado; currentODComp.objSimples[currentODComp.objSimples.FindIndex(obj => obj.pid == od.pid)] = od as ObjDigSimples; // clona o próprio e todos os seus simples currentODComp.original = currentODComp.Clone(); } } } else if (tnrID == (long)TipoNivelRelacionado.D) // se a UI selecionada for um documento/processo também tem que se ter em conta os OD simples de subdocumentos { if (od.GetType() == typeof(ObjDigSimples)) { currentObjetoDigitalRow = imgRows.Single().GetSFRDImagemObjetoDigitalRows().Single().ObjetoDigitalRow; GetSubDocsImgRows(imgRows); GetODRows(imgRows); } else { currentODComp = od as ObjDigComposto; currentObjetoDigitalRowComp = odRow; currentODComp.objSimples.ForEach(odSimples => { var odSimplesRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().SingleOrDefault(r => r.pid.Equals(odSimples.pid)); if (odSimplesRow != null) { odSimples.guiorder = odSimplesRow.GUIOrder; odSimples.publicado = odSimplesRow.Publicado; } else if (odSimples.serverState == ServerState.Deleted) { pidsParaApagar.Add(odSimples.pid); } }); if (pidsParaApagar.Count > 0) { FedoraHelper.FixObjetoDigital(ref currentODComp, pidsParaApagar, frdRow, ref currentObjetoDigitalRowComp, ref currentObjetoDigitalRow); } } } else { if (od.GetType() == typeof(ObjDigSimples)) { currentODSimples = new List <ObjDigSimples>() { od as ObjDigSimples }; currentObjetoDigitalRow = odRow; } else { currentODComp = od as ObjDigComposto; currentObjetoDigitalRowComp = odRow; } } od.original = od.Clone(); } else { // caso onde estão associados vários simples soltos e garantidamente a UI selecionada não é um subdocumento (um subdocumento só pode ter um OD simples associado) Trace.Assert(tnrID != (long)TipoNivelRelacionado.SD); GetSubDocsImgRows(imgRows); GetODRows(imgRows); } // preencher o estado publicado nos objetos digitais if (currentODComp != null) { var odRow = default(GISADataset.ObjetoDigitalRow); currentODComp.objSimples.ToList().ForEach(odSimples => { odRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().SingleOrDefault(r => r.pid.Equals(odSimples.pid)); odSimples.publicado = odRow.Publicado; }); odRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().Single(r => r.pid.Equals(currentODComp.pid)); currentODComp.publicado = odRow.Publicado; } else { currentODSimples.ToList().ForEach(odSimples => { var odRow = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().Single(r => r.pid.Equals(odSimples.pid)); odSimples.publicado = odRow.Publicado; }); } // obter documentos simples sem objeto digital para efeitos de ordenação GetSubDocsSemODs(); }
public void ShowFullScreenMode(List <ListViewItem> itemsToDisplay, int selectedItemIndex) { // Clonar a lista de nós a apresentar em modo full screen List <ListViewItem> clonedItemList = new List <ListViewItem>(); FormFullScreenPdf ecraCompleto = null; if (mViewMode == ObjetoDigitalFedoraHelper.Contexto.imagens) { clonedItemList.AddRange(itemsToDisplay.Select(item => item.Clone() as ListViewItem)); // Instanciar uma janela modal para mostrar a lista clonada (passamos o identificador do objeto pai, caso exista) ecraCompleto = new FormFullScreenPdf(clonedItemList, selectedItemIndex, FedoraHelper.TranslateQualityEnum(previewControl.Qualidade)); } else { clonedItemList.AddRange(itemsToDisplay .Where(item => item.Tag.GetType() == typeof(ObjDigSimples) && FedoraHelper.HasObjDigReadPermission(((ObjDigSimples)item.Tag).pid)) .Select(item => new ListViewItem(item.SubItems[DocumentoSimplesOrderManager1.colDesignacaoOD.Index].Text) { Tag = item.Tag })); int newSelectedItemIndex = -1; if (selectedItemIndex >= 0) { var od = itemsToDisplay[selectedItemIndex].Tag as ObjDigSimples; newSelectedItemIndex = od == null ? -1 : clonedItemList.FindIndex(item => ((ObjDigSimples)item.Tag).pid.Equals(od.pid)); } // Instanciar uma janela modal para mostrar a lista clonada (passamos o identificador do objeto pai, caso exista) ecraCompleto = new FormFullScreenPdf(clonedItemList, newSelectedItemIndex, FedoraHelper.TranslateQualityEnum(previewControl.Qualidade)); } ecraCompleto.ShowDialog(); }
public override PersistencyHelper.SaveResult Save(bool activateOpcaoCancelar) { if (this.CurrentFRDBase == null) { return(PersistencyHelper.SaveResult.unsuccessful); } List <long> IDs = new List <long>(); List <string> idsToUpdate = new List <string>(); List <NivelRule.PublicacaoDocumentos> DocsID = new List <NivelRule.PublicacaoDocumentos> (); GISADataset.RelacaoHierarquicaRow rhRow = null; PersistencyHelper.SaveResult successfulSave = PersistencyHelper.SaveResult.unsuccessful; if ((CurrentFRDBase.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Length > 0)) { rhRow = CurrentFRDBase.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0]; PersistencyHelper.PublishSubDocumentosPreSaveArguments psArgs1 = new PersistencyHelper.PublishSubDocumentosPreSaveArguments(); PersistencyHelper.AvaliaDocumentosTabelaPreSaveArguments psArgs2 = new PersistencyHelper.AvaliaDocumentosTabelaPreSaveArguments(); // publicação de subdocumentos baseado na publicação dos documentos respectivos if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.D) { //contexto é um documento if (CurrentFRDBase.GetSFRDAvaliacaoRows().Length > 0) { GISADataset.SFRDAvaliacaoRow relRow = CurrentFRDBase.GetSFRDAvaliacaoRows()[0]; if ((relRow.RowState == DataRowState.Added && relRow.Publicar) || relRow.RowState == DataRowState.Modified) { DocsID.Add(new DBAbstractDataLayer.DataAccessRules.NivelRule.PublicacaoDocumentos(CurrentFRDBase.NivelRow.ID, CurrentFRDBase.GetSFRDAvaliacaoRows()[0].Publicar)); IDs.Add(CurrentFRDBase.NivelRow.ID); PermissoesHelper.ChangeDocPermissionPublicados(CurrentFRDBase.NivelRow.ID, (CurrentFRDBase.GetSFRDAvaliacaoRows())[0].Publicar); } } } else if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SR || rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SSR) { //o contexto é uma série ou subsérie e é alterado o estado de publicação de vários documentos simultaneamente foreach (GISADataset.SFRDAvaliacaoRow sfrdAv in GisaDataSetHelper.GetInstance().SFRDAvaliacao.Select("", "", DataViewRowState.Added | DataViewRowState.ModifiedCurrent)) { if (sfrdAv.FRDBaseRow.ID != CurrentFRDBase.ID) { DocsID.Add(new DBAbstractDataLayer.DataAccessRules.NivelRule.PublicacaoDocumentos(sfrdAv.FRDBaseRow.NivelRow.ID, sfrdAv.Publicar)); IDs.Add(sfrdAv.FRDBaseRow.NivelRow.ID); PermissoesHelper.ChangeDocPermissionPublicados(sfrdAv.FRDBaseRow.NivelRow.ID, sfrdAv.Publicar); } else { IDs.Add(sfrdAv.FRDBaseRow.IDNivel); } } if (!(CurrentFRDBase.GetSFRDAvaliacaoRows().Length == 0 || CurrentFRDBase.GetSFRDAvaliacaoRows()[0].IsIDModeloAvaliacaoNull() || (!(CurrentFRDBase.GetSFRDAvaliacaoRows()[0].RowState == DataRowState.Added) && !(CurrentFRDBase.GetSFRDAvaliacaoRows()[0]["IDModeloAvaliacao", DataRowVersion.Original] == DBNull.Value) && ((long)(CurrentFRDBase.GetSFRDAvaliacaoRows()[0]["IDModeloAvaliacao", DataRowVersion.Original])) == (long)(CurrentFRDBase.GetSFRDAvaliacaoRows()[0]["IDModeloAvaliacao", DataRowVersion.Current])))) { psArgs2.frdID = CurrentFRDBase.ID; psArgs2.modeloAvaliacaoID = CurrentFRDBase.GetSFRDAvaliacaoRows()[0].IDModeloAvaliacao; psArgs2.avaliacaoTabela = CurrentFRDBase.GetSFRDAvaliacaoRows()[0].AvaliacaoTabela; if (CurrentFRDBase.GetSFRDAvaliacaoRows()[0].IsPrazoConservacaoNull()) { psArgs2.prazoConservacao = 0; } else { psArgs2.prazoConservacao = CurrentFRDBase.GetSFRDAvaliacaoRows()[0].PrazoConservacao; } psArgs2.preservar = CurrentFRDBase.GetSFRDAvaliacaoRows()[0].Preservar; } } else { foreach (GISADataset.SFRDAvaliacaoRow sfrdAv in GisaDataSetHelper.GetInstance().SFRDAvaliacao.Select("", "", DataViewRowState.Added | DataViewRowState.ModifiedCurrent)) { PermissoesHelper.ChangeDocPermissionPublicados(sfrdAv.FRDBaseRow.NivelRow.ID, sfrdAv.Publicar); IDs.Add(sfrdAv.FRDBaseRow.IDNivel); } } // actualização do objecto digital caso exista ou o módulo esteja activo rhRow = CurrentFRDBase.NivelRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First(); var objDigital = default(ObjDigital); if (rhRow.IDTipoNivelRelacionado >= (long)TipoNivelRelacionado.D && SessionHelper.AppConfiguration.GetCurrentAppconfiguration().IsFedoraEnable()) { GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection()); try { GisaDataSetHelper.ManageDatasetConstraints(false); if (!PanelAmbitoConteudo1.IsLoaded) { PanelAmbitoConteudo1.LoadData(CurrentFRDBase, ho.Connection); } if (!PanelIndexacao1.IsLoaded) { PanelIndexacao1.LoadData(CurrentFRDBase, ho.Connection); } GisaDataSetHelper.ManageDatasetConstraints(true); } catch (System.Data.ConstraintException Ex) { Trace.WriteLine(Ex); GisaDataSetHelper.FixDataSet(GisaDataSetHelper.GetInstance(), ho.Connection); } catch (Exception e) { Trace.WriteLine(e); throw; } finally { ho.Dispose(); } // verificar alterações na tipologia e indexação var tipologia = string.Empty; var hasNewTip = Nivel.HasTipologiaChanged(CurrentFRDBase, out tipologia); var assuntos = Nivel.HasIndexacaoChanged(CurrentFRDBase); if (hasNewTip || assuntos != null) { objDigital = FedoraHelper.UpdateTipAssuntos(CurrentFRDBase.NivelRow, hasNewTip ? tipologia : null, assuntos); } } // actualizar objecto digital caso exista var preTransactionAction = new PreTransactionAction(); var fedArgs = new PersistencyHelper.FedoraIngestPreTransactionArguments(); preTransactionAction.args = fedArgs; preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs) { var odComp = this.PanelObjetoDigitalFedora1.GetObjDigitalComp(); var odSimples = this.PanelObjetoDigitalFedora1.GetObjDigitalSimples(); bool ingestSuccess = true; string msg = null; if (odComp != null) { ingestSuccess = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(odComp, out msg); } else if (odSimples != null && odSimples.Count > 0) { odSimples.ForEach(od => ingestSuccess &= SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(od, out msg)); } if (ingestSuccess) { this.PanelObjetoDigitalFedora1.odHelper.newObjects.Keys.ToList().ForEach(k => { k.pid = this.PanelObjetoDigitalFedora1.odHelper.newObjects[k].pid; }); } preTransactionArgs.cancelAction = !ingestSuccess; preTransactionArgs.message = msg; }; psArgs1.DocsID = DocsID; PostSaveAction postSaveAction = new PostSaveAction(); PersistencyHelper.UpdatePermissionsPostSaveArguments argsPSAction = new PersistencyHelper.UpdatePermissionsPostSaveArguments(); argsPSAction.NiveisIDs = IDs; argsPSAction.TrusteeID = PermissoesHelper.GrpAcessoPublicados.ID; postSaveAction.args = argsPSAction; postSaveAction.postSaveDelegate = delegate(PersistencyHelper.PostSaveArguments postSaveArgs) { if (!postSaveArgs.cancelAction && argsPSAction.NiveisIDs.Count > 0) { if (psArgs1 != null) { idsToUpdate = psArgs1.idsToUpdate; } } }; PersistencyHelper.AvaliacaoPublicacaoPreSaveArguments args = new PersistencyHelper.AvaliacaoPublicacaoPreSaveArguments(); args.psArgs1 = psArgs1; args.psArgs2 = psArgs2; successfulSave = PersistencyHelper.save(AvaliacaoPublicacao, args, postSaveAction, preTransactionAction, activateOpcaoCancelar); } else { successfulSave = PersistencyHelper.save(); } if (successfulSave == PersistencyHelper.SaveResult.successful) { GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection()); try { if (CurrentFRDBase.NivelRow.IDTipoNivel == TipoNivel.DOCUMENTAL) { if (idsToUpdate == null) { idsToUpdate = new List <string>(); } idsToUpdate.Add(CurrentFRDBase.NivelRow.ID.ToString()); GISA.Search.Updater.updateNivelDocumental(idsToUpdate); } ((frmMain)TopLevelControl).SetServerStatus(); } catch (GISA.Search.UpdateServerException) { ((frmMain)TopLevelControl).SetServerStatus(); } catch (Exception ex) { Trace.WriteLine(ex.ToString()); throw; } finally { ho.Dispose(); } } return(successfulSave); }
private void ActivatePanelStatusObjDigitais(bool resetOrder) { pxDataGridView1.DataSource = null; if (resetOrder) { pxDataGridView1.ResetOrder(); } List <ObjectoDigitalStatusRule.ObjectoDigitalStatusInfo> list_status = new List <ObjectoDigitalStatusRule.ObjectoDigitalStatusInfo>(); GisaDataSetHelper.ManageDatasetConstraints(false); long calc = DateTime.Now.Ticks; GisaDataSetHelper.HoldOpen ho = new GisaDataSetHelper.HoldOpen(GisaDataSetHelper.GetConnection()); try { long t1 = DateTime.Now.Ticks; list_status = ObjectoDigitalStatusRule.Current.GetObjectoDigitalStatusInfo(ho.Connection, this.pxDataGridView1.GetListSortDef()); Debug.WriteLine("<<GetObjectoDigitalStatusInfo>>: " + new TimeSpan(DateTime.Now.Ticks - t1).ToString()); } catch (Exception ex) { Trace.WriteLine(ex.ToString()); throw ex; } finally { ho.Dispose(); } GisaDataSetHelper.ManageDatasetConstraints(true); long t2 = DateTime.Now.Ticks; StatusObjDigitalDataTable.BeginLoadData(); StatusObjDigitalDataTable.Clear(); foreach (var status in list_status) { var row = StatusObjDigitalDataTable.NewRow(); row[PID] = status.pid; row[TITULO] = status.titulo; row[QUALIDADE] = FedoraHelper.TranslateQualityEnumEn(status.quality); row[ESTADO] = TranslateState(status.state); if (!status.date.Equals(DateTime.MinValue)) { row[DATA] = status.date; } else { row[DATA] = ""; } row[IDNIVEL] = status.idNivel; row[TITULONIVEL] = status.designacaoNivel; StatusObjDigitalDataTable.Rows.Add(row); } StatusObjDigitalDataTable.EndLoadData(); StatusObjDigitalDataTable.AcceptChanges(); this.pxDataGridView1.DataSource = StatusObjDigitalDataTable; Debug.WriteLine("<<t2>>: " + new TimeSpan(DateTime.Now.Ticks - t2).ToString()); }
private void OrderManagerSelectedIndexChangedEvent(object sender, BeforeNewSelectionEventArgs e) { this.Cursor = Cursors.WaitCursor; try { if (sender == DocumentoSimplesOrderManager1) { var item = e.ItemToBeSelected; var selectedOD = default(ObjDigital); if (item != null && item.Tag != null) { selectedOD = item.Tag as ObjDigital; } else { // Limpar browser se nada estiver seleccionado var items = DocumentoSimplesOrderManager1.getTrulySelectedItems(); if (items.Count != 1) { previewControl.Clear(true); DocumentoSimplesOrderManager1.updateToolBarButtons(); return; } selectedOD = items[0].Tag as ObjDigital; } if (selectedOD == null || (selectedOD != null && selectedOD.state == State.added)) { previewControl.Clear(); DocumentoSimplesOrderManager1.updateToolBarButtons(); return; } if (!FedoraHelper.HasObjDigWritePermission(selectedOD.pid)) { DocumentoSimplesOrderManager1.ActivateReadOnlyMode(); } else { DocumentoSimplesOrderManager1.DeactivateReadOnlyMode(); } if (FedoraHelper.HasObjDigReadPermission(selectedOD.pid)) { previewControl.Clear(true); previewControl.ShowPDF(selectedOD.pid); } else { previewControl.Clear(true); } if (disableSave) { DocumentoSimplesOrderManager1.DisableToolBar(); } } else if (sender == FicheirosOrderManager1) { var item = e.ItemToBeSelected; if (item != null && item.Tag != null) { previewControl.ShowAnexo(item.Tag as Anexo); } else { var items = FicheirosOrderManager1.getTrulySelectedItems(); if (items.Count != 1) { previewControl.Clear(true); return; } previewControl.ShowAnexo(items[0].Tag as Anexo); } FicheirosOrderManager1.updateToolBarButtons(); } } finally { this.Cursor = Cursors.Default; } }
public void ModelToView() { grpNiveisOrObjFed.Visible = true; if (mViewMode == ObjetoDigitalFedoraHelper.Contexto.objetosDigitais) { grpODTitleAndPub.Enabled = true; // configurar check que permite criar ou não um OD composto chkKeepODComposto.Visible = true; chkPublicar.Enabled = false; txtTitulo.Text = mTitulo; // configurar lista de ODs DocumentoSimplesOrderManager1.Visible = true; var itemsToBeAdded = new List <ListViewItem>(); if (mCurrentODComp != null) { chkPublicar.Checked = mCurrentODComp.publicado; mCurrentODComp.objSimples.ForEach(objSimples => itemsToBeAdded.Add(AddODSimplesToList(objSimples))); } else { mCurrentODSimples.ForEach(objSimples => itemsToBeAdded.Add(AddODSimplesToList(objSimples))); } // adicionar os subdocumentos sem objeto digital à lista docSimplesSemOD.ForEach(docSimples => { if ((int)docSimples.guiorder - 1 < itemsToBeAdded.Count) { itemsToBeAdded.Insert((int)docSimples.guiorder - 1, AddDocSimplesToList(docSimples)); } else { itemsToBeAdded.Add(AddDocSimplesToList(docSimples)); } }); if (itemsToBeAdded.Count > 0) { DocumentoSimplesOrderManager1.populateItems(itemsToBeAdded); DocumentoSimplesOrderManager1.selectFirst(); } if (itemsToBeAdded.Count(lvi => lvi.Tag.GetType() == typeof(ObjDigital) && ((ObjDigital)lvi.Tag).state == State.notFound) > 0) { disableSave = true; DocumentoSimplesOrderManager1.DisableToolBar(); grpODTitleAndPub.Enabled = false; chkKeepODComposto.Enabled = false; MessageBox.Show("A unidade informacional selecionada tem associado(s) objeto(s) " + System.Environment.NewLine + "digital(ais) o(s) qual(ais) não foi possivel obter do repositório. " + System.Environment.NewLine + "Por esse motivo não será possível efetuar qualquer alteração nesta área. " + System.Environment.NewLine + "Contacte o administrador de sistemas.", "Objeto(s) digital(ais) não encontrado(s)", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (itemsToBeAdded.Count > 0 && itemsToBeAdded[0].Tag.GetType() == typeof(SubDocumento)) { DocumentoSimplesOrderManager1.SetEditMixedMode(); } else { DocumentoSimplesOrderManager1.updateToolBarButtons(); } UpdateGrpODComposto(); } else if (mViewMode == ObjetoDigitalFedoraHelper.Contexto.imagens) { chkKeepODComposto.Visible = false; FicheirosOrderManager1.Visible = true; FicheirosOrderManager1.updateToolBarButtons(); grpNiveisOrObjFed.Visible = true; versionControl.Visible = true; chkPublicar.Enabled = true; txtTitulo.Enabled = true; txtTitulo.Text = mTitulo; FicheirosOrderManager1.Enabled = true; versionControl.Enabled = true; if (mCurrentODSimples.Count == 0) { grpODTitleAndPub.Enabled = false; versionControl.Reset(); versionControl.Enabled = false; return; } var odSimples = mCurrentODSimples[0]; txtTitulo.Text = odSimples.titulo; chkPublicar.Checked = odSimples.publicado; if (!FedoraHelper.HasObjDigReadPermission(odSimples.pid)) { FicheirosOrderManager1.Enabled = false; return; } var itemsToBeAdded = new List <ListViewItem>(); odSimples.fich_associados.ForEach(f => { var datastream = f as Anexo; var item = FicheirosOrderManager1.CreateItem(datastream.url, datastream); itemsToBeAdded.Add(item); }); versionControl.Load(odSimples); if (!FedoraHelper.HasObjDigWritePermission(odSimples.pid)) { FicheirosOrderManager1.ActivateReadOnlyMode(); } } else { grpNiveisOrObjFed.Visible = false; } }
private void RemoveNivel() { GISADataset.NivelRow nUpperRow = null; GISADataset.RelacaoHierarquicaRow rhRow = null; GISADataset.NivelRow nRow = null; nRow = this.nivelNavigator1.SelectedNivel; // Verificar se a relacção hierárquica ainda é a mesma apresentada na interface (se o // utilizador estiver a ver a lista que contem o nível a apagar e entretanto outro utilizador // o ter colocado noutro ponto da árvore, a relação hierárquica presente em memória deixa // de corresponder com aquela que é apresentada na interface quando esse nível é selecionado; // quando o nível é selecionado a informação no DataSet de trabalho é actualizado mas não // actualiza a interface) if (GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRow.ID, this.nivelNavigator1.ContextBreadCrumbsPathID)).Length > 0) { rhRow = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRow.ID, this.nivelNavigator1.ContextBreadCrumbsPathID))[0]); } else { MessageBox.Show("Esta operação não pode ser concluída pelo facto de a localização na estrutura " + System.Environment.NewLine + "do nível selecionado ter sido alterada por outro utilizador.", "Eliminar Nível", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } nUpperRow = (GISADataset.NivelRow)(GisaDataSetHelper.GetInstance().Nivel.Select(string.Format("ID={0}", this.nivelNavigator1.ContextBreadCrumbsPathID))[0]); var assocODs = FedoraHelper.GetAssociatedODsDetailsMsg(nRow.ID); if (assocODs.Length > 0) { FormDeletionReport form = new FormDeletionReport(); form.Text = "Eliminação de unidade de informação"; form.Interrogacao = "A unidade de informação selecionada tem objeto(s) digital(ais) associado(s). " + System.Environment.NewLine + "Se eliminar esta unidade de informação, os objeto(s) digital(ais) " + System.Environment.NewLine + " também serão eliminado(s)." + System.Environment.NewLine + "Pretende continuar?"; form.Detalhes = assocODs; if (form.ShowDialog() == DialogResult.Cancel) { return; } } else if (MessageBox.Show("Tem a certeza que deseja eliminar o nível selecionado?", "Eliminação de relação", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel) { return; } if (!FedoraHelper.CanDeleteODsAssociated2UI(nRow, out objetoDigital)) { return; } Trace.WriteLine("A apagar nível..."); if (TipoNivel.isNivelDocumental(nRow) && TipoNivel.isNivelOrganico(nUpperRow)) { // Verificar que existem várias relações hierárquicas deste // nível documental a entidades produtoras superiores. Nesse // caso deverá ser removida a relação, caso contrário, se não // existirem subníveis documentais, será eliminado o próprio // nível(documental) int numRHs = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Length; if (numRHs > 1) { if (MessageBox.Show( "Por favor tenha em atenção que são vários os produtores deste " + System.Environment.NewLine + "nível documental. O nível documental propriamente dito não " + System.Environment.NewLine + "será eliminado, apenas a sua relação ao nível orgânico " + System.Environment.NewLine + "superior o será.", "Eliminação de relação", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel) { return; } ((frmMain)TopLevelControl).EnterWaitMode(); CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]); PersistencyHelper.canDeleteRHRowPreConcArguments args = new PersistencyHelper.canDeleteRHRowPreConcArguments(); args.nRowID = nRow.ID; args.nUpperRowID = nUpperRow.ID; args.rhRowID = rhRow.ID; args.rhRowIDUpper = rhRow.IDUpper; PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.verifyIfCanDeleteRH, args); PersistencyHelper.cleanDeletedData(PersistencyHelper.determinaNuvem("RelacaoHierarquica")); if (args.deleteSuccessful) { if (successfulSave == PersistencyHelper.SaveResult.successful) { List <string> IDNiveis = new List <string>(); IDNiveis.Add(args.nRowID.ToString()); GISA.Search.Updater.updateNivelDocumental(IDNiveis); GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID); } this.nivelNavigator1.RemoveSelectedLVItem(); } else { MessageBox.Show(args.message, "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information); } ((frmMain)TopLevelControl).LeaveWaitMode(); } else if (numRHs == 1) { // Verificar que não existem subníveis documentais int numSubRHs = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("IDUpper={0}", nRow.ID)).Length; if (numSubRHs > 0) { MessageBox.Show("Só é possível eliminar os níveis que não tenham outros directamente associados", "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { if (MessageBox.Show( "Por favor tenha em atenção que este nível documental é produzido" + System.Environment.NewLine + "por apenas uma entidade. Ao remover esta relação será perdida " + System.Environment.NewLine + "não só a relação como o nível documental propriamente dito.", "Eliminação de relação", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel) { return; } ((frmMain)TopLevelControl).EnterWaitMode(); CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]); PersistencyHelper.canDeleteRHRowPreConcArguments argsPca = new PersistencyHelper.canDeleteRHRowPreConcArguments(); argsPca.nRowID = nRow.ID; argsPca.nUpperRowID = nUpperRow.ID; argsPca.rhRowID = 0; argsPca.rhRowIDUpper = 0; PersistencyHelper.DeleteIDXPreSaveArguments argsPsa = new PersistencyHelper.DeleteIDXPreSaveArguments(); argsPsa.ID = nRow.ID; // actualizar objecto digital caso exista var preTransactionAction = new PreTransactionAction(); var args = new PersistencyHelper.FedoraIngestPreTransactionArguments(); preTransactionAction.args = args; preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs) { bool ingestSuccess = true; string msg = null; var odsToIngest = FedoraHelper.DeleteObjDigital(nRow); odsToIngest.ForEach(od => ingestSuccess &= SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(od, out msg)); preTransactionArgs.cancelAction = !ingestSuccess; preTransactionArgs.message = msg; }; PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.verifyIfCanDeleteRH, argsPca, Nivel.DeleteNivelXInDataBase, argsPsa, preTransactionAction); if (argsPca.deleteSuccessful) { if (successfulSave == PersistencyHelper.SaveResult.successful) { List <string> IDNiveis = new List <string>(); IDNiveis.Add(nRow.ID.ToString()); GISA.Search.Updater.updateNivelDocumental(IDNiveis); GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID); } this.nivelNavigator1.RemoveSelectedLVItem(); } else { // se o nível a eliminar se tratar de uma série ou documento solto mas que // por motivos de conflito de concorrência não foi possível executar, // o refrescamento dos botões é feito tendo como o contexto o próprio // nível que se pretendeu eliminar para desta forma o estado dos mesmos // estar correcta (caso contrário o estado dos botões referir-se-ia a // não haver qualquer item selecionado MessageBox.Show(argsPca.message, "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information); UpdateToolBarButtons(this.nivelNavigator1.SelectedItems[0]); } PersistencyHelper.cleanDeletedData(new List <TableDepthOrdered.TableCloudType>(new TableDepthOrdered.TableCloudType[] { PersistencyHelper.determinaNuvem("RelacaoHierarquica"), PersistencyHelper.determinaNuvem("FRDBase"), PersistencyHelper.determinaNuvem("ObjetoDigital") })); ((frmMain)TopLevelControl).LeaveWaitMode(); } } else { Debug.Assert(false, "Should never happen. There must be a relation with an upper Nivel."); } } else { // Entre todos os outros tipos de nível proceder normalmente if ((nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado == TipoNivelRelacionado.D || nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].IDTipoNivelRelacionado == TipoNivelRelacionado.SD) && NiveisHelper.NivelFoiMovimentado(nRow.ID)) { if (MessageBox.Show( "Por favor tenha em atenção que este nível documental já foi " + System.Environment.NewLine + "requisitado/devolvido. Ao remover nível documental serão perdidos " + System.Environment.NewLine + "todos os seus registos referentes a requisições e devoluções.", "Eliminação de nível documental", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel) { return; } } ((frmMain)TopLevelControl).EnterWaitMode(); CurrentContext.RaiseRegisterModificationEvent(nRow.GetFRDBaseRows()[0]); PersistencyHelper.canDeleteRHRowPreConcArguments argsPca = new PersistencyHelper.canDeleteRHRowPreConcArguments(); argsPca.nRowID = nRow.ID; argsPca.nUpperRowID = nUpperRow.ID; argsPca.rhRowID = 0; argsPca.rhRowIDUpper = 0; PersistencyHelper.DeleteIDXPreSaveArguments argsPsa = new PersistencyHelper.DeleteIDXPreSaveArguments(); argsPsa.ID = nRow.ID; // actualizar objecto digital caso exista var preTransactionAction = new PreTransactionAction(); var args = new PersistencyHelper.FedoraIngestPreTransactionArguments(); preTransactionAction.args = args; preTransactionAction.preTransactionDelegate = delegate(PersistencyHelper.PreTransactionArguments preTransactionArgs) { bool ingestSuccess = true; string msg = null; var odsToIngest = FedoraHelper.DeleteObjDigital(nRow); odsToIngest.ForEach(od => ingestSuccess &= SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.Ingest(od, out msg)); preTransactionArgs.cancelAction = !ingestSuccess; preTransactionArgs.message = msg; }; PersistencyHelper.SaveResult successfulSave = PersistencyHelper.save(DelegatesHelper.verifyIfCanDeleteRH, argsPca, Nivel.DeleteNivelXInDataBase, argsPsa, preTransactionAction); PersistencyHelper.cleanDeletedData(new List <TableDepthOrdered.TableCloudType>(new TableDepthOrdered.TableCloudType[] { PersistencyHelper.determinaNuvem("RelacaoHierarquica"), PersistencyHelper.determinaNuvem("FRDBase") })); if (argsPca.deleteSuccessful) { if (successfulSave == PersistencyHelper.SaveResult.successful) { List <string> IDNiveis = new List <string>(); IDNiveis.Add(argsPsa.ID.ToString()); GISA.Search.Updater.updateNivelDocumental(IDNiveis); if (nRow.RowState == DataRowState.Detached) { GISA.Search.Updater.updateNivelDocumentalComProdutores(argsPsa.ID); } else { GISA.Search.Updater.updateNivelDocumentalComProdutores(nRow.ID); } this.nivelNavigator1.RemoveSelectedLVItem(); } } else { MessageBox.Show(argsPca.message, "Eliminação de relação", MessageBoxButtons.OK, MessageBoxIcon.Information); } ((frmMain)TopLevelControl).LeaveWaitMode(); } UpdateToolBarButtons(); }
public void ViewToModel(Contexto viewMode, bool disableSave) { var tnrID = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().First().IDTipoNivelRelacionado; if (viewMode == ObjetoDigitalFedoraHelper.Contexto.imagens) { // neste modo, o contexto é sempre um subdocumento e como tal tem que se ter em consideração informação sobre o subdocumento e o seu documento/processo Trace.Assert(tnrID == (long)TipoNivelRelacionado.SD); var repoName = SessionHelper.AppConfiguration.GetCurrentAppconfiguration().FedoraHelperSingleton.GetRepositoryName(); var imgVolRow = FedoraHelper.GetRepositoryImagemVolumeRow(); Debug.Assert(currentODSimples.Count <= 1); // no contexto de um subdocumento só pode haver 1 OD no máximo if (currentODSimples.Count == 1) { var odSimples = currentODSimples[0]; if (odSimples.state == State.added) { var frdRow = currentNivel.GetFRDBaseRows().Single(); odSimples.gisa_id = FedoraHelper.gisaPrefix + currentNivel.ID; var idxTip = frdRow.GetIndexFRDCARows().SingleOrDefault(idx => idx["Selector"] != DBNull.Value && idx.Selector == -1); if (idxTip != null) { odSimples.tipologia = idxTip.ControloAutRow.GetControloAutDicionarioRows().Single(cad => cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).DicionarioRow.Termo; } var assuntos = frdRow.GetIndexFRDCARows().Where(idx => idx.ControloAutRow.IDTipoNoticiaAut < 4).SelectMany(idx => idx.ControloAutRow.GetControloAutDicionarioRows()).Where(cad => cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).Select(cad => cad.DicionarioRow.Termo); if (assuntos.Count() > 0) { odSimples.assuntos = assuntos.ToList(); } var imgRow = GisaDataSetHelper.GetInstance().SFRDImagem.NewSFRDImagemRow(); imgRow.Identificador = ""; imgRow.FRDBaseRow = frdRow; imgRow.Tipo = FedoraHelper.typeFedora; imgRow.Versao = new byte[] { }; imgRow.isDeleted = 0; imgRow.GUIOrder = long.MaxValue; imgRow.Descricao = ""; imgRow.SFRDImagemVolumeRow = imgVolRow; GisaDataSetHelper.GetInstance().SFRDImagem.AddSFRDImagemRow(imgRow); if (currentODComp != null) { Debug.Assert(currentObjetoDigitalRowComp != null); var nUpperRow = currentNivel.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica().Single().NivelRowByNivelRelacaoHierarquicaUpper; odSimples.parentDocumentTitle = nUpperRow.GetNivelDesignadoRows().Single().Designacao; var orderNr = currentNivel.GetNivelDesignadoRows().Single().GetNivelDocumentoSimplesRows().Single().GUIOrder; odSimples.guiorder = orderNr; currentObjetoDigitalRow = GisaDataSetHelper.GetInstance().ObjetoDigital.AddObjetoDigitalRow(odSimples.pid, odSimples.titulo, odSimples.publicado, orderNr, new byte[] { }, 0); GisaDataSetHelper.GetInstance().ObjetoDigitalRelacaoHierarquica.AddObjetoDigitalRelacaoHierarquicaRow(currentObjetoDigitalRow, currentObjetoDigitalRowComp, new byte[] { }, 0); currentODComp.objSimples.Insert((int)odSimples.guiorder - 1, odSimples); } else { var ndsRow = currentNivel.GetNivelDesignadoRows().Single().GetNivelDocumentoSimplesRows().Single(); currentObjetoDigitalRow = GisaDataSetHelper.GetInstance().ObjetoDigital.AddObjetoDigitalRow(odSimples.pid, odSimples.titulo, odSimples.publicado, ndsRow.GUIOrder, new byte[] { }, 0); } GisaDataSetHelper.GetInstance().SFRDImagemObjetoDigital.AddSFRDImagemObjetoDigitalRow(imgRow.IDFRDBase, imgRow.idx, currentObjetoDigitalRow, new byte[] { }, 0); //PermissoesHelper.AddNewObjDigGrantPermissions(currentObjetoDigitalRow, currentNivel); newObjects.Add(currentObjetoDigitalRow, odSimples); } else if (odSimples.state == State.modified) { currentObjetoDigitalRow.Titulo = odSimples.titulo; currentObjetoDigitalRow.Publicado = odSimples.publicado; if (currentODComp != null) { currentObjetoDigitalRowComp.Publicado = currentODComp.publicado; } } else if (odSimples.state == State.deleted) { FedoraHelper.DeleteObjDigitalRows(currentObjetoDigitalRow); if (currentODComp != null && currentODComp.state == State.deleted) { FedoraHelper.DeleteObjDigitalRows(currentObjetoDigitalRowComp); } } } } else if (mContexto == ObjetoDigitalFedoraHelper.Contexto.objetosDigitais) { if (disableSave) { return; } if (currentODComp != null) // caso onde existe um OD composto associado à UI { var odRowComp = default(GISADataset.ObjetoDigitalRow); switch (currentODComp.state) { case State.added: currentODComp.gisa_id = FedoraHelper.gisaPrefix + currentNivel.ID; var frdRow = currentNivel.GetFRDBaseRows().Single(); var imgVolRow = FedoraHelper.GetRepositoryImagemVolumeRow(); var imgRow = GisaDataSetHelper.GetInstance().SFRDImagem.NewSFRDImagemRow(); imgRow.Identificador = ""; imgRow.FRDBaseRow = frdRow; imgRow.Tipo = FedoraHelper.typeFedora; imgRow.Versao = new byte[] { }; imgRow.isDeleted = 0; imgRow.GUIOrder = long.MaxValue; imgRow.Descricao = ""; imgRow.SFRDImagemVolumeRow = imgVolRow; GisaDataSetHelper.GetInstance().SFRDImagem.AddSFRDImagemRow(imgRow); currentObjetoDigitalRowComp = GisaDataSetHelper.GetInstance().ObjetoDigital.AddObjetoDigitalRow(currentODComp.pid, currentODComp.titulo, currentODComp.publicado, 1, new byte[] { }, 0); GisaDataSetHelper.GetInstance().SFRDImagemObjetoDigital.AddSFRDImagemObjetoDigitalRow(imgRow.IDFRDBase, imgRow.idx, currentObjetoDigitalRowComp, new byte[] { }, 0); //PermissoesHelper.AddNewObjDigGrantPermissions(currentObjetoDigitalRowComp, currentNivel); newObjects.Add(currentObjetoDigitalRowComp, currentODComp); var idxTip = frdRow.GetIndexFRDCARows().SingleOrDefault(idx => idx["Selector"] != DBNull.Value && idx.Selector == -1); if (idxTip != null) { currentODComp.tipologia = idxTip.ControloAutRow.GetControloAutDicionarioRows().Single(cad => cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).DicionarioRow.Termo; } var assuntos = frdRow.GetIndexFRDCARows().Where(idx => idx.ControloAutRow.IDTipoNoticiaAut < 4).SelectMany(idx => idx.ControloAutRow.GetControloAutDicionarioRows()).Where(cad => cad.IDTipoControloAutForma == (long)TipoControloAutForma.FormaAutorizada).Select(cad => cad.DicionarioRow.Termo); if (assuntos.Count() > 0) { currentODComp.assuntos = assuntos.ToList(); } break; case State.modified: currentObjetoDigitalRowComp.Titulo = currentODComp.titulo; currentObjetoDigitalRowComp.Publicado = currentODComp.publicado; break; case State.deleted: FedoraHelper.DeleteObjDigitalRows(currentObjetoDigitalRowComp); break; } odRowComp = currentObjetoDigitalRowComp; ViewToModelObjsSimples(currentODComp.objSimples, currentODComp, odRowComp); } else // caso onde só existem ODs simples soltos associados à UI { ViewToModelObjsSimples(currentODSimples); } } // atribuir permissões aos objectos digitais novos var odRows = GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().Where(r => r.RowState == DataRowState.Added).ToList(); PermissoesHelper.AddNewObjDigGrantPermissions(odRows, currentNivel); // atribuir permissão de leitura ao grupo publicados consoante o valor da flag publicado definida nas datarows GISADataset.ObjetoDigitalRow que foram adicionadas ou editadas GisaDataSetHelper.GetInstance().ObjetoDigital.Cast <GISADataset.ObjetoDigitalRow>().Where(r => r.RowState == DataRowState.Added || r.RowState == DataRowState.Modified).ToList() .ForEach(odRow => PermissoesHelper.ChangeObjDigPermissionPublicados(odRow)); // actualizar ordem dos subdocumentos sem objeto digital docSimplesSemOD.ForEach(docSimples => docSimples.nRow.GetNivelDesignadoRows().Single().GetNivelDocumentoSimplesRows().Single().GUIOrder = docSimples.guiorder); }