

####    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] 021/bci/core/MyParser.java:59:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.
Total de erros:  1


####    Quebra do encapsulamento


Nada a assinalar


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


[ERROR] 021/bci/core/Book.java:22:9: Utilização de um ciclo 'while' para iterar o conteúdo da lista referenciada por 'creators' (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:  1


####    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] 021/bci/core/LibraryManager.java:131 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 021/bci/core/LibraryManager.java:159 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] 021/bci/core/MyParser.java:27 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] 021/bci/core/Work.java:48 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão '_category' 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


Nada a assinalar


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

Iniciando a auditoria...
[ERROR] 021/bci/core/Work.java:97 Membro estático 'public static Category fromString(String s)' não recomendável. [POStaticMember]
[INFO] 021/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 '18'. [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


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

Iniciando a auditoria...
[ERROR] O método'setDescription' está a ser substituído em todas as classes derivadas de 'Work' pelo que deve ser abstracto'. [WriteClassStructure]
Auditoria completa.
O Checkstyle terminou com 1 erros.

####  Sumário das classes do core da aplicação

Iniciando a auditoria...
[INFO] Número total de enumerados definidos no core: 3, dos quais 0 private, 3 package-private, 0 protected e 0 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (3): '[UserBehaviour, Status, Category]'. [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, Request, Creator, Notification, Date, Dvd, Book, MyParser, 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): 82, dos quais 4 private, 2 package-private, 0 protected e 76 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 UserBehaviour (  )

 [WriteClassStructure]
[INFO] enum Status (  )

 [WriteClassStructure]
[INFO] enum Category (  )

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

    public static Category fromString(String s)

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

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

    private int _id
    private boolean _isActive
    private String _name
    private String _email
    private int _fine
    private Status _status
    private UserBehaviour _behaviour
    private Collection<Notification> _notifications

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

    public int getId()
    public String getName()
    public String getEmail()
    public int getFine()
    public void setId(int id)
    public void setName(String name)
    public void setEmail(String email)
    public void setFine(int fine)
    public boolean isActive()
    public String toString()
    public Collection<Notification> getNotifications()

 [WriteClassStructure]
[INFO] class Request ( public )

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

    private int _deadline
    private User _user
    private Work _work

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

    public int getDeadline()
    public void setDeadline(int deadline)

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

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

    private String _name
    private Collection<Work> _works

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

    public String getName()
    public void setName(String name)
    public void add(Work work)
    public void remove(Work work)
    public Collection<Work> works()

 [WriteClassStructure]
[INFO] class Notification ( public )

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

    private String _message

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

    public String toString()
    public String getMessage()
    public void setMessage(String message)

 [WriteClassStructure]
[INFO] class Date ( public implements java.io.Serializable )

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

    private int _currentDate

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

    public int getCurrentDate()
    public void advanceDays(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 getNomeDirector()
    public String toString()
    public String setDescription()

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

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

    private String _isbn
    private Collection<Creator> _authors

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

    public String getAuthors()
    public String getisbn()
    public void setIsbn(String isbn)
    public String toString()
    public String setDescription()

 [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 int _id
    private int _price
    private int _numberOfCopies
    private String _title
    private Category _category

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

    public int getId()
    public int getPrice()
    public int getNumberCopies()
    public String getTitle()
    public Category getCategory()
    public String getCategoriaTraduzida()
    public void setId(int id)
    public void setPrice(int price)
    public void setNumberCopies(int number)
    public void setTitle(String title)
    public void setCategory(Category category)
    public String setDescription()
    public abstract String toString()

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

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

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

    private Library _library
    private String _filename

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

    public User getUser(int id)
    public Work getWork(int id)
    public Creator getCreator(String name)
    public Collection<User> getUsers()
    public Collection<Work> getWorks()
    public Collection<Creator> getCreators()
    public int getCurrentDate()
    public void advanceDays(int nDays)
    public void registerUser(String userName, String email)
    public int getNextUserId()
    public int getNextWorkId()
    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 int _nextWorkId
    private int _nextUserId
    private boolean _modified
    private Date _date
    private Collection<Rule> _rules
    private Collection<Creator> _creators
    private Collection<Work> _works
    private Collection<Request> _requests
    private Collection<User> _users

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

    public int getCurrentDate()
    public void advanceDays(int nDays)
    public int getNextUserId()
    public int getNextWorkId()
    public User getUser(int id)
    public Collection<User> getUsers()
    public Work getWork(int id)
    public Collection<Work> getWorks()
    public Creator getCreator(String name)
    public Collection<Creator> getCreators()
    public User registerUser(String userName, String email)
    public Work registerDvd(String title, Creator author, int price, Category category, String igac, int nCopies)
    public Work registerBook(String title, List authors, int price, Category category, String isbn, int nCopies)
    public Creator registerCreator(String nome)
    void importFile(String filename)

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

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

    private final int _id

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

    public int getId()

 [WriteClassStructure]
Auditoria completa.
