Entidade COMPONENTES

ADS_COMPS.COMPONENTES

Descrição

Um componente é elemento chave para o detalhamentos dos sistemas feito pelo ADS.
Um componente é qualquer elemento que faz parte do sistema. Cada componente deve ser devidamente classificado, pode ser dividido em sub-componentes, referenciar-se a outros componentes, etc.

Existem componente extremamente complexos (ex: um sistema é representado por um componente) da mesma forma que existem componentes extremamente simples (ex: o parâmetro de uma função).

Alguns exemplos de componentes são:

Os componentes estabelecem necessidades e funcionalidades de forma descritiva e permite contextualizar estas necessidades vinculando-as umas com as outras.

Durante o processo de desenvolvimento, os componentes são incialmente criados com uma conotação conceitual e vão sendo sistematicamente especializados até poderem ser implementados fisicamente em alguma linguagem de programação.

Alguns componentes são criados apenas para criar definições gerais, tais como tipos de dados, eventos, etc.. Nestes componentes pode-se definir como eles deverão ser implementados.

Atributos

AtributoDomínioRegrasDescrição
IDID(18)Rqd PK ID:
Número de identificação do componente.
TIPO_COMPONENTE_IDID(18)Rqd FK Tipo de componente
Referência para TIPOS_COMPONENTES
NOMEUPPER(80)Rqd UK AK Nome:
Nome dado para identificar o componente.
NOME_CURTOUPPER(80)Nome curto:
Nome curto do componente. Normalmente é uma abreviação ou alias de seu nome completo.
NOME_GLOBALUPPER(300)UK Nome global:
Indica o nome global do componente. Se o componente for raiz (não tem pai), então o nome global será igual ao nome do componente. Se o componente não for raiz (tem pai), então o nome global é formado pelo nome global do componente pai + "." + nome do componente. Ex: ADS, ADS.COMPONENTES, ADS.COMPONENTES.NOME_GLOBAL
TITULOTEXT(300)Título:
Título do componente para fins conceituais.
DESCRICAOTEXT_LONGDescrição:
Texto livre para descrição do componente. Esta descrição inclui o que o componente representa, quais as funcionalidades que ele tem, o que ele representa e quando necessário dá um breve resumo de como ele funciona.
Ver ADS_COMPS.TIPOS_COMPONENTES
DESCRICAO_CURTATEXT_LONGDescrição curta:
Texto que descreve o componente resumido em uma única linha. Usado para documentação do sistema em locais onde não é necessário entrar em detalhes (ex: "hint" de uma interface). Dependendo do tipo de componente, a descrição curta é o seu objetivo (porque o sistema precisa deste componente?).
VALORTEXT(300)Valor:
Valor inicial do componente quando aplicável.
OPCIONALFLAG(1)Opcional:
Indica quando o preenchimento do componente é considerado opcional ou não. Em alguns casos, também pode indicar quando um componente é público.

Valor padrão = S
PAI_COMP_IDID(18)UK FK Pai
Referência para COMPONENTES
REF_COMP_IDID(18)FK Referencia
Referência para COMPONENTES
DOMINIO_COMP_IDID(18)FK Domínio:
Quando preenchido, indica que o componente atual herda todas as funcionalidades de um outro componente. Muitas vezes está associado ao tipo de dado que o componente retorna ou representa.

Referência para COMPONENTES
SEQUENCIAINTEGERSequencia:
Número de sequencia deste componente. Normalmente define a ordem dos componentes com relação ao seu escopo.
TAMANHOINTEGERTamanho:
Determina o tamanho do componente.
LARGURAINTEGERLargura:
Estabelece a largura do componente onde isso faz algum sentido. Ex: Para atributos, a largura indica o número de caracteres utilizados pelos í­tens de interface relacionados com o mesmo.
ALTURAINTEGERAltura:
Estabelece a altura do componente onde isso faz sentido. Ex: Para atributos, a altura indica o número de linhas utilizados pelos í­tens de interface relacionados com o mesmo.
NOTASTEXT_LONGNotas
SITUACAOOPCAO(1)Situação:
Informa qual a situação do componente com relação ao seu ciclo de vida. Este atributo é calculado automaticamente conforme as diversas datas de controles existentes.
O ciclo normal de um componente é: Candidato > Pendente > Implementado > Aprovado.

