Child pages
  • Dataset - Diretórios Tipados
Skip to end of metadata
Go to start of metadata

Motivação

Os arquivos no CSBase são tipados e permitem configurar o sistema para uma gama de funcionalidades sensíveis ao tipo do arquivo. Desta forma, o sistema pode reagir de forma diferente de acordo com o tipo de arquivo. Por exemplo, é possível cadastrar aplicações que saibam trabalhar com um tipo específico de arquivo, executando tais aplicações com um duplo-clique na árvore de projetos.

Porém alguns dados são melhores estruturados como diretórios com uma estrutura especial. O diretório especial é análogo a um arquivo com tipo. Logo é razoável pensar em tipo de diretório. Diversas funcionalidades sensíveis ao tipo do arquivo são pertinentes ao pensar em tipo de diretório. O exemplo dado acima é uma delas.

O diretório especial que motivou a criação do DataSet foi o dado interpacotes (ITP). O dado interpacotes é formato proprietário da Petrobras, criado pela gerência que Tecnologia Geofísica/Petrobras que desenvolve o WebSintesi em parceria com o TecGraf/PUC-Rio. O dado interpacotes representa o dado sísmico usando um diretório, vários subdiretórios e arquivos especiais e tem como finalidade prover acesso de leitura e escrita de alto desempenho para o processamento geofísico.

A motivação deste trabalho é permitir a criação de tais tipos de diretórios, ampliar as funcionalidades sensíveis ao tipo de arquivo para trabalhar e serem sensíveis ao tipo de diretório (quando aplicável a diretórios) e alterar as funcionalidades aplicáveis a diretórios que poderíam ser sensíveis ao tipo diretório.

Ao permitir que funcionalidades possam ser sensíveis ao tipo do diretório, várias funcionalidades presentes apenas para arquivos passam a fazer sentido para diretórios. Algumas poucas funcionalidades aplicáveis a arquivos não são sensíveis ao tipo e ainda não são aplicáveis a diretórios, por exemplo, ver propriedades de arquivos. Quando mais homogêneo for o sistema para trabalhar com diretórios ou arquivos facilitará seu uso, logo ampliar as funcionalidades que trabalhem apenas com arquivos para trabalhar com diretórios (quando aplicável a diretórios) também é parte deste trabalho.

A lista de funcionalidades é extensa, este documento abordará apenas as funcionalidades principais. As funcionalidades alteradas apenas com pequenos ajustes geralmente serão omitidas deste documento.

Descrição da Solução

A solução é baseada em um novo conceito:

DataSet ou Diretório Tipado: assim como arquivos possuem tipos no CSBase, o diretório passará a ter tipo. Haverá 2 conjuntos de tipos disjuntos: um aplicável a arquivos e outro aplicável a diretório. Os métodos que tipificam um arquivo ou um diretório precisarão levar isto em consideração.

Remoção da ambiguidade: "Qual é o tipo de um diretório no CSBase? Sem tipo? Diretório? Desconhecido?"

Várias classes do CSBase não distinguem arquivos e diretórios em subclasses. De forma que várias classes, como, por exemplo, o ClientProjectFile possuem métodos para trabalhar com arquivos e diretórios. Não há o conceito tipo de diretório, porém há diversos métodos que trabalham com tipo mesmo quando o dado é um diretórios. Em diversas partes do sistema, uma mesma classe trabalha com diretórios e arquivos e apresenta métodos que trabalham com tipo. A consequência disso é que já existem métodos nessas classes que de alguma forma trabalham com tipos para diretórios. Os métodos de escrita do tipo para diretórios, geralmente apenas ignoram o tipo, porém os de leitura tem respostas ambíguas. Os métodos de consulta estão fornecendo 3 respostas diferentes. Ao perguntar para algumas classes qual é o tipo de um diretório, elas respondem null (sem tipo), porém outras respondem "DIRECTORY_TYPE" (diretório) e outras respondem "UNKNOWN" (desconhecido). Logo devido a estes detalhes de implementação o CSBase responde de formas diferentes a pergunta: qual é o tipo deste diretório.

