

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




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

[ERROR] 035/bci/app/main/DoSaveFile.java:51:	EmptyCatchBlock:	Evitar blocos catch vazios.
[ERROR] 035/bci/app/main/DoSaveFile.java:54:	EmptyCatchBlock:	Evitar blocos catch vazios.
Total de erros:  2


####    Quebra do encapsulamento


Nada a assinalar


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


[WARN] 035/bci/core/Library.java:122:	ExcessiveMethodLength:	Evitar métodos com um corpo grande.
Total de erros:  0


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


Nada a assinalar


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

[ERROR] 035/bci/core/User.java:92:18: O método com o nome '_getNotifications' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
Total de erros:  1

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

Iniciando a auditoria...
[INFO] 035/bci/core/Library.java:77 ObjectOutputStream criado no método 'void save(String filename)' da classe 'Library'. [CheckSerialization]
[INFO] 035/bci/core/Library.java:95 ObjectInputStream criado no método 'static Library load(String filename)' da classe 'Library'. [CheckSerialization]
Auditoria completa.

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

Iniciando a auditoria...
[WARN] 035/bci/core/Library.java:122 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'type' comparada '5' 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] 035/bci/core/Library.java:94 Membro estático 'static Library load(String filename)' não recomendável. [POStaticMember]
[INFO] 035/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.
O Checkstyle terminou com 1 erros.

####  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 'Request' utilizada no atributo 'private Set<Request> _requests' da classe 'User' não substitui os métodos hashCode e equals. [WriteClassStructure]
[WARN] Possível erro: A classe 'Work' utilizada no atributo 'private Set<Work> _works' da classe 'Creator' não substitui os métodos hashCode e equals. [WriteClassStructure]
[WARN] Possível erro: A classe 'Creator' utilizada no atributo 'private Set<Creator> _creators' da classe 'Book' não substitui os métodos hashCode e equals. [WriteClassStructure]
[WARN] Possível erro: A classe 'Creator' utilizada no atributo 'private Set<Creator> _creators' da classe 'Library' não substitui os métodos hashCode e equals. [WriteClassStructure]
[WARN] Possível erro: A classe 'Work' utilizada no atributo 'private Set<Work> _works' da classe 'Library' não substitui os métodos hashCode e equals. [WriteClassStructure]
[WARN] Possível erro: A classe 'User' utilizada no atributo 'private Set<User> _users' da classe 'Library' 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 '[isActive]' da classe 'User' dado que não envolve o mecanismo de herança [WriteClassStructure]
[ERROR] Nível de acesso incorrecto (protected) nos seguintes membros '[getCurrentDate, advanceDay]' da classe 'Date' 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: 14, dos quais 0 private, 0 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, Request, Creator, Notification, Date, 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): 77, dos quais 2 private, 2 package-private, 4 protected e 69 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 31, dos quais 31 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 final String _description

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserBehaviour ( public )

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

    private final String _description

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

    public String toString()

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

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

    private int _id
    private Boolean _isActive
    private String _name
    private String _email
    private int _fine
    private Set<Request> _requests
    private UserBehaviour _behaviour

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

    protected Boolean isActive()
    private void _getNotifications()
    public int getId()
    public String getName()
    public String getEmail()
    public int getFine()
    public Set<Request> requests()
    public String toString()

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

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

    private int _deadline

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

    public int deadline()

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

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

    private String _name
    private Set<Work> _works

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

    public String name()
    public void addWork(Work work)
    public void removeWork(Work work)
    public Set<Work> works()
    public String toString()

 [WriteClassStructure]
[INFO] class Notification ( public )

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

    private String _message
    private String _type

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

    public String getMessage()

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

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

    private int _currentDate

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

    protected int getCurrentDate()
    protected void advanceDay(int nDays)

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

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

    private String _igac
    private Creator _director

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

    public String getIgac()
    public void setIgac(String igac)
    public String toString()
    public String getIdentifier()
    public Set<Creator> getCreators()

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

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

    private String _isbn
    private Set<Creator> _creators

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

    public String getIsbn()
    public void setIsbn(String isbn)
    public String listCreatorsString()
    public String toString()
    public String getIdentifier()
    public Set<Creator> getCreators()

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

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

    private int _id
    private int _price
    private int _numberOfCopies
    private String _title
    private Category _category
    private List<Request> _requests

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

    public int getId()
    public int getPrice()
    public int getNumberOfCopies()
    public String getTitle()
    public Category getCategory()
    public void setPrice(int price)
    public void setNumberOfCopies(int numberOfCopies)
    public void setTitle(String title)
    public void setCategory(Category category)
    protected String getDescription()
    public List<Request> getRequests()
    public void addRequest(Request request)
    public void deleteRequest(Request request)
    public abstract String toString()
    public abstract String getIdentifier()
    public abstract Set<Creator> getCreators()

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

   Method toString() overriden in subclass(es) Dvd Book 
   Method getIdentifier() 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 date()
    public int getCurrentDate()
    public String displayWorks()
    public void displayWork(Work work)
    public Work getWorkById(int id)
    public String showUser(int id)
    public String listUsers()
    public void advanceDate(int nDays)
    public int registerUser(String name, String email)
    public Set<Work> getWorksByCreator(String name)

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

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

    private Date _date
    private Set<Creator> _creators
    private Set<Work> _works
    private Set<User> _users
    private int _nextWorkId
    private int _nextUserId

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

    void save(String filename)
    static Library load(String filename)
    public void importFile(String filename)
    private Creator findOrCreateCreator(String name)
    public Date date()
    public String displayWorks()
    public void displayWork(Work work)
    public Work getWork(int id)
    public int getWorksCount()
    public int getCreatorsCount()
    public Work getWorkById(int id)
    public Set<User> getUsers()
    public String listUsers()
    public User getUserById(int id)
    public String showUser(int id)
    public String notificationMessage(Work work, User user, String type)
    public void advanceDate(int nDays)
    public int registerUser(String name, String email)
    public Set<Work> getWorksByCreator(String creatorName)

 [WriteClassStructure]
Auditoria completa.