Valores permitidos:
  • A - Aprovado - O componente foi aprovado. Isso significa que ele foi devidamente conceituado, implementado, testado e aprovado pelo cliente final.
    Componentes aprovados não podem ser alterados a não ser através de um processo de revisão.
  • P - Pendente - O componente ainda não foi aprovado.
VERSAOINTEGERVersão:
Número de versão do componente. Informa quantos ciclos de aprovação/revisão já ocorreram no mesmo.

Valor padrão = 1
DATA_APROVACAODATEData de aprovação:
Data em que este componente foi aprovado.
DATA_INCLUSAODATEData da inclusão:
Data em que o componente foi criado.

Valor padrão = [SYSDATE]
DATA_MODIFICACAODATEData da modificação:
Data em que o registro foi modificado da última vez. Pode ser a data da inclusão.

Valor padrão = [SYSDATE]
USUARIO_INCLUSAO_IDID(18)FK Usuário da inclusão:
Indica o usuário que inseriu o componente no sistema.

Valor padrão = [USER_ID]
Referência para USUARIOS
USUARIO_MODIFICACAO_IDID(18)FK Usuário da modificação:
Indica o usuário que fez a última alteração no componente (pode ser a própria inclusão).

Valor padrão = [USER_ID]
Referência para USUARIOS
POLITICA_ACESSOOPCAO(1)Política de acesso:
Determina como deve ser o controle de acesso deste componente.

Valores permitidos:
  • R - Restrito - A operação é restrita a usuários que tenham acesso específico a mesma. Para os outros usuários, a operação é sequer apresentada.
  • E - Exige credencial - A operação exige a credencial de um usuário com este direito de acesso no momento da sua execução. Neste caso, caso o usuário da sessão corrente não possuir esta credencial, o sistema irá pedir as credenciais de um usuário que as tenha. Ao contrário da política de acesso "Restrito", a operação é visível para qualquer usuário que tenha acesso a uma operação de entrada do bloco, mas caso ele não tenha o direito de acesso específico, o sistema irá pedir as credencias de alguém que tenha este direito. Ver Política de acesso "Exige credencial"
  • U - Usuário - Todos os usuários logados tem acesso a este elemento.
  • P - Público - Qualquer um tem acesso a este elemento (mesmo usuários não logados)
TEXT_04TEXTTexto livre 4:
Atributo genérico de texto 4.
RAIZ_IDID(18)FK Raiz:
Componente raiz ao qual o componente faz parte. Este atributo contribui para diversas regras que são definidas através do sistema do componente. Quando o componente tem pai, o seu componente raiz será sempre igual ao do pai, caso contrário, o seu sistema será o próprio componente.

Referência para COMPONENTES
DATA_MODIFICACAO_ESTRUTURADATE_TIMEUltima alteração estrutura:
Data em que este componente ou algum de seus filhos foi alterada. Esta data é automaticamente atualizada sempre que este componentes ou algum dos componentes filhos é alterado.

Valor padrão = [SYSDATE]
USUARIO_MODIFICACAO_ESTRUTURA_IDID(18)FK Usuário que modificou estrutura:
Indica o ultimo usuário que modificou algum componente da estrutura deste componente.

Valor padrão = [USER_ID]
Referência para USUARIOS
INDEXARFLAG(1)Rqd AK Indexar:
Indica se este componente deverá ser incluído no mecanismo de indexação para acelerar as pesquisas de documentação.
Este valor é automaticamente atualizado sempre que o componente que os valores do título ou descrição do componente forem alterados e ele for de um tipo de componente que deve ser indexado.


Valor padrão = N
SUBSTITUIDO_POR_IDID(18)FK Substituído por:
Quando informado indica que este componente foi substituído por outro e está obsoleto. - ERROR: Não foi possível encontrar um registro em COMPONENTES onde NOME_GLOBAL = !.

Referência para COMPONENTES

Regras

Criar FK para atributo

(Depois de inserir, Depois de alterar)
Quando o atributo apontar para uma entidade, criar uma FK e alterar o domínio para ID.

Calcular situação

(Antes de inserir, Antes de alterar)
Ver documentação do atributo

Zerar os dominios dos filhos

