

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




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

[INFO] 038/bci/app/main/DoOpenFile.java:53:	IdenticalCatchBranches:	Ramo 'catch' idênticol to ramo 'MissingFileAssociationException' pertencentes à mesma instrução try.
[ERROR] 038/bci/app/main/DoOpenFile.java:51:	EmptyCatchBlock:	Evitar blocos catch vazios.
[ERROR] 038/bci/app/main/DoOpenFile.java:53:	EmptyCatchBlock:	Evitar blocos catch vazios.
[ERROR] 038/bci/app/main/DoSaveFile.java:32:	EmptyCatchBlock:	Evitar blocos catch vazios.
[ERROR] 038/bci/app/main/DoSaveFile.java:35:	EmptyCatchBlock:	Evitar blocos catch vazios.
Total de erros:  4


####    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] 038/bci/core/ObraCategoria.java:10:26: Parâmetro/variável local 'descricao' esconde atributo da classe com o mesmo nome [HiddenField]
Total de erros:  0


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

[ERROR] 038/bci/core/Livro.java:20:16: O método com o nome '_isbn' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 038/bci/core/SysDate.java:4:28: O atributo com o nome 'instance'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 038/bci/core/SysDate.java:22:17: O método com o nome 'avançarData' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 038/bci/core/ObraCategoria.java:8:26: O atributo com o nome 'descricao'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 038/bci/core/DVD.java:8:14: Abreviações no nome 'DVD' não deveriam conter mais do que '1' letras maiúsculas consecutivas. [AbbreviationAsWordInName]
[ERROR] 038/bci/core/Library.java:97:10: A variável local com o nome 'DVD'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 038/bci/core/Library.java:97:10: Abreviações no nome 'DVD' não deveriam conter mais do que '1' letras maiúsculas consecutivas. [AbbreviationAsWordInName]
[ERROR] 038/bci/core/Obra.java:7:23: O atributo com o nome '_preço'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 038/bci/core/TipoFaltoso.java:4:17: O atributo com o nome 'devolucoesNoPrazoConsecutivas'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 038/bci/core/TipoFaltoso.java:5:17: O atributo com o nome 'devolucoesForaPrazoConsecutivas'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 038/bci/core/TipoNormal.java:4:17: O atributo com o nome 'devolucoesNoPrazoConsecutivas'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 038/bci/core/TipoNormal.java:5:17: O atributo com o nome 'devolucoesForaPrazoConsecutivas'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 038/bci/core/TipoCumpridor.java:4:17: O atributo com o nome 'devolucoesForaPrazoConsecutivas'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 038/bci/core/Criador.java:20:23: 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:  14

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

Iniciando a auditoria...
[INFO] 038/bci/core/LibraryManager.java:66 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 038/bci/core/LibraryManager.java:96 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] 038/bci/app/user/UserFormatter.java:10 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'utente.getEstado()' comparada '3' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 038/bci/core/MyParser.java:31 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'components[ ]' 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...
[ERROR] 038/bci/app/user/UserFormatter.java:10 Membro estático 'public static String formatar(Utente utente)' não recomendável. [POStaticMember]
[ERROR] 038/bci/app/work/ObraFormatter.java:7 Membro estático 'public static String formatar(Obra obra)' não recomendável. [POStaticMember]
[ERROR] 038/bci/core/SysDate.java:4 Membro estático 'SysDate instance' não recomendável. [POStaticMember]
[ERROR] 038/bci/core/SysDate.java:5 Membro estático 'int _dia' não recomendável. [POStaticMember]
[ERROR] 038/bci/core/SysDate.java:10 Membro estático 'public static SysDate getInstance()' não recomendável. [POStaticMember]
[INFO] 038/bci/core/exception/ImportFileException.java:7 Atributo estático final 'String ERROR_MESSAGE' permitido. [POStaticMember]
[INFO] O número de serialVersionUID atributos estáticos definidos nas várias classes foi '27'. [POStaticMember]
Auditoria completa.
O Checkstyle terminou com 5 erros.

####  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 interfaces definidos no core: 3, dos quais 0 private, 0 package-private, 0 protected e 3 public. [WriteClassStructure]
[INFO] Interfaces definidos no package core da aplicação (3): '[TipoUtente, Data, ObraVisitor]'. [WriteClassStructure]
[INFO] Número total de enumerados definidos no core: 2, dos quais 0 private, 0 package-private, 0 protected e 2 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (2): '[EstadoUtente, ObraCategoria]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 22, dos quais 0 private, 1 package-private, 0 protected e 21 public. [WriteClassStructure]
[INFO] Classes abstractas definidas no package core da aplicação (2): '[Obra, Pessoa]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (12): '[Utente, TipoFaltoso, ObraComparator, SysDate, DVD, Livro, TipoNormal, TipoCumpridor, MyParser, LibraryManager, Library, Criador]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (8): '[UserNotFoundException, InvalidUserFieldException, MissingFileAssociationException, WorkNotFoundException, UnavailableFileException, ImportFileException, UnrecognizedEntryException, CreatorNotFoundException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 70, dos quais 4 private, 2 package-private, 0 protected e 64 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 34, dos quais 34 private, 0 package-private, 0 protected e 0 public. [WriteClassStructure]
Auditoria completa.

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

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

 [WriteClassStructure]
