public override void UpdateToolBarButtons(ListViewItem item) { base.UpdateToolBarButtons(item); //Obter selecção actual GISATreeNode selectedNode = null; GISADataset.NivelRow nRow = null; GISADataset.NivelRow nUpperRow = null; GISADataset.RelacaoHierarquicaRow rhRow = null; GISADataset.TipoNivelRelacionadoRow tnrRow = null; // Estas variaveis identificam o contexto definido pelo breadcrumbspath da vista documental // (só são usadas quando a vista actual é a documental) GISADataset.NivelRow nRowBC = null; GISADataset.NivelRow nUpperRowBC = null; GISADataset.RelacaoHierarquicaRow rhRowBC = null; GISADataset.TipoNivelRelacionadoRow tnrRowBC = null; if (this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Estrutural) { //vista estrutural if (this.nivelNavigator1.EPFilterMode) // modo filtro { if (item != null && item.ListView != null && !(((GISADataset.NivelRow)item.Tag).RowState == DataRowState.Detached)) { //contexto da listview nRow = (GISADataset.NivelRow)item.Tag; } } else //modo árvore { //vista estrutural selectedNode = (GISATreeNode)this.nivelNavigator1.SelectedNode; if (selectedNode != null && !(selectedNode.NivelRow.RowState == DataRowState.Detached)) { nRow = selectedNode.NivelRow; nUpperRow = selectedNode.NivelUpperRow; } } } else { //vista documental if (item != null && item.ListView != null && !(((GISADataset.NivelRow)item.Tag).RowState == DataRowState.Detached)) { //contexto da listview nRow = (GISADataset.NivelRow)item.Tag; nUpperRow = nRow.GetRelacaoHierarquicaRowsByNivelRelacaoHierarquica()[0].NivelRowByNivelRelacaoHierarquicaUpper; } //contexto do breadcrumbspath nRowBC = GisaDataSetHelper.GetInstance().Nivel.Cast <GISADataset.NivelRow>().SingleOrDefault(r => r.RowState != DataRowState.Deleted && r.ID == this.nivelNavigator1.ContextBreadCrumbsPathID); nUpperRowBC = GisaDataSetHelper.GetInstance().Nivel.Cast <GISADataset.NivelRow>().SingleOrDefault(r => r.RowState != DataRowState.Deleted && r.ID == this.nivelNavigator1.ContextBreadCrumbsPathIDUpper); } if (nRow != null && !(nRow.RowState == DataRowState.Detached) && nUpperRow == null) { tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(null); } else if (nUpperRow != null && !(nUpperRow.RowState == DataRowState.Detached) && nRow != null && !(nRow.RowState == DataRowState.Detached)) { if (this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Estrutural) { rhRow = selectedNode.RelacaoHierarquicaRow; // excluimos desta forma as relacoes hirarquicas entretanto eliminadas (as que seriam NULL mas cujo nó respectivo teria um NivelUpper) if (selectedNode.NivelUpperRow != null && rhRow != null) { tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRow); } } else { if (item != null && item.ListView != null) { DataRow[] rhRows = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRow.ID.ToString(), nUpperRow.ID.ToString())); // A relação pode ter desaparecido por algum motivo (ie, concorrencia). if (rhRows.Length > 0) { rhRow = (GISADataset.RelacaoHierarquicaRow)(rhRows[0]); tnrRow = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRow); } } if (nRowBC != null && nUpperRowBC != null) { DataRow[] rhRowBCs = GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRowBC.ID.ToString(), nUpperRowBC.ID.ToString())); // A relação pode ter desaparecido por algum motivo (ie, concorrencia). if (rhRowBCs.Length > 0) { rhRowBC = (GISADataset.RelacaoHierarquicaRow)(rhRowBCs[0]); tnrRowBC = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRowBC); } } } } if (nRow == null && this.nivelNavigator1.PanelToggleState == NivelNavigator.ToggleState.Documental && nRowBC != null && nUpperRowBC != null) { GISADataset.RelacaoHierarquicaRow[] bcRHRow = (GISADataset.RelacaoHierarquicaRow[])(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRowBC.ID.ToString(), nUpperRowBC.ID.ToString()))); if (bcRHRow.Length > 0) { if (bcRHRow[0].IDTipoNivelRelacionado < TipoNivelRelacionado.SD) { ToolBarButtonCreateAny.Enabled = AllowCreate && PermissoesHelper.AllowCreate; } else { ToolBarButtonCreateAny.Enabled = false; } rhRowBC = (GISADataset.RelacaoHierarquicaRow)(GisaDataSetHelper.GetInstance().RelacaoHierarquica.Select(string.Format("ID={0} AND IDUpper={1}", nRowBC.ID.ToString(), nUpperRowBC.ID.ToString()))[0]); tnrRowBC = TipoNivelRelacionado.GetTipoNivelRelacionadoFromRelacaoHierarquica(rhRowBC); ConfigureContextMenu(nRowBC, nUpperRowBC, tnrRowBC, tnrRowBC); ToolBarButtonEdit.Enabled = false; ToolBarButtonRemove.Enabled = false; } else { ToolBarButtonCreateAny.Enabled = false; ToolBarButtonPaste.Enabled = false; } } else if (TipoNivel.isNivelDocumental(nRow)) { ToolBarButtonCreateAny.Enabled = AllowCreate && PermissoesHelper.AllowCreate; ConfigureContextMenu(nRowBC, nUpperRowBC, tnrRow, tnrRowBC); if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.D) { ToolBarButtonEdit.Enabled = AllowEdit && PermissoesHelper.AllowEdit; ToolBarButtonRemove.Enabled = NiveisHelper.isRemovable(nRow, nUpperRow, false) && AllowDelete && PermissoesHelper.AllowDelete; } else if (rhRow.IDTipoNivelRelacionado == TipoNivelRelacionado.SD) { ToolBarButtonEdit.Enabled = AllowEdit && PermissoesHelper.AllowEdit; ToolBarButtonRemove.Enabled = NiveisHelper.isRemovable(nRow, nUpperRow, false) && AllowDelete && PermissoesHelper.AllowDelete && PermissoesHelper.ObjDigAllowWrite; } else { ToolBarButtonEdit.Enabled = false; ToolBarButtonRemove.Enabled = false; } } else { ToolBarButtonCreateAny.Enabled = false; ToolBarButtonEdit.Enabled = false; ToolBarButtonRemove.Enabled = false; } }
public string Executar(string Texto, string Chave, TipoNivel Nivel, TipoAcao Acao, TipoCripto Cripto) { int _Nivel = 0; string TextoPronto = ""; string VerOK = Verifica(Chave); if (VerOK.Trim() != "") { throw new Erro(VerOK.Trim()); } ArrumaChave(Chave); switch (Nivel) { case TipoNivel.Baixo: _Nivel = 1; break; case TipoNivel.MédioBaixo: _Nivel = 2; break; case TipoNivel.Médio: _Nivel = 3; break; case TipoNivel.MédioAlto: _Nivel = 4; break; case TipoNivel.Alto: _Nivel = 5; break; } if (Acao == TipoAcao.Encriptar) { TextoPronto = Texto.Trim(); for (int intFor = 1; intFor <= _Nivel; intFor++) { TextoPronto = Encriptar(TextoPronto); } if (Cripto == TipoCripto.Símbolos) { TextoPronto = PassaParaASCII(TextoPronto); } } else if (Acao == TipoAcao.Decriptar) { if (Cripto == TipoCripto.Símbolos) { TextoPronto = PassaParaNumeros(Texto.Trim()); } else { TextoPronto = Texto.Trim(); } for (int intFor = _Nivel; intFor >= 1; intFor--) { TextoPronto = Decriptar(TextoPronto); } } return TextoPronto; }
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(); }