

####    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] 059/bci/core/MyParser.java:61:	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)

[ERROR] 059/bci/core/MyParser.java:61:	EmptyCatchBlock:	Evitar blocos catch vazios.
Total de erros:  2


####    Quebra do encapsulamento


Nada a assinalar


####    Verificaçao do princípio de desenho Programar para o supertipo


[INFO] 059/bci/core/Book.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro Book.java.
[INFO] 059/bci/core/Creator.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro Creator.java.
[INFO] 059/bci/core/Library.java:0:	POLooseCouplingRule:	Aplicação correcta (11) e incorrecta (0) do princípio Programar para abstracção no ficheiro Library.java.
[INFO] 059/bci/core/User.java:0:	POLooseCouplingRule:	Aplicação correcta (4) e incorrecta (0) do princípio Programar para abstracção no ficheiro User.java.
[INFO] 059/bci/core/Work.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro Work.java.
Total de erros:  0


####    Verificação de fugas de privacidade


[ERROR] 059/bci/core/Book.java:32:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe Book - atribui parâmetro (creators) a atributo (this._creators)
[ERROR] 059/bci/core/Library.java:330:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe Library - devolve atributo (_rules) em método público (getRules)
[ERROR] 059/bci/core/User.java:114:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe User - devolve atributo (_requests) em método público (getRequests)
[ERROR] 059/bci/core/User.java:224:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe User - devolve atributo (_notifications) em método público (getNotifications)
[ERROR] 059/bci/core/Work.java:97:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe Work - devolve atributo (_requests) em método público (getRequests)
Total de erros:  5
Total de fugas evitadas:        0


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


[WARN] 059/bci/app/request/DoReturnWork.java:28:	ExcessiveMethodLength:	Evitar métodos com um corpo grande.
Total de erros:  0


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


[WARN] 059/bci/core/User.java:57:45: Parâmetro/variável local '_email' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 059/bci/core/User.java:71:45: Parâmetro/variável local '_email' esconde atributo da classe com o mesmo nome [HiddenField]
Total de erros:  0


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

[ERROR] 059/bci/core/User.java:22:17: O atributo com o nome 'behaviorScore'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 059/bci/core/User.java:57:45: O parâmetro '_email' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
[ERROR] 059/bci/core/User.java:71:45: O parâmetro '_email' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
Total de erros:  3

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

Iniciando a auditoria...
[INFO] 059/bci/core/LibraryManager.java:43 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 059/bci/core/LibraryManager.java:60 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] 059/bci/core/CheckNumberOfRequests.java:8 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'u.getBehavior()' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 059/bci/core/MyParser.java:30 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] 059/bci/core/Request.java:68 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'user.getBehavior()' comparada '9' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
Auditoria completa.

####  Verificação de dependência app de core

Iniciando a auditoria...
[ERROR] 059/bci/app/request/DoRequestWork.java:39 Instanciação de classe do domínio 'Notification' não permitido na camada da aplicação. [POCreateCoreEntitiesInApp]
Auditoria completa.
O Checkstyle terminou com 1 erros.

####  Verificação do uso desnecessário de super


Nada a assinalar


####  Verificação de dependência de core de app

Iniciando a auditoria...
[WARN] 059/bci/core/Library.java:3 import 'bci.app.exception.BorrowingRuleFailedException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 059/bci/core/Library.java:4 import 'bci.app.exception.NoSuchUserException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 059/bci/core/Library.java:5 import 'bci.app.exception.NoSuchWorkException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 059/bci/core/Library.java:6 import 'bci.app.exception.WorkNotBorrowedByUserException' não permitido na classe 'Library'. [POCoreImport]
[ERROR] 059/bci/core/Library.java:178 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]
[ERROR] 059/bci/core/Library.java:188 instanciação do tipo 'BorrowingRuleFailedException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 059/bci/core/Library.java:222 Classe 'WorkNotBorrowedByUserException', 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] 059/bci/core/Library.java:225 instanciação do tipo 'WorkNotBorrowedByUserException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 059/bci/core/Library.java:265 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] 059/bci/core/Library.java:272 instanciação do tipo 'NoSuchUserException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 059/bci/core/Library.java:281 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] 059/bci/core/Library.java:288 instanciação do tipo 'NoSuchWorkException' não permitido em classes da camada de domínio. [POCoreImport]
Auditoria completa.
O Checkstyle terminou com 8 erros.

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

Iniciando a auditoria...
[INFO] 059/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 0 private, 0 package-private, 0 protected e 2 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (2): '[Category, Behavior]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 21, dos quais 0 private, 1 package-private, 0 protected e 20 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 (15): '[CheckWorkIsAvailable, User, CheckUserSuspended, Request, Creator, CheckNumberOfRequests, Notification, CheckRequestTwice, Dvd, Book, CheckBookPrice, MyParser, LibraryManager, Library, CheckCategoryReference]'. [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): 89, dos quais 4 private, 11 package-private, 0 protected e 74 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 41, dos quais 33 private, 0 package-private, 8 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()
    public String toString()
    public String toString()

 [WriteClassStructure]