Uma das principais tarefas dessa modificação é acabar com essa ambiguidade. Para o CSBase, um arquivo quando não tem seu tipo definido sempre responde que o tipo é "UNKNOWN". Com a implementação do DataSet, quando um diretório não tiver seu tipo definido, seu tipo será "DIRECTORY_TYPE". Além disso, "DIRECTORY_TYPE" passa a ser diretório regular, ao invés de simplesmente diretório. A opção null (sem tipo) difere muito da forma que o arquivo sem tipos definidos trabalham. A opção "DIRECTORY_TYPE" (diretório regular) foi escolhida ao invés de "UNKNOWN" (desconhecido), pois há uma opção padrão razoável para diretórios que é diretório regular, o que não existe para arquivos. Além disso, a maior parte dos diretórios na árvore de projetos, mesmo no WebSintesi, serão diretórios regulares e não DataSets. Logo inferir "DIRECTORY_TYPE" ao invés de "UNKNOWN" para diretórios geralmente fará o sistema se comportar adequadamente na maioria dos casos.

Esta tarefa tem grande impacto sobre o sistema, infelizmente tal impacto geralmente não pode ter auxílio do compilador, já que já existem métodos implementando de 3 modos diferentes a resposta à pergunta: "Qual é o tipo de um diretório?".

É comum encontrar essa ambiguidade espalhada em classes que são sensíveis ao tipo de arquivo. É comum que essas classes perguntem se o dado é um arquivo ou diretório. Quando é diretório, elas assumem um comportamento único e quando é arquivo, elas consultam o tipo para decidir qual é o comportamento válido. Temos as 3 interpretações supracitadas espalhadas pelo código do CSBase. Isso é outra fonte de grande impacto que precisa ser modificada.

Exemplos de implementações que precisam ser alteradas:

Opção 1:

if (file.isDirectory()) {
    type = null;
} else {
   type = file.getType();
}
// Faz alguma coisa com a variável type.

 

Opção 2:

String type;
if (file.isDirectory()) {
    type = ProjectFileType.DIRECTORY_TYPE;
}
else {
    type = file.getType();
}
// Faz alguma coisa com a variável type.

 

Opção 3:

if (file.isDirectory()) {
    type = ProjectFileType.UNKNOWN;
}
else {
    type = file.getType();
}
// Faz alguma coisa com a variável type.

 

Colocar tipo no diretório simplifica tais trechos de código, o trecho acima por exemplo se reduz a uma linha de código:

 

String type = file.getType();

// Faz alguma coisa com a variável type.

 

Tal ambiguidade não está confinada no CSBase, ela pode estar nas instâncias do CSBase, logo essa alteração potencialmente tem impacto em instâncias de CSBase sem que seja possível resolvê-lo alterando apenas o CSBase, portanto é necessário vasculhar a instância do CSBase procurando-a.

Obrigatoriedade dos tipos "UNKNOWN" e "DIRECTORY_TYPE":

Os tipos de arquivos são configurados utilizando o arquivo FileType.properties.

Agora é obrigatório existir o tipo "UNKNOWN" e "DIRECTORY_TYPE" no arquivo FileType.properties.

Exemplo:

filetype.0.typeCode=UNKNOWN

filetype.UNKNOWN.description_pt_BR=Desconhecido

filetype.UNKNOWN.description_en_US=Unknown

filetype.UNKNOWN.description_es_AR=Desconocido

filetype.UNKNOWN.baseIcon=/resources/filetypes/other.gif

filetype.UNKNOWN.ucIcon=/resources/filetypes/other_uc.gif

filetype.UNKNOWN.cutIcon=/resources/filetypes/other_cut.gif

filetype.UNKNOWN.mimeType=application/zip

 

filetype.1.typeCode=DIRECTORY_TYPE

filetype.DIRECTORY_TYPE.description_pt_BR=Diretório

filetype.DIRECTORY_TYPE.description_en_US=Directory

filetype.DIRECTORY_TYPE.description_es_AR=?????

filetype.DIRECTORY_TYPE.baseIcon=/resources/filetypes/dir.gif

filetype.DIRECTORY_TYPE.ucIcon=/resources/filetypes/dir_uc.gif

filetype.DIRECTORY_TYPE.cutIcon=/resources/filetypes/dir_cut.gif

filetype.DIRECTORY_TYPE.mimeType=application/zip

filetype.DIRECTORY_TYPE.isDirectory=true

 

Inferência de tipo de diretórios por extensão:

Hoje, quando o sistema encontra um arquivo e precisa inferir seu tipo automaticamente, ele utiliza a inferência por extensão. A inferência por extensão funciona desta forma:


Selecione o tipo "UNKNOWN".
Obtém se a extensão do arquivo
Se ele tiver extensão, então:
    Selecionar um tipo cadastrado no sistema que use aquela extensão
    Se houver um tipo, então:
        O tipo é selecionado.

 

É desejável que o CSBase possa fazer o mesmo tipo de inferência para diretórios. Logo diretórios também ganharão extensões opcionais, exatamente com arquivos. O algoritmo de inferência deve levar em consideração que os tipos são aplicáveis a arquivos ou a diretórios (com ou exclusivo). Portanto poderá ser implementado assim:

 

