

####    Verificação do uso correcto do mecanismo de excepções

	 Uso do mecanismo de excepção como controlo de fluxo, lançar uma excepção demasiado genérica, apanhar uma excepção num bloco catch e lançar uma nova excepção do mesmo tipo ou a mesma excepção 

[ERROR] 043/bci/app/main/DoOpenFile.java:24:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.

	 Blocos catch's iguais ou vazios (incluindo neste casos blocos try e finaly vazios)

[INFO] 043/bci/core/LibraryManager.java:80:	IdenticalCatchBranches:	Ramo 'catch' idênticol to ramo 'FileNotFoundException' pertencentes à mesma instrução try.
Total de erros:  1


####    Quebra do encapsulamento


Nada a assinalar


####    Verificação de alguns aspectos de qualidade do código


Nada a assinalar


####    Verificação da boa aplicação do mecanismo de herança


[WARN] 043/bci/core/Livro.java:26:57: Parâmetro/variável local 'isbn' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Livro.java:26:77: Parâmetro/variável local 'autores' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Classificacao.java:10:31: Parâmetro/variável local 'value' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Classificacao.java:19:33: Parâmetro/variável local 'value' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/EstadoUtente.java:7:23: Parâmetro/variável local 'estado' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Dvd.java:11:114: Parâmetro/variável local 'igac' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Utente.java:20:17: Parâmetro/variável local 'id' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Utente.java:20:28: Parâmetro/variável local 'nome' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Utente.java:20:41: Parâmetro/variável local 'email' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Utente.java:20:56: Parâmetro/variável local 'biblioteca' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Obra.java:22:19: Parâmetro/variável local 'library' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Obra.java:22:32: Parâmetro/variável local 'id' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Obra.java:22:40: Parâmetro/variável local 'quantidadeExemplares' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Obra.java:22:69: Parâmetro/variável local 'titulo' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Obra.java:22:87: Parâmetro/variável local 'categoria' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Obra.java:22:102: Parâmetro/variável local 'preco' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Categoria.java:8:27: Parâmetro/variável local 'value' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 043/bci/core/Criador.java:12:21: Parâmetro/variável local 'nome' esconde atributo da classe com o mesmo nome [HiddenField]
Total de erros:  0


####    Verificação de Convenções de Codificação

[ERROR] 043/bci/core/Livro.java:11:27: O atributo com o nome 'autores'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Livro.java:12:20: O atributo com o nome 'isbn'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Classificacao.java:8:23: O atributo com o nome 'value'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/EstadoUtente.java:5:17: O atributo com o nome 'estado'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Dvd.java:8:20: O atributo com o nome 'igac'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Dvd.java:9:21: O atributo com o nome 'realizador'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Library.java:27:32: O atributo com o nome 'utentes'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Library.java:28:30: O atributo com o nome 'obras'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Library.java:29:32: O atributo com o nome 'criadores'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Library.java:30:36: O atributo com o nome 'requisicoes'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Library.java:31:15: O atributo com o nome 'proximoIdUtente'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Library.java:32:15: O atributo com o nome 'proximoIdObra'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Library.java:33:15: O atributo com o nome 'currentDate'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Library.java:34:19: O atributo com o nome 'modified'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Utente.java:10:17: O atributo com o nome 'id'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Utente.java:11:20: O atributo com o nome 'nome'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Utente.java:12:20: O atributo com o nome 'email'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Utente.java:13:26: O atributo com o nome 'estado'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Utente.java:14:27: O atributo com o nome 'comportamento'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Utente.java:15:30: O atributo com o nome 'requisicoesUtente'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Utente.java:16:17: O atributo com o nome 'multa'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Utente.java:17:31: O atributo com o nome 'notificacoes'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Utente.java:18:21: O atributo com o nome 'biblioteca'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:11:23: O atributo com o nome 'library'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:12:26: O atributo com o nome 'utentesInterresadosRequisicao'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:13:26: O atributo com o nome 'utentesInteressadosDisponibilidade'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:14:30: O atributo com o nome 'requisicoes'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:15:17: O atributo com o nome 'id'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:16:17: O atributo com o nome 'quantidadeExemplares'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:17:20: O atributo com o nome 'titulo'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:18:23: O atributo com o nome 'categoria'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:19:17: O atributo com o nome 'exemplaresDisponiveis'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Obra.java:20:17: O atributo com o nome 'preco'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Categoria.java:6:23: O atributo com o nome 'value'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Criador.java:9:20: O atributo com o nome 'nome'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 043/bci/core/Criador.java:10:24: O atributo com o nome 'obras'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
Total de erros:  36

