

####    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] 033/bci/app/user/DoRegisterUser.java:28:	AvoidRethrowingException:	Deve evitar o uso de um bloco catch que apenas apanha a excepção para relançar outra excepção do mesmo tipo

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

[ERROR] 033/bci/app/main/DoAdvanceDate.java:23:	EmptyCatchBlock:	Evitar blocos catch vazios.
[ERROR] 033/bci/app/main/DoOpenFile.java:42:	EmptyCatchBlock:	Evitar blocos catch vazios.
[ERROR] 033/bci/core/LibraryManager.java:131:	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


[ERROR] 033/bci/core/Library.java:104:7: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por 'sortedWorks' (do tipo 'List<Work>'). 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]
[ERROR] 033/bci/core/Library.java:211:7: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por 'creatorWorks' (do tipo 'List<Work>'). 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]
[ERROR] 033/bci/core/Book.java:29:9: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por '_authors' (do tipo 'List<Creator>'). 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]
Total de erros:  3


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


Nada a assinalar


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

Nada a assinalar

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

Iniciando a auditoria...
[INFO] 033/bci/core/LibraryManager.java:79 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 033/bci/core/LibraryManager.java:100 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 033/bci/core/LibraryManager.java:121 ObjectInputStream criado no método 'public void load(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[ERROR] Número errado de instâncias criadas de 'ObjectOutputStream'. Devia ser 1 e é '2'. [CheckSerialization]
Auditoria completa.
O Checkstyle terminou com 1 erros.

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

Iniciando a auditoria...
[WARN] 033/bci/core/Parser.java:30 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] 033/bci/core/Book.java:38 uso desnecessário de super para invocar método 'getCategory' da super classe. [AvoidUselessSuper]
[WARN] 033/bci/core/Dvd.java:29 uso desnecessário de super para invocar método 'getCategory' da super classe. [AvoidUselessSuper]
Auditoria completa.

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

Iniciando a auditoria...
[WARN] 033/bci/core/Library.java:3 import 'bci.app.exception.UserRegistrationFailedException' não permitido na classe 'Library'. [POCoreImport]
[ERROR] 033/bci/core/Library.java:136 Classe 'UserRegistrationFailedException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
[WARN] 033/bci/core/LibraryManager.java:3 import 'bci.app.exception.UserRegistrationFailedException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 033/bci/core/LibraryManager.java:6 import 'pt.tecnico.uilib.forms.Form' não permitido na classe 'LibraryManager'. [POCoreImport]
[ERROR] 033/bci/core/LibraryManager.java:44 Classe 'UserRegistrationFailedException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
[WARN] 033/bci/core/Parser.java:10 import 'bci.app.exception.UserRegistrationFailedException' não permitido na classe 'Parser'. [POCoreImport]
Auditoria completa.
O Checkstyle terminou com 2 erros.

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

Iniciando a auditoria...
[ERROR] 033/bci/core/User.java:11 Membro estático 'int _nextId' não recomendável. [POStaticMember]
[ERROR] 033/bci/core/Work.java:11 Membro estático 'int _nextId' não recomendável. [POStaticMember]
[INFO] 033/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 '20'. [POStaticMember]
Auditoria completa.
O Checkstyle terminou com 2 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 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): '[Category, UserBehavior]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 15, dos quais 0 private, 1 package-private, 0 protected e 14 public. [WriteClassStructure]
[INFO] Classes abstractas definidas no package core da aplicação (1): '[Work]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (9): '[User, Creator, Notification, Date, Parser, Dvd, Book, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (5): '[InvalidInputException, MissingFileAssociationException, UnavailableFileException, ImportFileException, UnrecognizedEntryException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 69, dos quais 5 private, 2 package-private, 0 protected e 62 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 30, dos quais 30 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 Category ( public )

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

    private String _category

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserBehavior ( public )

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

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

    private static int _nextId
    private int _id
    private boolean _isActive
    private String _name
    private String _email
    private int _fine
    private UserBehavior _behavior

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

    public int getId()
    public String getName()
    public String getEmail()
    public boolean isActive()
    public int getFine()
    public UserBehavior getBehavior()
    public String toString()

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

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

    private String _name
    private List<Work> _works

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

    public String getName()
    public void addWork(Work work)
    public void removeWork(Work work)
    public List<Work> getWorks()
    public boolean hasWorks()
    public String toString()

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

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

    private String _message

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

    public String getMessage()
    public String toString()

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

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

    private int _currentDate

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

    public int getCurrentDate()
    public void advanceDate(int days)

 [WriteClassStructure]
[INFO] class Parser (  )

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

    private Library _library

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

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

 [WriteClassStructure]
[INFO] class Dvd ( public )
  extends Work

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

    private String _igac
    private Creator _director

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

    public String getIgac()
    public Creator getDirector()
    public String toString()

 [WriteClassStructure]
[INFO] class Book ( public )
  extends Work

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

    private String _isbn
    private List<Creator> _authors

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

    public String getIsbn()
    public List<Creator> getAuthors()
    public String toString()

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

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

    private static int _nextId
    private int _id
    private int _price
    private int _copies
    private String _title
    private Category _category

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

    public int getId()
    public int getCopies()
    public String getTitle()
    public int getPrice()
    public Category getCategory()
    public abstract String toString()

  ###### Subclasses  ###### 
    Dvd   Book   

   Method toString() overriden in subclass(es) Dvd Book 
 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private Library _library

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

    public int getCurrentDate()
    public void advanceDate(int days)
    public String displayWork(int id)
    public String displayWorks()
    public int addUser(String name, String email)
    public String displayUser(int id)
    public String displayUsers()
    public String displayCreatorWorks(String name)
    public boolean hasUnsavedChanges()
    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 String _filename
    private boolean _wasSaved
    private boolean _hasUnsavedChanges
    private Date _currentDate
    private List<Work> _works
    private List<User> _users
    private List<Creator> _creators

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

    public int getCurrentDate()
    public void advanceDate(int days)
    public void addWork(Work work)
    public Work getWork(int id)
    public String displayWork(int id)
    public String displayWorks()
    public User getUser(int id)
    public int addUser(String name, String email)
    public String displayUser(int id)
    public String displayUsers()
    public void addCreator(Creator creator)
    public Creator getCreator(String name)
    public String displayCreatorWorks(String name)
    public String getCurrentFileName()
    public void setCurrentFileName(String filename)
    public boolean getSaveStatus()
    public void changeSaveStatus()
    public boolean hasUnsavedChanges()
    public void markAsModified()
    public void markAsSaved()
    void importFile(String filename)

 [WriteClassStructure]
Auditoria completa.