Se o arquivo/diretório é diretório, então:
    Selecione "DIRECTORY_TYPE".
Senão
    Selecione "UNKNOWN".
Obtém se a extensão
Se ele tiver extensão, então:
    Selecionar um tipo cadastrado no sistema que use aquela extensão.
    Se houver um tipo, então:
        Se é arquivo e o tipo é aplicado a arquivos ou é diretório e o tipo é
aplicado a diretórios, então:
            O tipo é selecionado.

Ampliação do uso da extensão para diretórios:

Hoje, como não há extensões para diretórios, alguns métodos para trabalham com extensões, podem estar evitando diretórios ou assumindo comportamentos diferentes quando o dado é um diretório. É necessário avaliar cada trecho de código desse tipo e verificar se há ganho a não distinguir arquivos e diretórios.

Exemplo 1:

String extension;
if (file.isDirectory()) {
   extension = null;
}
else {
   extension = file.getExtension();
}
// Faz alguma coisa com a extensão.

 

Exemplo 2:

if (file.isRegularFile()) {
   String extension = file.getExtension();
   // Faz alguma coisa com a extensão.
}

 

Como a possibilidade de extensão em diretórios na maior parte dos casos o código poderá ser reduzido a uma linha.

 

String extension = file.getExtension();
// Faz alguma coisa com a extensão.
 

O impacto de não utilizar a extensão em diretórios em uma parte do código será que nesta parte o sistema nunca irá utilizar extensões em diretórios. O que pode ser um bug.

 

Tais implementações não estão confinado no CSBase, elas podem estar nas instâncias do CSBase, logo essa alteração potencialmente tem impacto em instâncias do CSBase sem que seja possível resolvê-lo alterando apenas o CSBase, portanto é necessário vasculhar a instância do CSBase procurando tais trechos de código.

Inferência de tipo de diretório por conteúdo:

É desejável que o CSBase possa fazer o mesmo tipo de inferência para diretórios. Logo diretórios também serão investigados procurando padrões em seu conteúdo. Essa alteração tem baixo impacto. No WebSintesi, a inferência por conteúdo está restrita a 3 tipos de arquivos específicos de geofísica: GRID, WSP e SEGY. Também será utilizado para ITP. Não implementar a alteração do sistema, tem baixo impacto. Já que o acionamento da funcionalidade é manual e pouco utilizado (pelo menos no WebSintesi).

 

É necessário levar em consideração que tipos são aplicáveis a arquivos ou diretórios (ou exclusivo).

Criação de arquivo de metadado .XPTO.csbase para um diretório XPTO:

O CSBase tipifica arquivos criando um arquivo de metadados. Para entender a regra de formação do nome do arquivo de metadados, vamos nos basear em um exemplo: seja arquivo.txt um arquivo armazenado em um diretório em um projeto na área

de projetos do CSBase. O CSBase irá criar um arquivo chamado .arquivo.txt.csbase irmão deste arquivo. Neste arquivo, serão armazenados o tipo do arquivo e outras metadados como o dono do arquivo. Para diretórios, o CSBase, atualmente, não cria tal arquivo. Logo se temos um diretório chamado diretorio1, provalmente não haverá um arquivo .diretorio1.csbase irmão deste. Porém com a criação do tipo de diretório, foi escolhido que a mesma implementação para tipificar arquivos será implementada para diretórios, logo após esta criação do DataSet ser houver um diretório chamado diretorio1 na árvore de projetos, então haverá um arquivo .diretorio1.csbase irmão deste diretório. Tal arquivo de metadado manterá todos os metadados que forem aplicáveis a diretórios não apenas o tipo. Assim haverá mais oportunidades de ampliar as funcionalidades do CSBase para um tratamento mais homogêneo entre arquivos e diretórios.

Geração automática do arquivo de metadados para diretórios:

Hoje, quando surge um arquivo na área de projetos sem que tenha sido criado pela parte servidor Java do sistema, ele surge sem o arquivo de metadados. Porém quando o sistema encontra o arquivo, o que ocorre geralmente na navegação na árvore, o Serviço de Projetos cria automaticamente o arquivo. O tipo é inferido por extensão. O Serviço de Projetos deverá fazer o mesmo para diretórios, ou seja, gerar automaticamente o arquivo de metadados inferindo seu tipo por extensão.

Correção automatica do tipo "UNKNOWN" nos metadados para diretórios:

