

####    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] 002/bci/app/main/DoSaveFile.java:36:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.
[ERROR] 002/bci/app/user/DoRegisterUser.java:37:	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] 002/bci/core/LibraryManager.java:100:	IdenticalCatchBranches:	Ramo 'catch' idênticol to ramo 'FileNotFoundException' pertencentes à mesma instrução try.
Total de erros:  2


####    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


Nada a assinalar


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

[ERROR] 002/bci/app/user/DoRegisterUser.java:27:12: A variável local com o nome '_name'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 002/bci/app/user/DoRegisterUser.java:28:12: A variável local com o nome '_email'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] 002/bci/core/LibraryManager.java:52 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 002/bci/core/LibraryManager.java:73 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 002/bci/core/LibraryManager.java:94 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] 002/bci/core/Category.java:23 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'this' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 002/bci/core/Parser.java:36 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]
[WARN] 002/bci/core/UserBehaviour.java:24 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'this' 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] 002/bci/core/Library.java:5 import 'bci.app.exception.NoSuchCreatorException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 002/bci/core/Library.java:6 import 'bci.app.exception.NoSuchWorkException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 002/bci/core/Library.java:7 import 'bci.app.exception.UserRegistrationFailedException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 002/bci/core/Library.java:8 import 'bci.app.exception.NoSuchUserException' não permitido na classe 'Library'. [POCoreImport]
[ERROR] 002/bci/core/Library.java:233 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] 002/bci/core/Library.java:239 instanciação do tipo 'NoSuchUserException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 002/bci/core/Library.java:262 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] 002/bci/core/Library.java:268 instanciação do tipo 'NoSuchWorkException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 002/bci/core/Library.java:290 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] 002/bci/core/Library.java:296 instanciação do tipo 'NoSuchCreatorException' não permitido em classes da camada de domínio. [POCoreImport]
[WARN] 002/bci/core/LibraryManager.java:3 import 'bci.app.exception.NoSuchCreatorException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 002/bci/core/LibraryManager.java:4 import 'bci.app.exception.NoSuchUserException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 002/bci/core/LibraryManager.java:5 import 'bci.app.exception.NoSuchWorkException' não permitido na classe 'LibraryManager'. [POCoreImport]
[ERROR] 002/bci/core/LibraryManager.java:197 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] 002/bci/core/LibraryManager.java:219 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] 002/bci/core/LibraryManager.java:241 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] 002/bci/core/LibraryManager.java:252 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]
[WARN] 002/bci/core/Parser.java:12 import 'bci.app.exception.UserRegistrationFailedException' não permitido na classe 'Parser'. [POCoreImport]
[WARN] 002/bci/core/Rule.java:3 import 'bci.app.exception.BorrowingRuleFailedException' não permitido na classe 'Rule'. [POCoreImport]
[ERROR] 002/bci/core/Rule.java:33 Classe 'BorrowingRuleFailedException', 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 11 erros.

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

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

Iniciando a auditoria...
[ERROR] Nível de acesso incorrecto (protected) nos seguintes membros '[addWork, removeWork, works]' da classe 'Creator' dado que não envolve o mecanismo de herança [WriteClassStructure]
[ERROR] Nível de acesso incorrecto (protected) nos seguintes membros '[getCreatorsAsString]' da classe 'Book' dado que não envolve o mecanismo de herança [WriteClassStructure]
Auditoria completa.
O Checkstyle terminou com 2 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): '[Category, UserBehaviour]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 18, dos quais 0 private, 1 package-private, 0 protected e 17 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, Request, Creator, Notification, Date, Dvd, Book, MyParser, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (6): '[MissingFileAssociationException, UnavailableFileException, ImportFileException, InvalidBookDataException, UnrecognizedEntryException, InvalidUserDataException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 71, dos quais 5 private, 21 package-private, 7 protected e 38 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 37, dos quais 37 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 )

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserBehaviour ( public )

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

    public String toString()

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

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

    private final int _id
    private final String _nome
    private final String _email
    private UserBehaviour _behaviour
    private boolean _isActive
    private int _fine
    private List<Notification> _notifications

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

    public int getId()
    String getNome()
    public boolean isActive()
    public Collection<Notification> getAndClearNotifications()
    public void payFine()
    private String getUserStateString()
    public String toString()

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

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

    private int _deadline
    private Work _work
    private User _user

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

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

    private final String _name
    private Collection<Work> _works

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

    public String getName()
    protected void addWork(Work work)
    protected void removeWork(Work work)
    protected Collection<Work> works()
    public String toString()
    public boolean equals(Object obj)

 [WriteClassStructure]
[INFO] class Notification ( public )

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

    private final String _message

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

    public String toString()

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

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

    private int _currentDate

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

    int getCurrentDate()
    void advanceDays(int nDays)

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

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

    private final Creator _creator
    private final String _igac

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

    public final Creator getCreator()
    public String getIgac()
    protected String getTypeName()
    public String toString()

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

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

    private final List<Creator> _creators
    private final String _isbn

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

    List<Creator> getCreators()
    String getIsbn()
    protected String getTypeName()
    protected String getCreatorsAsString()
    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 parseDvd(String components, String line)
    private void parseBook(String components, String line)

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

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

    private final int _id
    private int _price
    private int _numberOfCopies
    private int _availableCopies
    private final String _title
    private final Category _category

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

    String getDescription()
    public abstract String toString()
    protected abstract String getTypeName()
    public int getId()
    public int getPrice()
    public int getNumberOfCopies()
    public int getAvailableCopies()
    public String getTitle()
    public Category getCategory()

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

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

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

    private String _filename
    private boolean _modified
    private Library _library

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

    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String datafile)
    public boolean isModified()
    public void setFilename(String filename)
    public String getFilename()
    public void advanceDays(int days)
    public int getCurrentDate()
    public int registerUser(String name, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public Work getWork(int workId)
    public List<Work> getWorks()
    public Creator getCreator(String name)
    public List<Work> getWorksByCreator(String name)

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

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

    private int _nextWorkId
    private int _nextUserId
    private List<Work> _works
    private List<Creator> _creators
    private List<User> _users
    private List<Rule> _rules
    private List<Request> _requests
    private Date _date

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

    int getAndIncrementNextWorkId()
    int getAndIncrementNextUserId()
    User registerUser(String name, String email)
    Book registerBook(String title, List creators, int price, Category category, String isbn, int numberOfCopies)
    Dvd registerDvd(String title, Creator creator, int price, Category category, String igac, int numberOfCopies)
    Creator registerCreator(String name)
    void importFile(String filename)
    void advanceDays(int days)
    int getCurrentDate()
    User getUser(int id)
    List<User> getUsers()
    Work getWork(int id)
    List<Work> getWorks()
    Creator getCreator(String name)
    public List<Work> getWorksByCreator(Creator creator)

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

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

    private final int _id

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

    public abstract void check(Work work, User user)

 [WriteClassStructure]
Auditoria completa.
