

####    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] 023/bci/app/main/DoSaveFile.java:45:	AvoidThrowingRawExceptionTypes:	Deve evitar a criação de excepções demasiado genéricas.
Total de erros:  1


####    Quebra do encapsulamento


[ERROR] 023/bci/core/Library.java:147:	MethodReturnsFieldCollectionRule:	Possível quebra de encapsulamento na classe Library com o método getWorks a devolver um Map
Total de erros:  1


####    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] 023/bci/core/LibraryManager.java:21:20: O atributo com o nome 'associatedFile'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 023/bci/core/date/Date.java:10:17: O atributo com o nome 'currentDate'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
Total de erros:  2

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

Iniciando a auditoria...
[INFO] 023/bci/core/LibraryManager.java:67 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 023/bci/core/LibraryManager.java:94 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] 023/bci/core/ImportFileParser.java:31 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] 023/bci/core/work/Book.java:31 uso desnecessário de super para invocar método 'getGeneralDescription' da super classe. [AvoidUselessSuper]
[WARN] 023/bci/core/work/Dvd.java:25 uso desnecessário de super para invocar método 'getGeneralDescription' 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] 023/bci/core/exception/ImportFileException.java:7 Atributo estático final 'String ERROR_MESSAGE' permitido. [POStaticMember]
[ERROR] 023/bci/core/user/User.java:15 Membro estático 'int _nextId' não recomendável. [POStaticMember]
[ERROR] 023/bci/core/work/Work.java:12 Membro estático 'int _nextId' não recomendável. [POStaticMember]
[INFO] O número de serialVersionUID atributos estáticos definidos nas várias classes foi '23'. [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

Iniciando a auditoria...
[WARN] Possível erro: A classe 'User' utilizada no atributo 'private final 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 '[self]' da classe 'Builder' 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: 4, dos quais 0 private, 0 package-private, 0 protected e 4 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (4): '[NotificationType, UserClassification, WorkCategory, WorkType]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 19, dos quais 0 private, 0 package-private, 0 protected e 19 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 (10): '[User, ImportFileParser, Builder, Creator, Date, Notification, Dvd, Book, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (8): '[MissingFileAssociationException, NoSuchWorkWithIdException, UnavailableFileException, ImportFileException, NoSuchCreatorWithIdException, UnrecognizedEntryException, NoSuchUserWithIdException, InvalidArgumentsException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 50, dos quais 4 private, 6 package-private, 2 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 NotificationType ( public )

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

    private final String _label

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserClassification ( public )

 [WriteClassStructure]
[INFO] enum WorkCategory ( public )

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

    private final String _label

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

    public String toString()

 [WriteClassStructure]
[INFO] enum WorkType ( public )

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

    private final String _label

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

    public String toString()

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

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

    private static int _nextId
    private final int _id
    private final String _name
    private final String _email
    private boolean _isActive
    private UserClassification _classification
    private List<Notification> _notifications
    private int _totalFines

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

    public int getId()
    public String getName()
    public boolean isActive()
    public List<Notification> getNotifications()
    public int compareTo(User other)
    public boolean equals(Object obj)
    public String toString()

 [WriteClassStructure]
[INFO] class ImportFileParser ( public )

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

    private final Library _library

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

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

 [WriteClassStructure]
[INFO] class Builder ( public, static )
  extends Work.Builder

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

    private String _isbn
    private List<Creator> _authors

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

    public Builder isbn(String isbn)
    public Builder authors(List authors)
    protected Builder self()
    public Book build()

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

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

    private final String _name
    private final List<Work> _works

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

    public String getName()
    public List<Work> getWorks()
    public void addWork(Work work)
    public boolean equals(Object obj)

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

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

    private int currentDate

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

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

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

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

    private final NotificationType _type
    private final Work _associatedWork

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

    public String toString()

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

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

    private final String _igac
    private final Creator _director

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

    public String toString()

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

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

    private final String _isbn
    private final List<Creator> _authors

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

    public String toString()

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

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

    private static int _nextId
    private final int _id
    private final String _title
    private final int _price
    private final WorkCategory _category
    private int _totalCopies
    private int _availableCopies
    private final WorkType _type

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

    public int getId()
    public String getTitle()
    protected String getGeneralDescription()
    public boolean equals(Object obj)
    public abstract String toString()

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

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

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

    private Library _library
    private String associatedFile
    private boolean _firstSave

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

    public Library getLibrary()
    public boolean hasAssociatedFile()
    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 final Date _currentDate
    private final Set<User> _users
    private final Map<Integer, User> _usersById
    private final Map<Integer, Work> _works
    private final Map<String, Creator> _creators
    private boolean _modified

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

    public Date getCurrentDate()
    public void advanceDate(int days)
    public User registerUser(String name, String email)
    public User getUserById(int id)
    public Set<User> getUsers()
    public Work getWorkById(int id)
    public Map<Integer, Work> getWorks()
    public Creator getCreatorByName(String name)
    Book registerBook(. bookBuilder)
    Dvd registerDvd(. dvdBuilder)
    Creator registerCreator(String name)
    public boolean isModified()
    void setToUnmodified()
    void importFile(String filename)

 [WriteClassStructure]
Auditoria completa.