(Antes de excluir)
Limpa em cascata os domínios de todos os filhos deste componente. Este procedimento é necessário para eliminar inter-dependências entre os componentes antes de fazer uma exclusão em cascata.

Garantir um nome para o componente

(Antes de alterar, Antes de inserir)
Caso o nome não tenha sido informado, calcula um automaticamente da seguinte forma:
1) Se for um REQUISITO, será REQ-9999 onde 9999 é o número de requisitos já cadastrados + 1 (max da sequencia)
2) Nome do tipo de componente + ID.

Calcular nome global

(Antes de inserir, Antes de alterar)
Se o componente não tem pai, então o seu nome global é igual ao nome. Se o componente tem pai, então o seu nome global é igual ao nome global do pai, concatenado com um ponto (".") e com o seu próprio nome. Se o nome global do pai for ".", então o nome global do filho será apenas "." + o seu próprio nome.

Calcular componente raiz

(Antes de inserir, Antes de alterar)
Se componente tem um pai informado, terá a mesma raiz que seu pai, caso contrário, a raiz será o próprio componente.

Aprovar componentes filhos

(Depois de alterar)
Quando um componente é aprovado, todos os filhos são aprovados em cascata.

Calcular sequencia das usages

(Antes de inserir, Antes de alterar)
Quando o componente for uma entity-usage, então o número de sequencia deverá ser o número de entidades que estão a "esquerda". A entidade base será sempre "0". As primeiras lookups serão 1, as lookups das lookups serão 2 e assim sucessivamente.

Atualizar usuário e data das modificações

(Antes de alterar)
Considera modificado apenas se um dos atributos lógicos foi alterado. Para atributo lógico considera-se apenas aqueles que dão valor ao componente. Não considera:

Note que se um nome for alterado, os nomes globais dos filhos serão alterados em cascata mas apenas o registro que originou a alteração terá seus dados de auditoria alterados.

Atualizar o nome global e raiz dos filhos

(Depois de alterar)
Verifica e corrige se necessário o nome global ou a raiz de todos os componentes que são filhos deste componente. A atualização somente é executada caso o componente altere se nome global ou a sua raiz.

Atualiza dependências indiretas

(Depois de inserir, Depois de excluir)
Na exclusão ou inclusão de uma dependência do sistema, recalcula as suas dependências indiretas.
Se mudar alguma coisa, atualiza as dependências de todos os sistemas que são dependentes deste sistema.

Atualizar os dados do componente pai

(Depois de excluir, Depois de inserir, Depois de alterar)
Sempre que incluir, alterar ou excluir um componente, deve alterar a data e usuário de modificação da estrutura do componente pai.

Substituir referencias de documentação feitas com nome global pelo respectivo ID