Em algum momento do passado do CSBase, ele gerava arquivos de metadados irmão do diretório. Tais arquivos são legados que não são mais utilizados. Naquela época, o tipo armazenado no metadado para diretórios era "UNKNOWN". Como a tipificação de diretórios os arquivos de metadados do CSBase para diretórios serão utilizados novamente. O tipo "UNKNOWN" é um tipo aplicável apenas a arquivos, logo ele não é um tipo aceitável para estar armazenado em um arquivo de metadados que descreve um diretório. Logo no momento da leitura do arquivo de metadados para diretórios pelo Serviço de Projetos, este irá verificar se o tipo registrado no arquivo é "UNKNOWN", caso seja, o arquivo de metadados será modificado para armazenar o tipo "DIRECTORY_TYPE". Dessa forma, os arquivos de metadados legados serão corrigidos sob demanda e automaticamente.

Criação de arquivos de descrição .XPTO.csbase_description para um diretório XPTO:

O CSBase armazena uma descrição dos arquivos em um arquivo de metadados especial. Para entender a regra de formação do nome do arquivo de descrição, vamos nos basear em um exemplo: seja arquivo.txt um arquivo armazenado em um diretório em um projeto na área de projetos do CSBase. O CSBase irá criar um arquivo chamado .arquivo.txt.csbase_description irmão deste arquivo. Neste arquivo, são armazenados informações complementares em texto sobre o arquivo, tipicamente um histórico de alterações. Para diretórios, o CSBase não cria tal arquivo. Logo se temos um diretório chamado diretorio1, não haverá um arquivo .diretorio1.csbase_description irmão deste. Porém com a ampliação das funcionalidades aplicáveis a arquivos para diretórios, é desejável que haja um arquivo .diretorio1.csbase_description.

Associação entre aplicações e tipos de diretórios:

O CSBase permite que possamos associar aplicações a tipos de arquivos. Isso é utilizado pela opção "Abrir com..." e "Abrir", assim como o duplo-clique na árvore de projetos. O "Abrir com..." traz todas as aplicações que estão associadas com o tipo do arquivo. O "Abrir" e o duplo-clique são formas diferentes de executar a mesma funcionalidade. Quando ativada, se houver uma aplicação cadastrada ou se o usuário tiver uma aplicação favorita para o tipo de arquivo selecionado, executa a aplicação, caso contrário mostra o diálogo mostrando todas as aplicações disponíveis para tratar o tipo do arquivo. É desejável que possamos associar aplicações a tipos de diretórios. A funcionalidade é a mesma da descrita em cima.

Ícones na área de projeto sensíveis ao tipo para diretórios:

O CSBase permite cadastrar ícones para serem exibidos representando o tipo do arquivo, como por exemplo na árvore de projetos e nos diálogos de seleção de arquivos, os ícones de um arquivo dependem do tipo e do seu estado. Cada tipo de arquivo possui um conjunto de ícones: ícone normal, ícone em construção e ícone cortado. Já para diretórios, o ícone depente apenas do seu estado. Há 2 tipos de ícones: ícone normal e ícone para diretório desatualizado. É desejável que possamos criar ícones sensíveis ao tipo para diretórios. Os estados em construção e cortado serão aplicáveis também a diretórios (para homogenizar o tratamento de arquivos e diretórios), logo os tipos de ícones que serão válidos serão: ícone normal, ícone para diretório desatualizado, ícone em construção e ícone cortado.

Homogenização das ações de popups da árvore de projeto:

Há variações na ações de popup da árvore de projeto quando escolhemos entre seleção simples e seleção múltipla e entre arquivos e diretórios.

Com seleção simples temos:

  • Estado atual:
    • Com arquivo selecionado:
      • Abrir
      • Abrir com Bloco de Notas
      • Outras Ações
      • Ver Propriedades
      • Recortar
      • Copiar
      • Renomear
      • Alterar Tipo
      • Inferir Tipo
      • Remover
      • Visualizar no Navegador
      • Exportar
      • Avançado
      • Alterar Estado
      • Desbloquear
    • Com diretório selecionado:
      • Criar Diretório
      • Ordenar Diretório por
      • Atualizar Diretório
      • Recortar
      • Copiar
      • Colar
      • Renomear
      • Remover
      • Importar
      • Exportar
  • Estado desejado:
    • Opções de popups da árvore de projetos para seleção simples com arquivo selecionado: inalterado.
    • Opções de popups da árvore de projetos para seleção simples com diretório selecionado:
    • Criar Diretório
    • Abrir
    • Outras Ações
    • Ordenar Diretório por
    • Atualizar Diretório
    • Ver Propriedades
    • Recortar
    • Copiar
    • Colar
    • Renomear
    • Alterar Tipo
    • Inferir Tipo
    • Remover
    • Importar
    • Exportar
    • Avançado
      • Alterar Estado
  • Logo serão incluídas as ações: Abrir, Outras Ações, Ver Propriedades, Alterar Tipo, Inferir Tipo e Alterar Estado.
  • Porém não serão incluídas as ações: Abrir com Bloco de Notas, Visualizar no Navegador e Desbloquear.

