

####    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] 031/bci/app/main/DoOpenFile.java:32:	IdenticalCatchBranches:	Ramo 'catch' idênticol to ramo 'IOException' pertencentes à mesma instrução try.
[INFO] 031/bci/app/main/DoOpenFile.java:34:	IdenticalCatchBranches:	Ramo 'catch' idênticol to ramo 'IOException' pertencentes à mesma instrução try.
[INFO] 031/bci/app/main/DoSaveFile.java:34:	IdenticalCatchBranches:	Ramo 'catch' idênticol to ramo 'MissingFileAssociationException' pertencentes à mesma instrução try.
[INFO] 031/bci/app/main/DoSaveFile.java:36:	IdenticalCatchBranches:	Ramo 'catch' idênticol to ramo 'MissingFileAssociationException' pertencentes à mesma instrução try.
Total de erros:  0


####    Quebra do encapsulamento


Nada a assinalar


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


[ERROR] 031/bci/core/Livro.java:48:9: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por '_creators' (do tipo 'List<Criador>'). Substituir por ciclo for-each ou usar um iterador dado que a utilização do método get pode ser muito ineficiente neste caso. [POIterateListWithForLoop]
[WARN] 031/bci/core/LibraryManager.java:99:35: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 031/bci/core/Utente.java:74:24: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 031/bci/app/main/DoOpenFile.java:20:35: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 031/bci/app/main/DoOpenFile.java:22:16: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 031/bci/app/main/DoSaveFile.java:24:35: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 031/bci/app/main/DoSaveFile.java:26:38: A expressão pode ser simplicada. [SimplifyBooleanExpression]
Total de erros:  1


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


Nada a assinalar


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

[ERROR] 031/bci/core/tipoUtente.java:3:13: O tipo 'tipoUtente' deve condizer com o padrão '^[A-Z][a-zA-Z]+$'. [TypeName]
Total de erros:  1

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

Iniciando a auditoria...
[INFO] 031/bci/core/LibraryManager.java:123 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 031/bci/core/LibraryManager.java:146 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] 031/bci/core/Parser.java:23 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

Iniciando a auditoria...
[WARN] 031/bci/core/Dvd.java:44 uso desnecessário de super para invocar método 'getTitle' da super classe. [AvoidUselessSuper]
[WARN] 031/bci/core/Dvd.java:44 uso desnecessário de super para invocar método 'getPrice' da super classe. [AvoidUselessSuper]
[WARN] 031/bci/core/Dvd.java:44 uso desnecessário de super para invocar método 'getCategoria' da super classe. [AvoidUselessSuper]
[WARN] 031/bci/core/Livro.java:38 uso desnecessário de super para invocar método 'getTitle' da super classe. [AvoidUselessSuper]
[WARN] 031/bci/core/Livro.java:38 uso desnecessário de super para invocar método 'getPrice' da super classe. [AvoidUselessSuper]
[WARN] 031/bci/core/Livro.java:38 uso desnecessário de super para invocar método 'getCategoria' da super classe. [AvoidUselessSuper]
Auditoria completa.

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


Nada a assinalar


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

Iniciando a auditoria...
[INFO] 031/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 '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

Iniciando a auditoria...
[WARN] Possível erro: A classe 'Obra' utilizada no atributo 'private Set<Obra> _obras' da classe 'Criador' não substitui os métodos hashCode e equals. [WriteClassStructure]
Auditoria completa.

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

Iniciando a auditoria...
[ERROR] Nível de acesso incorrecto (protected) nos seguintes membros '[avanca]' da classe 'Dia' dado que não envolve o mecanismo de herança [WriteClassStructure]
Auditoria completa.
O Checkstyle terminou com 1 erros.

