/** * Método de adição de nodos filhos ao artefato. * @param Nodo a ser adicionado como filho. * @return Retorna status da operção. */ public bool AddChildNode(gBConcrete child_node) { if (this != child_node) { //Adiciona nodo na lista de nodos filhos this.child_nodes.Add(child_node); //Notifica gerenciador que estrutura de nodos fora alterada gBManager.Instance.NodeHierarchyChanged(); child_node.parent_node = this; child_node.OnParentNodeSet(this); this.OnChildNodeAdd(child_node); return true; } else { return false; } }
/** * Método de configuração do nodo pai do artefato. * @param Nodo a ser definido como pai do artefato. * @return Retorna status da operação. Um nodo não pode ser pai de si mesmo. */ public bool SetParentNode(gBConcrete parent_node) { if (this != parent_node) { //Remove nodo de lista de pai atual, se este não for nulo if(this.parent_node != null) { if(!this.parent_node.RemoveChildNode(this)) { return false; } } //Adiciona nodo em lista de nodo pai, se este não for nulo if (parent_node != null) { if (!parent_node.AddChildNode(this)) { return false; } } return true; } return false; }
/** * Método virtual chamado automaticamente no sucesso do ato de definição de um nodo pai. */ public virtual void OnParentNodeSet(gBConcrete parent_node) { }
/** * Método de remoção de nodo filho do artefato. * @param Nodo a ser removido da lista de nodos filhos. * @return Retorna o status da operação. */ public bool RemoveChildNode(gBConcrete child_node) { if (this.child_nodes.Remove(child_node)) { //Notifica gerenciador que estrutura de nodos fora alterada gBManager.Instance.NodeHierarchyChanged(); child_node.parent_node = null; child_node.OnParentNodeSet(null); this.OnChildNodeRemove(child_node); return true; } return false; }
/** * Método virtual chamado automaticamente no sucesso do ato de adição de um nodo filho. */ public virtual void OnChildNodeAdd(gBConcrete child_node) { }
/** * Método virtual chamado automaticamente no sucesso do ato de remoção de um nodo filho. */ public virtual void OnChildNodeRemove(gBConcrete child_node) { }
/** * Construtor da classe. * @param Artefato concreto ao qual pertence o sistema de LOD. */ public gBLODSystem(gBConcrete concrete_artifact) { //Guarda referência de artefato concreto dono do sistema de LOD this.concrete_artifact = concrete_artifact; }
/** * Método de validação de regra de LOD. * @param artifact Artefato alvo da validação da regra. * @return Retorna status de validação da regra. */ public abstract bool Validate(gBConcrete concrete_artifact);
/** * Método de ativação manual de regra de LOD. * @param concrete_artifact Artefato alvo da validação da regra. */ public abstract void Execute(gBConcrete concrete_artifact);
/** * Define um artefato concreto como nodo raiz. * @param Artefato a ser definido como nodo raiz. */ public void SetRootNode(gBConcrete node) { //Adiciona nodo na lista de nodos raiz gBManager.Instance.root_node = node; if (node != null) { node.SetParentNode(null); } }
/** * Método recursivo de busca e adição de nodos à lista fornecida. * @param nodes_list Lista de nodos. * @param ignore_ids ID's de nodos a serem ignorados. */ private void FindNodesToUpdate(gBConcrete node, ref List<gBConcrete> nodes, ref HashSet<Guid> ignore) { //Vasculha os nodos filhos de artefato List<gBConcrete> child_nodes = node.GetChildNodes(); foreach (gBConcrete child_node in child_nodes) { gBManager.Instance.FindNodesToUpdate(child_node, ref nodes, ref ignore); } //Busca nodo na lista de ids a serem ignorados foreach(Guid ignore_id in ignore) { if(ignore_id == node.GetID()) { ignore.Remove(ignore_id); return; } } //Se não for ignorado, adiciona na lista nodes.Add(node); }