

####    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] 034/bci/app/main/DoSaveFile.java:23:	AvoidThrowingRawExceptionTypes:	Deve evitar a criação de excepções demasiado genéricas.
[ERROR] 034/bci/app/user/DoShowUser.java:24:	AvoidThrowingNewInstanceOfSameException:	Deve evitar blocos catch que apenas apanham uma excepção apenas para a relançar.
Total de erros:  2


####    Quebra do encapsulamento


Nada a assinalar


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


[WARN] 034/bci/app/user/DoShowUsers.java:23:	ForLoopCanBeForeach:	Este ciclo for pode ser substituído por um ciclo foreach
[WARN] 034/bci/app/work/DoDisplayWorks.java:23:	ForLoopCanBeForeach:	Este ciclo for pode ser substituído por um ciclo foreach
[WARN] 034/bci/app/work/DoDisplayWorksByCreator.java:22:	ForLoopCanBeForeach:	Este ciclo for pode ser substituído por um ciclo foreach
[ERROR] 034/bci/app/user/DoShowUsers.java:23:3: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por 'listUsers' (do tipo 'List<User>'). 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] 034/bci/app/work/DoDisplayWorks.java:23:5: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por 'listWorks' (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] 034/bci/app/work/DoDisplayWorksByCreator.java:22:7: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por 'workList' (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]
Total de erros:  3


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


[WARN] 034/bci/core/Category.java:10:21: Parâmetro/variável local 'displayName' esconde atributo da classe com o mesmo nome [HiddenField]
Total de erros:  0


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

[ERROR] 034/bci/core/Category.java:8:26: O atributo com o nome 'displayName'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 034/bci/core/Book.java:19:22: A variável local com o nome '_creator'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
Total de erros:  2

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

Iniciando a auditoria...
[INFO] 034/bci/core/LibraryManager.java:36 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 034/bci/core/LibraryManager.java:70 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] 034/bci/core/Parser.java:29 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

Iniciando a auditoria...
[WARN] 034/bci/core/Library.java:3 import 'bci.app.exception.NoSuchCreatorException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 034/bci/core/Library.java:4 import 'bci.app.exception.NoSuchUserException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 034/bci/core/Library.java:5 import 'bci.app.exception.NoSuchWorkException' não permitido na classe 'Library'. [POCoreImport]
[ERROR] 034/bci/core/Library.java:114 Classe 'NoSuchUserException', 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]
[ERROR] 034/bci/core/Library.java:120 instanciação do tipo 'NoSuchUserException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 034/bci/core/Library.java:129 Classe 'NoSuchWorkException', 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]
[ERROR] 034/bci/core/Library.java:135 instanciação do tipo 'NoSuchWorkException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 034/bci/core/Library.java:144 Classe 'NoSuchCreatorException', 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]
[ERROR] 034/bci/core/Library.java:150 instanciação do tipo 'NoSuchCreatorException' não permitido em classes da camada de domínio. [POCoreImport]
[WARN] 034/bci/core/LibraryManager.java:3 import 'bci.app.exception.*' não permitido na classe 'LibraryManager'. [POCoreImport]
[ERROR] 034/bci/core/LibraryManager.java:110 Classe 'NoSuchUserException', 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]
[ERROR] 034/bci/core/LibraryManager.java:126 Classe 'NoSuchWorkException', 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]
[ERROR] 034/bci/core/LibraryManager.java:134 Classe 'NoSuchCreatorException', 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]
Auditoria completa.
O Checkstyle terminou com 9 erros.

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

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


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 1 private, 1 package-private, 0 protected e 0 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (2): '[Category, UserBehavior]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 16, dos quais 0 private, 1 package-private, 0 protected e 15 public. [WriteClassStructure]
[INFO] Classes abstractas definidas no package core da aplicação (2): '[Work, Rule]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (10): '[User, Creator, Requests, Notification, Date, Parser, Dvd, Book, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (4): '[MissingFileAssociationException, UnavailableFileException, ImportFileException, UnrecognizedEntryException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 70, dos quais 4 private, 23 package-private, 0 protected e 43 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 35, dos quais 35 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 (  )

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

    private final String displayName

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserBehavior ( private )

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

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

    private final int _id
    private boolean _ativo
    private final String _nome
    private final String _email
    private final ArrayList<Notification> _notificacoes
    private UserBehavior _comportamento
    private final ArrayList<Requests> _requests
    private int _fine

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

    boolean isActive()
    public int getId()
    public boolean hasBorrowedWork(Work work)
    void updateFine(Date currentDate)
    public String toString()
    public ArrayList<Notification> getNotifications()

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

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

    private final 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 equals(Object obj)
    public int hashCode()
    public String toString()

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

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

    private final int _deadline
    private List<Work> _works

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

    public List<Work> getWorks()
    public int getDeadline()

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

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

    private String _mensagem

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

    public String toString()

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

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

    private int _data

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

    public int getCurrentDate()
    public void advanceDate(int dias)

 [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 void parseDvd(String components, String line)
    private void parseBook(String components, String line)

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

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

    private final String _igac
    private final Creator _creator

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

    public void linkCreator()
    public String toString()
    public List<Creator> getCreators()

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

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

    private final String _isbn
    private final Creator[] _creators

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

    public void linkCreators()
    public String toString()
    public List<Creator> getCreators()

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

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

    private int _id
    private int _preco
    private int _copias
    private String _titulo
    private Category _categoria
    private List<Requests> _requests

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

    List<Requests> getRequests()
    int getCopies()
    int getId()
    String getTitle()
    int getPreco()
    Category getCategoria()
    public int getAvailableCopies()
    public abstract String toString()
    public abstract List<Creator> getCreators()

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

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

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

    private Library _library
    private String _filename

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

    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String datafile)
    public Date getCurrentDate()
    public void advanceDays(int nDays)
    public int registerUser(String userName, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public void registerBook(int price, String title, int nCopies, Category category, String isbn, List creators)
    public void registerDvd(int price, String title, int nCopies, Category category, String igac, Creator creator)
    public Work getWork(int id)
    public List<Work> getWorks()
    public List<Work> displayWorksByCreator(String creatorName)
    public Boolean modified()
    public String getFilename()

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

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

    private final Date _data
    private int _nextWorkId
    private int _nextUserId
    private Boolean _modified
    private final ArrayList<User> _users
    private final ArrayList<Work> _works
    private final ArrayList<Creator> _creators

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

    void importFile(String filename)
    Date getCurrentDate()
    void setSaved()
    Boolean modified()
    void advanceDays(int nDays)
    Creator registerCreator(String name)
    Book registerBook(int price, String title, int nCopies, Category category, String isbn, List creators)
    Dvd registerDvd(int price, String title, int nCopies, Category category, String isbn, Creator creator)
    User registerUser(String name, String email)
    User getUser(int id)
    List<User> getUsers()
    Work displayWork(int id)
    List<Work> displayWorks()
    List<Work> displayWorksByCreator(String creator)

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

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

    private final int _identificador

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

    public int getIdentificador()
    public abstract boolean check(Work work, User user)

 [WriteClassStructure]
Auditoria completa.