####  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: 2, dos quais 0 private, 0 package-private, 0 protected e 2 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (2): '[tipoUtente, 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 (8): '[Utente, Parser, Dvd, Livro, LibraryManager, Library, Dia, Criador]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (8): '[UserNotFoundException, MissingFileAssociationException, WorkNotFoundException, UnavailableFileException, ImportFileException, UnrecognizedEntryException, EmptyNameException, CreatorNotFoundException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 72, dos quais 4 private, 7 package-private, 1 protected e 60 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 33, dos quais 33 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 tipoUtente ( public )

 [WriteClassStructure]
[INFO] enum Categoria ( public )

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

    private String _categoria

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

    public String toString()

 [WriteClassStructure]
[INFO] class Utente ( public implements Serializable, Comparable<Utente> )

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

    private int _id
    private String _nome
    private String _email
    private boolean _atividade
    private int _multa
    private tipoUtente _tipo

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

    public int compareTo(Utente utente)
    public boolean equals(Object obj)
    public int hashCode()
    public String utenteString()
    public int getId()

 [WriteClassStructure]
[INFO]  abstract class Obra ( public implements Comparable<Obra>, Serializable )

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

    private int _id
    private int _price
    private int _numberOfCopies
    private String _title
    private Categoria _categoria
    private int _disponiveis

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

    public int compareTo(Obra obra)
    public int getPrice()
    public int getCopies()
    public int getDisponiveis()
    public String getTitle()
    public int getId()
    public Categoria getCategoria()
    public abstract String toString()
    public String getDescription()
    public void changeCopies(Obra obra, int copies)

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

   Method toString() overriden in subclass(es) Dvd Livro 
 [WriteClassStructure]
[INFO] class Parser (  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 Dvd ( public )
  extends Obra

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

    private String _igac
    private Criador _realizador

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

    public Criador getcriador()
    public String toString()

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

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

    private String _isbn
    private List<Criador> _creators

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

    public String toString()
    public String getAllCriadores()

 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private Library _library

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

    public Dia getData()
    public void avancaData(int n)
    public String getFilename()
    public boolean getHasFilename()
    public Boolean getIsModified()
    public void setIsModified(boolean bool)
    public int registaUtente(String nome, String email)
    public Utente getUtente(int id)
    public List<Utente> getUtentes()
    public String getAllUtenteString()
    public Obra addLivro(String title, int price, Categoria categoria, int copies, String isbn, List criadores)
    public Obra addDvd(String title, int price, Categoria categoria, int copies, String igac, Criador realizador)
    public Obra getObra(int id)
    public String getAllObrasString()
    public Set<Obra> getObrasCriador(String nome)
    public String getObrasCriadorString(String nome)
    public Criador addCriador(String nome)
    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 _nextUtenteId
    private int _nextObraId
    private int _numUtentes
    private int _numObras
    private Dia _dia
    private boolean _hasFilename
    private Parser _parser
    private String _filename
    private boolean _isModified
    private Map<Integer, Obra> _obras
    private Set<Utente> _utentes
    private Map<String, Criador> _criadores

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

    public Dia getData()
    public void avancaData(int n)
    void setHasFilename(boolean bool)
    void setFilename(String filename)
    public boolean getHasFilename()
    public String getFilename()
    public boolean getIsModified()
    public void setIsModified(boolean bool)
    public int registaUtente(String nome, String email)
    public Utente getUtente(int id)
    public List<Utente> getUtentes()
    public String getAllUtenteString()
    public Obra addLivro(String title, int price, Categoria categoria, int copies, String isbn, List criadores)
    public Obra addDvd(String title, int price, Categoria categoria, int copies, String igac, Criador realizador)
    public Obra getObra(int id)
    public String getAllObrasString()
    public Set<Obra> getObrasCriador(String nome)
    public String getObrasCriadorString(String nome)
    public Criador addCriador(String nome)
    void importFile(String filename)

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

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

    private int _dia

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

    public int getDia()
    public String diaString()
    protected void avanca(int n)

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

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

    private String _nome
    private Set<Obra> _obras

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

    void add(Obra obra)
    void remove(Obra obra)
    public String getNome()
    Set<Obra> obras()

 [WriteClassStructure]
Auditoria completa.