(Antes de inserir, Antes de alterar)
Sempre que a descrição, notas ou a descrição curta forem alteradas, substituir referencias realizadas por macros do tipo
[t:nome-global]
pelos respectivos IDs:
[t:#id]

Atualizar referencias de documentação

(Depois de inserir, Depois de alterar)
Atualizar as dependências deste elemento, formando registros que vinculam este elemento ao elemento referenciado e removendo aqueles que não são mais referenciados.

Atualizar informações da estrurura

(Antes de inserir, Antes de alterar)
Sempre que o registro for alterado, registrar esta alteração no próprio registro e em todos os registros-pai até alcançar a raiz.

Calcular identação dos requisitos

(Antes de inserir, Antes de alterar)
Calcula a altura do requisito considerando 1 caso ele esteja no escopo no sistema ou 1 + altura do requisito do seu escopo.
Caso modificada, atualiza dos respectivos sub-requisitos.

Propagar alterações nos requisitos

(Depois de inserir, Depois de alterar)
           // Reordenar irmãos
           EntComponentes irmaos = new EntComponentes(ctx);
           irmaos.filterBy()
                   .in(irmaos.getTipoComponenteId(), new Integer[] {5, 7})
                   .equal(irmaos.getRefCompId(), valueOfRefCompId())
                   .equal(irmaos.getPaiCompId(), valueOfPaiCompId())
                   .notEqual(irmaos.getId(), valueOfId())
                   .ge(irmaos.getSequencia(), valueOfSequencia())
                   ;
           irmaos.orderBy().asc(irmaos.getSequencia());
           int seq = valueOfSequencia();
           while (irmaos.next()) {
               seq++;
               if (irmaos.valueOfSequencia() != seq) {
                   irmaos.setSequencia(seq);
                   irmaos.upd();
               }
           }
           
           // Propagar sub-escopos
           if (getId().isNotNull() && isAlturaModified()) {
               EntComponentes child = findAllComponentesRefComp();
               while (child.next()) {
                   child.upd();
               }
           }

Atualizar indexação

(Antes de inserir, Antes de alterar)
Verifica se o registro deve ou não ser indexado.

Só pode incluir/excluir filhos de componentes pendentes

(Antes de inserir, Antes de excluir)
Não é permitido incluir elementos abaixo de registros aprovados. O mesmo ocorre para a exclusão de componentes.

Só pode alterar componentes pendentes

(Antes de alterar, Antes de excluir)
Apenas o processo especial "Revisar" pode ser usado quando um componente estiver aprovado.

Set property value(propriedade, valor, tipo, per_user)

Define um valor para uma propriedade.
A propriedade será considerada de design.

Atualizar auditoria da estrutura em cascata subindo até a raiz

Atualizar os dados de auditoria de estrutura (usuário, data e hora) do registro e de seus elementos-pai até a raiz.

Calcular dependências(mudou)

Rotina que revisa as dependências do sistema.
Se o componente não for um sistema, encerra sem fazer nada.

Consulta quais são as dependencias diretas do sistema que já estão cadastradas e completa com as dependencias indiretas.
Verifica se existem dependencias diretas que precisam ser excluídas.
Verifica se existem dependencias que precisam ser incluídas.
Se mudou alguma coisa, atualiza todos sistemas que são dependentes deste sistema.

Clonar

Este procedimento duplica o componente atual junto com seus filhos.

As relações entre os componentes que pertencem à árvore clonada (através de domínios e referências) são devidamente traduzidas para os respectivos clones.

Toda nova estrutura entra em situação pendente.

Criar PK

Se o componente for uma entidade, cria a PK automaticamente.

Criar UK

Quando o componente é uma Entidade, cria um atributo e uma regra UK com o nome singular ele.

Del property(propriedade)

Remove uma propriedade do componente.

Excluir FKs para entidades excluídas

(Antes de excluir)
Quando excluir uma entidade, todas as FKs relacionadas a ela devem ser excluídas.

Find by pai nome(pai_id, nome)

Apenas para compatibilidade de versões anteriores.

Get Childs(force)

Retorna uma lista com todos os elementos filhos deste componente.

Get childs of type(tipo)

Retorna os filhos de um componente filtrando pelo tipo.

Get component property(propriedade)

Retorna uma propriedade do componente desconsiderando qualquer tipo de herança.
Caso não encontrado, retorna null.

Get propriedade do componente(id, property)

Retorna o valor de uma propriedade do componente
sem considerar a possibilidade de herança.

Get propriedade do domínio(property)

Retorna o valor de uma propriedade do componente
considerando a possibilidade de herança
através da hierarquia de domínios.
Caso não encontre, retorna NULL.

Get domain related component(tipo_componente_id)

Retorna um componente relacionado com o atual através do domínio e que seja de um tipo específico. Retorna NULO se não encontrar.

Pendências do componente

Verifica se o componente tem pendências de acordo com seu tipo.

Pendências do componente do tipo entidade

Verifica os seguintes ítens:

Get Property(property)

Retorna o valor de uma propriedade do componente.

Get property (com default)(name, default_value)

Mesmo que GET_PROPERTY mas aceita informar um default.

Get System

Retorna o componente que representa o sistema deste componente.

Nome global do sistema

Varre a árvore do componente e retorna o nome global do sistema onde ele está inserido.

Get Usages

Esta função retorna uma relação de componentes que referenciam este componente atravé dos atributos "Referência" ou "Domínio".

HTML descrevendo parametros

Retorna um HTML descrevendo os parametros do componente.

Revisar

Cria uma revisão do componente. Se o componente estiver pendente, não tem qualquer efeito.
Se o componente está aprovado, tira a data de aprovação (retornando sua situação para Pendente), incrementa o número de versão, e caso o componente tenha pai, revisa-o também (em cascata até a raiz).

Set property(propriedade, valor)

Define uma propriedade de design para o componente.