[INFO] enum Behavior ( public )

 [WriteClassStructure]
[INFO] class CheckWorkIsAvailable ( public implements java.io.Serializable )
  extends Rule

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

    boolean check(Work w, User u)

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

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

    private int _id
    private boolean _isActive
    private String _name
    private String _email
    private int _fine
    private Behavior _behavior
    private List<Request> _requests
    private List<Notification> _notifications
    private int behaviorScore

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

    public boolean isActive()
    public String toString()
    public int getID()
    public String getName()
    public boolean getIsActive()
    public List<Request> getRequests()
    public Behavior getBehavior()
    public void addRequest(Request request)
    public void removeRequest(Request request)
    public void payFine()
    public int getBehaviorScore()
    public void setBehaviorScore(int score)
    public void setBehavior(Behavior behavior)
    public int getFine()
    public void setFine(int amount)
    public void setActivity(Boolean status)
    public boolean hasThisRequest(Request req)
    public List<Notification> getNotifications()

 [WriteClassStructure]
[INFO] class CheckUserSuspended ( public implements java.io.Serializable )
  extends Rule

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

    boolean check(Work w, User u)

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

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

    private int _deadline
    private User _user
    private Work _work
    private int _fine

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

    public User getUser()
    public Work getWork()
    public int getDeadline()
    public void setFine(int fine)
    public int getFine()

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

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

    private String _name
    private List<Work> _works

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

    public String toString()
    public void addWork(Work work)
    public List<Work> getWorks()

 [WriteClassStructure]
[INFO] class CheckNumberOfRequests ( public implements java.io.Serializable )
  extends Rule

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

    boolean check(Work w, User u)

 [WriteClassStructure]
[INFO] class Notification ( public )

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

    private User _user
    private Work _work

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

    public String toString()
    public User getUser()
    public Work getWork()

 [WriteClassStructure]
[INFO] class CheckRequestTwice ( public implements java.io.Serializable )
  extends Rule

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

    boolean check(Work w, User u)

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

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

    private String _igac
    private Creator _creator

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

    public String toString()
    public String getCreator()

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

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

    private String _isbn
    private List<Creator> _creators

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

    public String toString()
    public String getCreator()

 [WriteClassStructure]
[INFO] class CheckBookPrice ( public implements java.io.Serializable )
  extends Rule

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

    boolean check(Work w, User u)

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

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

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

    public int getId()
    public String getTitle()
    public int getNumberOfCopies()
    public int getNumberOfCopiesAvailable()
    public abstract String getCreator()
    public abstract String toString()
    public void changeNumberOfCopies(int nCopies)
    public void changeNumberOfAvailableCopies(int nCopies)
    public List<Request> getRequests()
    public Category getCategory()
    public int getPrice()
    public void addRequest(Request request)
    public void removeRequest(Request request)

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

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

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

    private Library _library
    private int _currentDate
    private String _currentFilename

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

    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public User registerUser(String userName, String email)
    public void importFile(String datafile)
    public int getCurrentDate()
    void advanceDay(int nDays)
    public Library getLibrary()
    public void advanceDate(int nDays)
    public String getCurrentFilename()

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

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

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

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

    void advanceDay(int nDays)
    public User registerUser(String userName, String email)
    public Dvd registerDvd(int price, Category category, int numberOfCopies, String title, String igac, Creator creator)
    public Book registerBook(String title, List creators, int price, Category category, String isbn, int nCopies)
    public Creator registerCreator(String name)
    public List<Work> getWorks()
    public List<User> getUsers()
    public List<Creator> getCreators()
    public int getCurrentDate()
    public void doRequest(User user, Work work)
    public Request findRequest(User user, Work work)
    public void returnWork(User user, Work work)
    public void payFine(User user)
    public void changeInventory(Work work, int nCopies)
    public User getUser(String userId)
    public Work getWork(String workId)
    public void removeWork(Work work)
    void importFile(String filename)
    public List<Rule> getRules()
    public List<Notification> getNotificationsForWork(Work work)

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

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

    protected int _id

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

    abstract boolean check(Work w, User u)
    public int getId()

  ###### Subclasses  ###### 
    CheckWorkIsAvailable   CheckUserSuspended   CheckNumberOfRequests   CheckRequestTwice   CheckBookPrice   CheckCategoryReference   

   Method check(Work, User) overriden in subclass(es) CheckWorkIsAvailable CheckUserSuspended CheckNumberOfRequests CheckRequestTwice CheckBookPrice CheckCategoryReference 
 [WriteClassStructure]
[INFO] class CheckCategoryReference ( public implements java.io.Serializable )
  extends Rule

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

    boolean check(Work w, User u)

 [WriteClassStructure]
Auditoria completa.