Com seleção múltipla temos:

  • Estado atual:
    • Com arquivos selecionados:
      • Ações Múltiplas
      • Recortar
      • Copiar
      • Alterar Tipo
      • Remover
      • Exportar
    • Com diretórios selecionados:
      • Ações Múltiplas (sempre desabilitado)
      • Recortar
      • Copiar
      • Alterar Tipo (sempre desabilitado)
      • Remover
      • Exportar
    • Com arquivos e diretórios selecionados:
      • Ações Múltiplas (sempre desabilitado)
      • Recortar
      • Copiar
      • Alterar Tipo (sempre desabilitado)
      • Remover
      • Exportar
  • Estado atual:
    • Com arquivos selecionados:
      • Ações Múltiplas
      • Recortar
      • Copiar
      • Alterar Tipo
      • Remover
      • Exportar
    • Com diretórios selecionados:
      • Ações Múltiplas
      • Recortar
      • Copiar
      • Alterar Tipo
      • Remover
      • Exportar
    • Com arquivos e diretórios selecionados:
      • Ações Múltiplas (sempre desabilitado: ações dependem do tipo, não há um tipo comum para arquivos e diretórios)
      • Recortar
      • Copiar
      • Alterar Tipo (sempre desabilitado: não há um tipo comum para arquivos e diretórios)
      • Remover
      • Exportar

Diálogo para Criação de Diretórios:

Hoje, o diálogo para criação de diretórios só solicita o nome do diretório, porém com a tipificação de diretórios, ele deve solicitar o tipo. Ele trará uma ComboBox com os tipos aplicáveis a diretórios.

Diálogo para Ver Propriedades:

Hoje, o diálogo "Ver Propriedades" só é utilizado em arquivos, entre outras informações ele traz o tamanho do arquivo. Ele deverá ser capaz de exibir diretórios e exibirá o tamanho total ocupado pelo diretório e seus descendentes.

Filtro da Árvore de Projetos:

Hoje, o filtro da árvore de projetos só filtra arquivos. Ele permite filtrar pelo tipo do arquivo e o seu algoritmo de funcionamento pode ser expresso da seguinte forma:

        Quando selecionamos um tipo de arquivo:
            Um arquivo é considerado adequado se:
                Seu nome começar com o texto informado (se houver);
                E seu tipo é o tipo selecionado.
            Só mostra o arquivo se ele for adequado.
            Só mostra o diretório, se houver pelo menos 1 descendente adequado.
        Quando selecionamos o tipo "todos os arquivos":
            Um arquivo é considerado adequado se:
                Seu nome começar com o texto informado (se houver);
            Um diretório é considerado adequado se:
                Seu nome começar com o texto informado (se houver);
            Só mostra o arquivo se ele for adequado.
            Só mostra o diretório, se ele for adequado ou se houver pelo menos 1 descendente adequado.

Porém, ele será ampliado para ser apenas diretórios e será possível selecionar um tipo específico de diretório (incluindo o tipo diretório). A opção "todos os arquivos" será modificada para "todos os arquivos ou diretórios". A opção "todos os arquivos ou diretórios" terá o comportamento igual ao "todos os arquivos" anterior. O algoritmo para seleção de diretórios pode ser expresso da seguinte forma:

        Quando selecionamos um tipo de diretório:
            Um arquivo nunca será considerado adequado.
            Um diretório é considerado adequado se:
                Seu nome começar com o texto informado (se houver);
                E seu tipo é o tipo selecionado.
            Só mostra o diretório:
                Se ele for do tipo adequado
                Ou se houver diretórios descendentes adequados.

Configurador de Algoritmo:

Parâmetro do tipo arquivo_de_entrada/arquivo_de_saida:

O parâmetro do tipo arquivo_de_entrada/arquivo_de_saida possui um atributo chamado tipo. Hoje só é possível informar um tipo de arquivo. Com a tipificação de diretórios, este atributo aceitára tipos de diretórios.

Parametro do tipo diretorio_de_entrada/diretorio_de_saida:

Será criado um alias para o arquivo_de_entrada com tipo "DIRECTORY_TYPE" chamado diretorio_de_entrada.

Será criado um alias para o arquivo_de_saida com tipo "DIRECTORY_TYPE" chamado diretorio_de_saida.

Parâmetro do tipo url_de_entrada/url_de_saida:

O parâmetro do tipo url_de_entrada/url_de_saida possui um atributo chamado tipo. Hoje só é possível informar um tipo de arquivo. Com a tipificação de diretórios, este atributo aceitára tipos de diretórios.

Remoção da inconsistência entre categoria e tipo para arquivo_de_entrada/arquivo_de_saida/url_de_entrada/url_de_saida:

Há algumas inconsistências quando misturamos categoria e tipo nos parâmetros arquivo_de_entrada, arquivo_de_saida, url_de_entrada e url_de_saida.

Incosistências detectadas:

  1. Categoria diretorio + tipo de arquivo: como o parâmetro deve funcionar?
  2. Categoria diretorio + tipo "UNKNOWN": um problema gerado pela ambiguidade de tipos de diretórios do CSBase. A interpretação correta e que está implementada é não levar em consideração o tipo. Porém como a ambiguidade será corrigida e o tipo "UNKNOWN" será aplicável apenas a arquivos, essa combinação se tornou inconsistente.

Essa implementação afeta o parser que lê o config.xml fazendo com que ele deixe de ler o caso 1 e o caso 2. Logo é necessário verificar se o config.xml dos algoritmos instalados na instância de CSBase não caem nessa categoria. A solução do caso 2 é mais direta, basta remover o tipo que ele interpreta como qualquer tipo de diretório (já que a categoria é diretório). A solução do caso 1 é mais complexa, pois há um erro conceitual, mas a intepretação mais razoável é aceitar diretórios e o o tipo de arquivo XPTO, porém o jeito correto de expressar isto é categoria ambos e tipo de arquivo XPTO;

Com a nova implementação a combinação entre categorias e tipos funcionará da seguinte forma:

  • Categoria arquivos + tipo diretório:
    • Irá gerar exceção.
  • Categoria diretório + tipo arquivo:
    • Irá gerar exceção.
  • Categoria ambos + tipo arquivo
    • Invocará diálogo para seleção de ambos,
      • Com o tipo de arquivo selecionado.
  • Categoria ambos + tipo diretório
    • Invocará diálogo para seleção de ambos,
      • Com o tipo de diretório selecionado.
  • Categoria diretório + tipo diretório
    • Invocará diálogo para seleção de diretórios.
      • Com o tipo de diretório selecionado.
  • Categoria arquivo + tipo arquivo
    • Invocará diálogo para seleção de arquivos.
      • Com o tipo de arquivo selecionado.
  • Sem categoria + tipo diretório:
    • Invocará diálogo para seleção de diretórios.
      • Com o tipo de diretório selecionado.
  • Sem categoria + tipo arquivo:
    • invocará diálogo para seleção de arquivos.
      • Com o tipo de arquivo selecionado.
  • Categoria arquivo + sem tipo:
    • invocará diálogo para seleção de arquivos.
      • Com a opção todos os arquivos selecionada.
  • Categoria diretório + sem tipo:
    • invocará diálogo para seleção de diretórios.
      • Com a opção todos os diretórios selecionada.
  • Categoria ambos + sem tipo:
    • invocará diálogo para seleção de ambos.
      • Com a opção todos os arquivos ou diretórios selecionado.

Construtor de Fluxo:

Conectores de Entrada e Saída:

São exibidos como triângulos coloridos. Há apenas uma cor quando a categoria  do arquivos/urls é diretorio. Quando a categoria é arquivo, a cor depende do tipo do arquivo. Se houver uma cor configurada no arquivo de propriedades do Construtor de Fluxo para o tipo do arquivo em questão, essa cor será utilizado, caso contrário será a cor preta.  Ele impede a criação de uma conexão entre arquivos/urls um com categoria arquivo e o outro com categoria diretório. Ele impede a criação de uma conexão entre arquivos/urls com tipos de arquivos diferentes.

Com a tipificação de diretórios, ele irá considerar o tipo diretório. Quando a categoria for diretório, a cor do triângulo dependerá do tipo do diretório. Ele impedirá a criação da conexão entre arquivos/urls com tipos de diretórios diferentes.

config.flx:

Quando há um valor nos arquivos ou URLs de entrada e saída, esse valor é salvo com o caminho e seu tipo: para arquivos, o tipo é o tipo do arquivo; para diretórios, o tipo é fixado como "DIRECTORY_TYPE". Para diretórios, salvará o tipo do diretório ao invés de "DIRECTORY_TYPE" apenas.

