====== Especificação funcional: Abertura e manipulação de arquivos de diário ====== ===== Resumo ===== Descreve os procedimentos realizados durante o uso dos arquivos de diário. ===== Descrição ===== Um arquivo de diários é, em sua essência, um arquivo de texto, onde as informações são armazenadas de acordo com uma convenção predefinida para que elas façam sentido. Logo, para manter essa estrutura, é preciso tomar alguns cuidados durante a leitura, manipulação e escrita desses arquivos. A maioria das regras que regem a estrutura do arquivo de diários está definida no [[softwares:diario:requisitos:layouts:schemadiario11|layout do arquivo]]. Entretanto, exitem algumas ações que não estão documentadas nesse layout e que precisam estar documentadas. ==== Backup do arquivo ao abrir ==== Sempre que o sistema conseguir abrir e validar um arquivo de diários com sucesso, uma cópia de segurança do arquivo deve ser realizada. Essa cópia deve ser compactada, renomeada para [nome do arquivo].backup e ser gravada na mesma pasta onde o arquivo original está salvo como um arquivo oculto. O sistema também deve oferecer uma forma para [[softwares:diario:requisitos:modulos:restaurar_backup|restaurar]] esse arquivo caso seja necessário. ==== Bloqueio do arquivo ao abrir ==== Caso o arquivo de diários esteja configurado para exigir uma senha ao abrir, o sistema irá solicitar a digitação da senha do professor, definida pelo School Desktop no ato da geração do arquivo. O usuário só poderá acessar o conteúdo do arquivo mediante a digitação da senha correta ou da senha padrão, utilizada para acessar o modo administrativo. Após abrir um arquivo de diários, esse deve ser bloqueado para que não possa ser aberto por outro programa ou mesmo por outra instância do Diário eletrônico. Assim que o arquivo for fechado, o bloqueio deve ser removido. ==== Salvamento automático ==== O sistema deve, a cada alteração do usuário, salvar o conteúdo no arquivo de diários. O sistema deve implementar esse recurso de forma transparente, sem interromper o uso do sistema. Mesmo implementando esse recurso, o sistema deverá salvar o diário novamente nas seguintes situações: * Abertura de um novo arquivo de diários; * Abertura de outro diário do mesmo arquivo; * Atualização do arquivo de diários; * Acesso ao modo administrativo; * Fechamento do sistema. Nas situações citadas acima, o sistema deverá exibir o progresso da operação de persistência, obrigando o usuário a aguardar a conclusão da operação para continuar a usar o sistema. ==== Verificações realizadas durante a abertura e possíveis problemas ==== === Validação textual do arquivo === O sistema deve tentar abrir o arquivo como um arquivo texto simples e procurar algumas informações que possam dizer que aquele é um arquivo de diários: O texto indicando que se trata de um arquivo Xml (xml version="1.0"), o nó raiz do arquivo xml e a versão do layout do arquivo. Durante essa verificação, os seguintes problemas podem ser detectados: * O arquivo não é um arquivo xml; * O arquivo é um arquivo xml, mas não é um arquivo de diários; * O arquivo está usando uma versão de layout não suportada pelo sistema; Caso algum desses problemas seja detectado, o sistema deverá abortar a operação e exibir uma mensagem para o usuário informando que o arquivo especificado não é um diário eletrônico válido ou é incompatível com a versão do software. === Validação do layout do arquivo === Apesar do arquivo especificar qual é a versão do layout na qual ele está baseado, é preciso confirmar que todos os elementos definidos no layout estão presentes no arquivo. Para isso, o sistema deve validar o conteúdo do arquivo de diários através do schema xml específico para a versão do layout informada. Caso ocorra algum erro durante essa validação, o sistema deve abortar a operação e exibir uma mensagem informando que os dados do arquivo não estão estruturados de acordo com o formato estabelecido. === Capacidade de escrita na mídia === O sistema precisa gerar alguns arquivos temporários durante a abertura de um arquivo de diários, e isso é realizado na mesma mídia onde o arquivo está salvo. Por isso, é indispensável que o sistema seja capaz de escrever na mídia. Entretanto, alguns problemas podem impedir que o sistema escreva na mídia onde o arquivo está armazenado: * A mídia está protegida contra gravação; * O arquivo foi salvo em uma mídia somente leitura (CD/DVD, por exemplo); * A mídia está cheia; * O sistema ou o usuário não tem permissão para gravar na mídia. Caso algum desses problemas seja detectado, o sistema deve abortar a operação e exibir uma mensagem para o usuário informando que não pode escrever na unidade aonde o arquivo está salvo. === Arquivo marcado como somente leitura === O arquivo de diários não pode estar definido como somente leitura. Caso ele esteja, o sistema deve abortar a operação e exibir uma mensagem para o usuário informando que o arquivo está definido como somente leitura. === Arquivo não encontrado === Durante o uso de um arquivo, este pode ficar indisponível por algum motivo, dentre eles: * O arquivo pode ter sido deletado depois de aberto; * A mídia ou local de rede onde o arquivo está salvo não está mais disponível. Caso algum desses problemas seja detectado, o sistema deve abortar a operação e exibir uma mensagem para o usuário informando que não pode encontrar o arquivo no disco. === Arquivo já aberto === Ao tentar abrir um arquivo de diários, ele pode estar sendo usado por outro programa ou por outra instância do sistema. Nesse caso, o sistema deve abortar a operação e exibir uma mensagem para o usuário informando que não foi possível abrir o arquivo especificado. ===== Pontos de verificação ===== ==== Testes com abertura de arquivos ==== * Arquivos não xml (binários, .doc, .xls, .pfd, .jpg, ...); * Arquivos xml que não sejam diários (NF-e, CT-e, ...); * Arquivo xml vazio; * Arquivo de diários com erro no cabeçalho; * Arquivo de diários com cabeçalho correto mas sem conteúdo; * Arquivo de diários com erros na estrutura; * Arquivo de diários válido salvo em unidade protegida contra gravação; * Arquivo de diários válido salvo em disco cheio; * Arquivo de diários válido salvo em pasta marcada como somente leitura; * Arquivo de diários válido marcado como somente leitura; * Abrir um arquivo de diários válido e remover a unidade onde ele está salvo (pendrive, cd, ...). ==== Bloqueio de arquivo ==== * Não deve ser possível abrir um arquivo protegido por senha sem informar a senha correta, definida no próprio arquivo de diários; * O sistema não deve exigir a digitação da senha para arquivos que estiverem com a proteção por senha desabilitada; * Não deve ser possível abrir um arquivo de diários já aberto em outro sistema; * Não deve ser possível abrir um arquivo de diários já aberto em outra instância do Diário eletrônico; * Não deve ser possível reabrir um arquivo já aberto; * Após a troca de arquivos, deve ser possível abrir o arquivo anterior novamente; * Após fechar um arquivo de diários, deve ser possível abrí-lo em outra instância do Diário eletrônico (ou em outro sistema); * Após fechar o sistema, deve ser possível abrir o arquivo de diários em outra instância do Diário eletrônico (ou em outro sistema); ==== Backup do arquivo de diários ==== * O sistema deve criar um novo arquivo de backup sempre que um arquivo de diários for aberto com sucesso; * O sistema não deve criar um novo arquivo de backup quando houver erros na abertura de um arquivo de diários; * O sistema deve criar o arquivo de backup no mesmo local onde o arquivo de diários está salvo; * Caso já exista um arquivo de backup, este deve ser sobrescrito pelo arquivo mais recente; * Os arquivos de backup gerados devem possuir a extensão .backup; * Os arquivos de backup gerados devem estar compactados; * Os arquivos de backup gerados devem estar ocultos; * O sistema não deve ser capaz de abrir um arquivo de backup diretamente (antes da recuperação); ==== Salvamento automático ==== * O sistema deve salvar as modificações a cada ação realizada; * O sistema deve salvar as alterações sempre que o usuário trocar de diário no mesmo arquivo; * O sistema deve salvar as alterações sempre que o usuário trocar de arquivo; * O sistema deve salvar as alterações sempre que o usuário solicitar a atualização do arquivo; * O sistema deve salvar as alterações sempre que o usuário solicitar o acesso ao modo administrativo; * O sistema deve salvar as alterações sempre que o usuário fechar o sistema; ===== Observações ===== Nenhuma.