####   Verificação do processo de serialização

Iniciando a auditoria...
[INFO] 043/bci/core/LibraryManager.java:59 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 043/bci/core/LibraryManager.java:75 ObjectInputStream criado no método 'public void load(String filename)' da classe 'LibraryManager'. [CheckSerialization]
Auditoria completa.

####  Verificação do princípio de desenho aberto/fechado

Iniciando a auditoria...
[WARN] 043/bci/core/Parser.java:29 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'components[ ].trim().toUpperCase()' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
Auditoria completa.

####  Verificação de dependência app de core


Nada a assinalar


####  Verificação do uso desnecessário de super


Nada a assinalar


####  Verificação de dependência de core de app


Nada a assinalar


####  Verificação do uso de membros estáticos

Iniciando a auditoria...
[INFO] 043/bci/core/exception/ImportFileException.java:8 Atributo estático final 'String ERROR_MESSAGE' permitido. [POStaticMember]
[INFO] O número de serialVersionUID atributos estáticos definidos nas várias classes foi '12'. [POStaticMember]
Auditoria completa.

####  Verificação do nível de acesso dos atributos


Nada a assinalar


####  Verificação da necessidade da concretização de hashCode e equals


Nada a assinalar


####  Verificação de membros com o nível protected desnecessário


Nada a assinalar


####  Verificação do mecanismo de herança II: atributos duplicados e métodos que deviam ser abstractos


Nada a assinalar


####  Sumário das classes do core da aplicação

Iniciando a auditoria...
[INFO] Número total de enumerados definidos no core: 3, dos quais 0 private, 0 package-private, 0 protected e 3 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (3): '[Classificacao, EstadoUtente, Categoria]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 17, dos quais 0 private, 1 package-private, 0 protected e 16 public. [WriteClassStructure]
[INFO] Classes abstractas definidas no package core da aplicação (1): '[Obra]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (9): '[Utente, Dvd, Livro, MyParser, Notificacao, LibraryManager, Library, Requisicao, Criador]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (7): '[MissingFileAssociationException, NoSuchWorkExceptionCore, NoSuchUserExceptionCore, UnavailableFileException, ImportFileException, UnrecognizedEntryException, NoSuchCreatorExceptionCore]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 59, dos quais 4 private, 36 package-private, 0 protected e 19 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 36, dos quais 35 private, 0 package-private, 1 protected e 0 public. [WriteClassStructure]
Auditoria completa.

Descrição das estruturas de dados do core do projecto

Iniciando a auditoria...
[INFO] enum Classificacao ( public )

  ###### Atributos ###### 

    private final int value

  ###### Métodos ###### 

    int getValue()
    Classificacao fromValue(int value)

 [WriteClassStructure]
[INFO] enum EstadoUtente ( public )

  ###### Atributos ###### 

    private int estado

  ###### Métodos ###### 

    int getEstado()

 [WriteClassStructure]
[INFO] enum Categoria ( public )

  ###### Atributos ###### 

    private final int value

  ###### Métodos ###### 

    int getValue()
    String getname()

 [WriteClassStructure]
[INFO] class Utente ( public implements Serializable )

  ###### Atributos ###### 

    private int id
    private String nome
    private String email
    private EstadoUtente estado
    private Classificacao comportamento
    private List<Requisicao> requisicoesUtente
    private int multa
    private List<Notificacao> notificacoes
    private Library biblioteca

  ###### Métodos ###### 

    int getId()
    String getNome()
    public String toString()

 [WriteClassStructure]