Diálogo de Seleção de Diretórios na Área de Projetos (Antigo):

Ícones:

Deverá seguir o que está descrito na seção "Ícones na área de projeto sensíveis ao tipo para diretórios".

Filtro:

Não há filtro. Deverá exibir uma ComboBox para filtro com os tipos aplicáveis para diretórios. Exibirá apenas os diretórios que forem do tipo selecionado. Permitirá a seleção de diretórios de qualquer tipo (opção: todos os diretórios).

Diálogo de Seleção de Arquivos/Diretórios na Área de Projetos (Novo):

Ícones:

Deverá seguir o que está descrito na seção "Ícones na área de projeto sensíveis ao tipo para diretórios".

Filtro:

  • Estado atual:
    • Para arquivos, é sensível ao tipo de arquivo. Não filtra diretórios (mesmo que não possuam descendentes que possam ser selecionados). Oculta arquivos cujo tipo difere do tipo selecionado.
    • Para diretórios, não considera o tipo. Não filtra diretórios. Ele oculta todos os arquivos.
  • Estado desejado:
    • Para arquivos: sem alterações.
    • Para diretórios: será sensível ao tipo de diretório. Continuará não filtrando diretórios. Continuará ocultando os arquivos. Ele impedirá que o usuário selecione um diretório cujo tipo difere do tipo escolhido.

Diálogo de Seleção de Arquivos/Diretórios Locais ou SGA:

Ícones:

  •  Estado atual:
    • Para arquivos:
      • Há um ícone de um cadeado decorando o nome do arquivo quando este não tem permissão de leitura.
      • O ícone é selecionado de acordo com permissão de leitura e o tipo do arquivo.
      • Variações de ícones:
        • Ícone para com permissão de leitura
        • Ícone para sem permissão de leitura (sem cadeado)
    • Para diretórios:
      • Não há o ícone de um cadeado decorando o nome do arquivo quando este não tem permissão de leitura.
      • O ícone é selecionado de acordo com permissões.
    • Variações de ícones:
      • Ícone para com permissão de leitura
      • Ícone para sem permissão de leitura (com cadeado)
  • Estado desejado:
    • Arquivos: inalterado.
      • Haverá um ícone de um cadeado decorando o nome do arquivo quando este não tem permissão de leitura.
      • O ícone será selecionado de acordo com permissão de leitura e o tipo do arquivo.
      • Variações de ícones:
        • Ícone para com permissão de leitura
        • Ícone para sem permissão de leitura (sem cadeado)

Simplificação da API de arquivos e diretórios:

  • Já que os diretórios terão tipos, a quantidade de informações necessária para criar um diretório e para criar um arquivo se tornou a mesma. Em várias classes há métodos para criar diretórios e arquivos. Vários métodos se tornarão bem parecidos, logo para simplificar a API vários métodos para criação de arquivos e diretórios serão removidos e restarão menos métodos para desempenhar as mesmas funções.

 

 

Classe/InterfaceMétodo removidoMétodo substitutoComo
ProjectServiceInterfacevoid createDirectory(Object projectId, String [] path, String name)void createFile(Object projectId, String [] path, String name, String type)Informar ProjectFileType.DIRECTORY como type para diretório comum. Para DataSet, informar o identificador do tipo do DataSet.
ProjectServiceInterfacevoid createAndGetFile(Object projectId, String [] path, String name, String type)

void createFile(Object projectId, String [] path, String name, String type)

ClientProjectFile getChild(Object projectId, String [] path)

Invoque o createFile e em seguida o getChild.
CommonClientProjectClientProjectFile createAndWaitForFile(ClientProjectFile dir, String fileName, String type)ClientProjectFile createFile(ClientProjectFile dir, String fileName, String type) 
CommonClientProjectClientProjectFile[] createAndWaitForFiles(ClientProjectFile dir, List<ProjectFileInfo> fileInfoList)ClientProject[] createFiles(ClientProjectFile dir, List<ProjectFileInfo> fileInfoList) 
CommonClientProjectClientProjectFile createAndWaitForDirectory(ClientProjectFile dir, String fileName)ClientProjectFile createFile(ClientProjectFile dir, String fileName, String type)Informar ProjectFileType.DIRECTORY como type para diretório comum. Para DataSet, informar o identificador do tipo do DataSet.
CommonClientProjectvoid createAndWaitForDirectoryPath(ClientProjectFile root, String [] dirPath)void createDirectory(ClientProjectFile root, String [] dirPath) 
ClientProjectFilevoid createDirectory(String dirName)void createFile(String fileName, String type)Informar ProjectFileType.DIRECTORY como type para diretório comum. Para DataSet, informar o identificador do tipo do DataSet.

 