[INFO] enum ObraCategoria ( public )

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

    private final String descricao

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

    public String getDescricao()

 [WriteClassStructure]
[INFO] interface TipoUtente ( public )
  extends Serializable

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

    TipoUtente atualizaTipoUtente(boolean devolvidaNoPrazo)
    String getTipo()

 [WriteClassStructure]
[INFO] interface Data ( public )

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

    public int getDia()

 [WriteClassStructure]
[INFO] interface ObraVisitor ( public )
  extends Serializable

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

    void visitLivro(List autores, int isbn)
    void visitDVD(Criador realizador, int igac)

 [WriteClassStructure]
[INFO] class Utente ( public )
  extends Pessoa

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

    private final int _utenteID
    private String _email
    private EstadoUtente _estado
    private int _divida
    private TipoUtente _tipoUtente

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

    public String getEmail()
    public EstadoUtente getEstado()
    public int getDivida()
    public String getTipoUtente()
    public int getUtenteID()

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

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

    private final int _obraId
    private final String _titulo
    private final int _preço
    private final ObraCategoria _categoria
    private int _numExemplares
    private int _numExemplaresDisponiveis

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

    public boolean isDisponivel()
    public boolean alteraInventario(int quantidade)
    public boolean alteraInventarioDisponivel(int modo)
    public int getId()
    public int getInventarioDisponivel()
    public int getInventario()
    public ObraCategoria getCategoria()
    public String getTitulo()
    public int getPreco()
    public abstract void accept(ObraVisitor visitor)
    public abstract String getTipo()
    public boolean equals(Object obj)
    public int hashCode()

  ###### Subclasses  ###### 
    DVD   Livro   

   Method accept(ObraVisitor) overriden in subclass(es) DVD Livro 
   Method getTipo() overriden in subclass(es) DVD Livro 
 [WriteClassStructure]
[INFO] class TipoFaltoso ( public implements TipoUtente )

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

    private int devolucoesNoPrazoConsecutivas
    private int devolucoesForaPrazoConsecutivas

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

    public TipoUtente atualizaTipoUtente(boolean noPrazo)
    public String getTipo()

 [WriteClassStructure]
[INFO] class ObraComparator ( public implements Comparator<Obra>, Serializable )

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

    public int compare(Obra o1, Obra o2)

 [WriteClassStructure]
[INFO] class SysDate ( public implements Data )

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

    private static SysDate instance
    private static int _dia

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

    public static SysDate getInstance()
    public int getDia()
    public void avançarData(int dias)

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

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

    private final String _nome

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

    public String getNome()

  ###### Subclasses  ###### 
    Utente   Criador   

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

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

    private final Criador _realizador
    private final int _igac

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

    public int getIgac()
    public String getTipo()
    public void accept(ObraVisitor visitor)

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

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

    private final List<Criador> _autores
    private final int _isbn

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

    public int _isbn()
    public void accept(ObraVisitor visitor)
    public String getTipo()

 [WriteClassStructure]
[INFO] class TipoNormal ( public implements TipoUtente )

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

    private int devolucoesNoPrazoConsecutivas
    private int devolucoesForaPrazoConsecutivas

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

    public TipoUtente atualizaTipoUtente(boolean noPrazo)
    public String getTipo()

 [WriteClassStructure]
[INFO] class TipoCumpridor ( public implements TipoUtente )

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

    private int devolucoesForaPrazoConsecutivas

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

    public TipoUtente atualizaTipoUtente(boolean noPrazo)
    public String getTipo()

 [WriteClassStructure]
[INFO] class MyParser (  implements Serializable )

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

    private Library _library

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

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

 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private Library _library
    private final SysDate _dataLibraryManager
    private String _currentFilename
    private boolean _isModified

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

    public void avancarData(int dias)
    public int getData()
    public Obra getObra(int obraId)
    public Set<Obra> getObrasCriador(String criadorId)
    public int registerUser(String nome, String email)
    public Utente getUtente(int utenteId)
    public Collection<Utente> getUtentes()
    public Collection<Obra> getObras()
    public boolean isModified()
    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String datafile)

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

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

    private int _obraIndex
    private int _utenteIndex
    private final Map<String, Criador> _criadores
    private final Map<Integer, Obra> _obras
    private final Map<Integer, Utente> _utentes

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

    public Criador registerCreator(String nome)
    public int registerUser(String nome, String email)
    public void registerLivro(String titulo, . criadores, int preco, ObraCategoria categoria, int exemplares, int isbn)
    public void registerDVD(String titulo, Criador criador, int preco, ObraCategoria categoria, int exemplares, int igac)
    public Obra getObra(int obraID)
    public int getObraIndex()
    public int getUtenteIndex()
    public Set<Obra> getObrasCriador(String criadorId)
    public Utente getUtente(int utenteID)
    public Collection<Utente> getUtentes()
    public Collection<Obra> getObras()
    void importFile(String filename)

 [WriteClassStructure]
[INFO] class Criador ( public )
  extends Pessoa

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

    private Set<Obra> obras

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

    public boolean addObra(Obra obra)
    public boolean removeObra(Obra obra)
    public Set<Obra> getObras()
    public boolean equals(Object obj)
    public int hashCode()

 [WriteClassStructure]
Auditoria completa.