[INFO]  abstract class Obra ( public implements Serializable )

  ###### Atributos ###### 

    protected Library library
    private List<Utente> utentesInterresadosRequisicao
    private List<Utente> utentesInteressadosDisponibilidade
    private List<Requisicao> requisicoes
    private int id
    private int quantidadeExemplares
    private String titulo
    private Categoria categoria
    private int exemplaresDisponiveis
    private int preco

  ###### Métodos ###### 

    void alterarInventario(int valor)
    boolean isDisponivel()
    void alterarExemplaresDisponiveis(int valor)
    void addInteressadoRequisicao(Utente u)
    void addInteressadoDisponibilidade(Utente u)
    void removeInteressadoRequisicao(Utente u)
    void removeInteressadoDisponibilidade(Utente u)
    abstract String getTipo()
    abstract List<Criador> getCriador()
    String getTitulo()
    int getId()
    public String toString()

  ###### Subclasses  ###### 
    Dvd   Livro   

   Method getTipo() overriden in subclass(es) Dvd Livro 
   Method getCriador() overriden in subclass(es) Dvd Livro 
   Method toString() overriden in subclass(es) Dvd Livro 
 [WriteClassStructure]
[INFO] class Dvd ( public )
  extends Obra

  ###### Atributos ###### 

    private String igac
    private Criador realizador

  ###### Métodos ###### 

    String getTipo()
    List<Criador> getCriador()
    public String toString()

 [WriteClassStructure]
[INFO] class Livro ( public )
  extends Obra

  ###### Atributos ###### 

    private List<Criador> autores
    private String isbn

  ###### Métodos ###### 

    String getTipo()
    List<Criador> getCriador()
    String getAutoresString()
    public String toString()

 [WriteClassStructure]
[INFO] class MyParser (  )

  ###### Atributos ###### 

    private Library _library

  ###### Métodos ###### 

    void parseFile(String filename)
    private void parseLine(String line)
    private void parseUser(String components, String line)
    private void parseBook(String components, String line)
    private void parseDvd(String components, String line)

 [WriteClassStructure]
[INFO] class Notificacao ( public )

 [WriteClassStructure]
[INFO] class LibraryManager ( public )

  ###### Atributos ###### 

    private Library _library
    private String _filename

  ###### Métodos ###### 

    public Library getLibrary()
    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String datafile)
    public boolean getModified()
    public int getCurrentDate()
    public void advanceDate(int days)
    public int registarUtente(String nome, String email)
    public String showWork(int id)
    public List<String> showAllWorks()
    public List<String> showWorksByCreator(String creatorId)
    public String showUser(int id)
    public List<String> showAllUsers()

 [WriteClassStructure]
[INFO] class Library ( public implements Serializable )

  ###### Atributos ###### 

    private Map<Integer, Utente> utentes
    private Map<Integer, Obra> obras
    private Map<String, Criador> criadores
    private Map<Integer, Requisicao> requisicoes
    private int proximoIdUtente
    private int proximoIdObra
    private int currentDate
    private boolean modified

  ###### Métodos ###### 

    int getCurrentDate()
    void advanceDate(int days)
    boolean getModif()
    void setModif(boolean a)
    int addUtente(String nome, String email)
    Utente getUtente(int id)
    Collection<Utente> getUtentes()
    Obra getObra(int id)
    Collection<Obra> getObras()
    List<Obra> getObrasCriadores(String nome)
    void registerBook(String title, List authors, int price, Categoria category, String isbn, int copies)
    void registerDvd(String title, Criador director, int price, Categoria category, String igac, int copies)
    Criador registerCreator(String name)
    void importFile(String filename)

 [WriteClassStructure]
[INFO] class Requisicao ( public )

 [WriteClassStructure]
[INFO] class Criador ( public implements Serializable )

  ###### Atributos ###### 

    private String nome
    private List<Obra> obras

  ###### Métodos ###### 

    List<Obra> getObras()
    void addObras(Obra obra)
    String getNome()
    public String toString()

 [WriteClassStructure]
Auditoria completa.