Configuração

É necessário criar um novo tipo de DataSet, faça:

  1. Altere o arquivo FileType.properties para incluir as informações sobre o novo tipo de DataSet.
  2. Escolha um identificador para o tipo de DataSet.
  3. Escolha os ícones para o tipo de DataSet.
  4. Escolha 0 ou mais extensões para o tipo de DataSet.
  5. Se desejar associar aplicações ao tipo de DataSet, inclua o identifcador do tipo, como tipo tratado pela aplicação no arquivo de configuração da aplicação.
  6. Se desejar escolher um cor para representar as conexões no Construtor de Fluxo, configurá-la no arquivo de propriedades do Construtor de Fluxos.

Trecho mostrando os itens 1, 2, 3, e 4:

filetype.48.typeCode=ITP
filetype.ITP.description_pt_BR=Dados formato ITP
filetype.ITP.description_en_US=ITP
filetype.ITP.description_es_AR=ITP
filetype.ITP.baseIcon=/resources/filetypes/itp.gif
filetype.ITP.ucIcon=/resources/filetypes/itp_uc.gif
filetype.ITP.odIcon=/resources/filetypes/itp_od.gif
filetype.ITP.cutIcon=/resources/filetypes/itp_cut.gif
filetype.ITP.mimeType=application/zip
filetype.ITP.extensions=itp
filetype.ITP.isDirectory=true

O atributo odIcon é específico para tipos que trabalhem apenas com diretórios. Ele é o ícone utilizado para o diretório desatualizado (out of date).

O atributo isDirectory tem como valor padrão false. Ele indica se o tipo é aplicável a diretórios (valor true) ou a arquivos (valor false). Já que o valor false é o padrão, ele é opcional para arquivos. Isso evita que sistemas que não precisem utilizar o DataSet tenham que alterar o FileType.properties.

Para criar o DataSet, também é necessário selecionar os ícones para os estados:

  • Normal
  • Sob construção
  • Desatuailizado
  • Cortado

Como usar

Como essa modificação no CSBase trouxe vários possíveis impactos as instâncias do CSBase é necessário vasculhar sua instância de CSBase tentando resolver as seguintes questões:

 

  1. Obrigatoriedade dos tipos "UNKNOWN" e "DIRECTORY_TYPE": garantir que o tipo "UNKNOWN" está cadastrado no FileType.properties de sua instância; cadastrar o "DIRECTORY_TYPE" no FileType.properties de sua instância.
  2. Simplificação da API de arquivos e diretórios: tratar possíveis erros de compilação.

  3. Remoção da inconsistência entre categoria e tipo para arquivo_de_entrada/arquivo_de_saida/url_de_entrada/url_de_saida: varrer todos os config.xml da sua instância verificando se há inconsistência.
  4. Remoção da ambiguidade: "Qual é o tipo de um diretório no CSBase? Sem tipo? Diretório? Desconhecido?": investigar todos os usos específicos de tipos de diretório e analisar caso a caso. Sugestão procure as ocorrências de getType, setType das classes que lidam com arquivos e diretórios, procurar as ocorrências de ProjectFileType.DIRECTORY_TYPE e ProjectFileType.UNKNOWN e analisar caso a caso.
  5. Ampliação do uso da extensão para diretórios: investigar os usos específicos de extensão de arquivo e verificar se deve ampliá-los para diretórios.
  6. Homogenização das ações de popups da árvore de projeto: apenas se tiver uma árvore específica diferente da padrão do CSBase (é o caso do WebSintesi);

Apenas o item 1 é obrigatório. O CSBase irá parar de funcionar adequadamente com diretórios (será impossível criar novos diretórios na área de projetos pela área de projeto, por exemplo), caso o item 1 não seja feito.


Os itens estão ordenados pela gravidade do impacto. Logo o item 1 é o mais grave e o item 5 causa pouco impacto.

Trabalhos Futuros

- Permitir criar tipos de diretórios que não permitam expansão de diretório na árvore de projetos, diálogo de seleção de  arquivos/diretórios ou painel de conteúdo de diretório/arquivos.

- Tratar todas as formas de transferências de arquivo.

- Ampliar o CSDK para que seja possível criar diretórios com tipo.

- Ampliar o OpenBus DataService para que ele possa ler e alterar tipo de  arquivos/diretórios.

 

 

  • No labels