

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




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

[INFO] 054/bci/app/main/DoOpenFile.java:39:	IdenticalCatchBranches:	Ramo 'catch' idênticol to ramo 'ClassNotFoundException' pertencentes à mesma instrução try.
[INFO] 054/bci/app/main/DoSaveFile.java:40:	IdenticalCatchBranches:	Ramo 'catch' idênticol to ramo 'MissingFileAssociationException' pertencentes à mesma instrução try.
Total de erros:  0


####    Quebra do encapsulamento


Nada a assinalar


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


[INFO] 054/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] 054/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] 054/bci/core/DVD.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (0) do princípio Programar para abstracção no ficheiro DVD.java.
[INFO] 054/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] 054/bci/core/LibraryManager.java:0:	POLooseCouplingRule:	Aplicação correcta (5) e incorrecta (0) do princípio Programar para abstracção no ficheiro LibraryManager.java.
[INFO] 054/bci/core/User.java:0:	POLooseCouplingRule:	Aplicação correcta (7) e incorrecta (0) do princípio Programar para abstracção no ficheiro User.java.
[INFO] 054/bci/core/Work.java:0:	POLooseCouplingRule:	Aplicação correcta (3) 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] 054/bci/core/User.java:48:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe User - devolve atributo (_notifications) em método público (showNotifications)
[INFO] 054/bci/core/Book.java:12:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Book, por atribuição de parâmetro a atributo creators, evitada por criação de cópia (new new ArrayList(creators)) no construtor.
[INFO] 054/bci/core/Book.java:21:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Book evitada por criação de cópia (new ArrayList) de _creators no método getCreators.
[INFO] 054/bci/core/Creator.java:28:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Creator evitada por criação de cópia (new ArrayList) de _works no método getWorks.
[INFO] 054/bci/core/Library.java:76:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Library evitada por criação de cópia (new ArrayList) de _users no método getUsers.
[INFO] 054/bci/core/Library.java:134:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Library evitada por criação de cópia (new ArrayList) de _works no método getAllWorks.
[INFO] 054/bci/core/Library.java:174:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Library evitada por criação de cópia (new ArrayList) de _requests no método getRequests.
[INFO] 054/bci/core/User.java:116:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe User evitada por criação de cópia (new HashSet) de _requests no método getRequests.
[INFO] 054/bci/core/User.java:128:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe User evitada por criação de cópia (new ArrayList) de _requestsHistory no método getHistory.
Total de erros:  1
Total de fugas evitadas:        8


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


Nada a assinalar


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


[WARN] 054/bci/core/Category.java:12:21: Parâmetro/variável local 'label' esconde atributo da classe com o mesmo nome [HiddenField]
Total de erros:  0


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

[ERROR] 054/bci/core/DVD.java:4:14: Abreviações no nome 'DVD' não deveriam conter mais do que '1' letras maiúsculas consecutivas. [AbbreviationAsWordInName]
[ERROR] 054/bci/core/Category.java:10:26: O atributo com o nome 'label'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] 054/bci/core/LibraryManager.java:109 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 054/bci/core/LibraryManager.java:118 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] 054/bci/core/MyParser.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]
[WARN] 054/bci/core/rules/UserHasRequestsRule.java:10 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'status' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
Auditoria completa.

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

Iniciando a auditoria...
[ERROR] 054/bci/app/main/DoOpenFile.java:36 Instanciação de classe do domínio 'UnavailableFileException' 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] 054/bci/core/Library.java:7 import 'bci.app.exception.*' não permitido na classe 'Library'. [POCoreImport]
[ERROR] 054/bci/core/Library.java:79 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] 054/bci/core/Library.java:85 instanciação do tipo 'NoSuchUserException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 054/bci/core/Library.java:124 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] 054/bci/core/Library.java:130 instanciação do tipo 'NoSuchWorkException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 054/bci/core/Library.java:137 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] 054/bci/core/Library.java:149 instanciação do tipo 'NoSuchCreatorException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 054/bci/core/Library.java:186 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] 054/bci/core/Library.java:186 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] 054/bci/core/Library.java:186 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] 054/bci/core/Library.java:204 instanciação do tipo 'BorrowingRuleFailedException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 054/bci/core/Library.java:219 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] 054/bci/core/Library.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] 054/bci/core/Library.java:219 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] 054/bci/core/Library.java:225 instanciação do tipo 'WorkNotBorrowedByUserException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 054/bci/core/Library.java:267 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] 054/bci/core/Library.java:267 Classe 'UserIsActiveException', 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] 054/bci/core/Library.java:275 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] 054/bci/core/Library.java:275 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] 054/bci/core/Library.java:290 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]
[WARN] 054/bci/core/LibraryManager.java:5 import 'bci.app.exception.*' não permitido na classe 'LibraryManager'. [POCoreImport]
[ERROR] 054/bci/core/LibraryManager.java:48 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] 054/bci/core/LibraryManager.java:52 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] 054/bci/core/LibraryManager.java:60 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] 054/bci/core/LibraryManager.java:80 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] 054/bci/core/LibraryManager.java:80 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] 054/bci/core/LibraryManager.java:80 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] 054/bci/core/LibraryManager.java:84 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] 054/bci/core/LibraryManager.java:84 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] 054/bci/core/LibraryManager.java:84 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] 054/bci/core/LibraryManager.java:88 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] 054/bci/core/LibraryManager.java:88 Classe 'UserIsActiveException', 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] 054/bci/core/LibraryManager.java:92 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] 054/bci/core/LibraryManager.java:92 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] 054/bci/core/User.java:4 import 'bci.app.exception.UserIsActiveException' não permitido na classe 'User'. [POCoreImport]
[ERROR] 054/bci/core/User.java:131 Classe 'UserIsActiveException', 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] 054/bci/core/User.java:136 instanciação do tipo 'UserIsActiveException' não permitido em classes da camada de domínio. [POCoreImport]
Auditoria completa.
O Checkstyle terminou com 34 erros.

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

Iniciando a auditoria...
[INFO] 054/bci/core/Library.java:39 Atributo estático final 'Map<UserStatus, LoanStrategy> STRATEGIES' permitido. [POStaticMember]
[ERROR] 054/bci/core/User.java:13 Membro estático 'int _nextId' não recomendável. [POStaticMember]
[INFO] 054/bci/core/User.java:28 Atributo estático final 'Map<UserStatus, UserStatusStrategy> STRATEGIES' permitido. [POStaticMember]
[ERROR] 054/bci/core/Work.java:9 Membro estático 'int _nextId' não recomendável. [POStaticMember]
[INFO] 054/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 '16'. [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 'Request' utilizada no atributo 'private Set<Request> _requests' da classe 'User' não substitui os métodos hashCode e equals. [WriteClassStructure]
Auditoria completa.

####  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] Attribute '_effetiveCopies' specified in superclass 'Work' duplicated in subclass 'DVD'. [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 interfaces definidos no core: 3, dos quais 0 private, 0 package-private, 0 protected e 3 public. [WriteClassStructure]
[INFO] Interfaces definidos no package core da aplicação (3): '[LoanStrategy, UserStatusStrategy, Observer]'. [WriteClassStructure]
[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, UserStatus]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 26, dos quais 0 private, 1 package-private, 0 protected e 25 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 (20): '[UniqueWorkRule, User, WorkHasCopiesRule, Creator, FaltosoStatusStrategy, ReferenceWorkRule, Book, MyParser, LoanCumpridor, UserHasRequestsRule, Request, WorkTooExpensiveRule, NormalStatusStrategy, LoanNormal, DVD, ActiveUserRule, LoanFaltoso, LibraryManager, Library, CumpridorStatusStrategy]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (4): '[UnavailableFileException, UnrecognizedEntryException, MissingFileAssociationException, ImportFileException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 128, dos quais 5 private, 2 package-private, 0 protected e 121 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 41, dos quais 41 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 label

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserStatus ( public )

 [WriteClassStructure]
[INFO] interface LoanStrategy ( public )

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

    int calculateMaxDays(int copies)

 [WriteClassStructure]
[INFO] interface UserStatusStrategy ( public )

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

    void update(User user)
    UserStatus getStatus()

 [WriteClassStructure]
[INFO] interface Observer ( public )

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

    void update(String message)

 [WriteClassStructure]
[INFO] class UniqueWorkRule ( public )
  extends Rule

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

    public boolean check(Request request)

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

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

    private static int _nextId
    private Set<Request> _requests
    private List<Boolean> _requestsHistory
    private List<String> _notifications
    private int _id
    private String _name
    private String _email
    private UserStatus _status
    private String _state
    private int _fine
    private final static Map<UserStatus, UserStatusStrategy> STRATEGIES

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

    public void update(String message)
    public List<String> showNotifications()
    public void removeNotifications()
    public void updateStatus()
    public void setId(int id)
    public int getId()
    public String getName()
    public String getEmail()
    public int getFine()
    public void setFine(int fine)
    public void setStatus(UserStatus status)
    public UserStatus getStatus()
    public String getState()
    public void setState(String state)
    public void addRequest(Request request)
    public void remRequest(Request request)
    public void addRequestDelivered(boolean onTime)
    public Set<Request> getRequests()
    public void clearRequests()
    public void clearRequestsHistory()
    public List<Boolean> getHistory()
    public void doPayFine()
    public String toString()

 [WriteClassStructure]
[INFO] class WorkHasCopiesRule ( public )
  extends Rule

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

    public boolean check(Request request)

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

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

    private String _name
    private List<Work> _works

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

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

 [WriteClassStructure]
[INFO] class FaltosoStatusStrategy ( public implements UserStatusStrategy )

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

    public void update(User user)
    public UserStatus getStatus()

 [WriteClassStructure]
[INFO] class ReferenceWorkRule ( public )
  extends Rule

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

    public boolean check(Request request)

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

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

    private String _isbn
    private List<Creator> _creators

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

    public String getIsbn()
    public List<Creator> getCreators()
    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] class LoanCumpridor ( public implements LoanStrategy )

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

    public int calculateMaxDays(int copies)

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

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

    private static int _nextId
    private Set<Observer> _requestObservers
    private Set<Observer> _availabilityObservers
    private int _id
    private String _title
    private int _price
    private int _copies
    private Category _category
    private int _effetiveCopies

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

    public void addAvailabilityObserver(Observer o)
    public void removeAvailabilityObserver(Observer o)
    public void notifyAvailabilityObservers()
    public void addRequestObserver(Observer o)
    public void notifyRequestObservers()
    public void setId(int id)
    public int getId()
    public String getTitle()
    public int getPrice()
    public int getCopies()
    public int getEffectiveCopies()
    public void setCopies(int value)
    public void decrementEffectiveCopies()
    public boolean incrementEffectiveCopies()
    public Category getCategory()
    public abstract List<Creator> getCreators()
    public abstract String toString()

  ###### Subclasses  ###### 
    Book   DVD   

   Method getCreators() overriden in subclass(es) Book DVD 
   Method toString() overriden in subclass(es) Book DVD 
 [WriteClassStructure]
[INFO] class UserHasRequestsRule ( public )
  extends Rule

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

    public boolean check(Request request)

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

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

    private User _user
    private Work _work
    private int _deadline

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

    public User getUser()
    public Work getWork()
    public int getDeadline()
    public void setDeadline(int deadline)

 [WriteClassStructure]
[INFO] class WorkTooExpensiveRule ( public )
  extends Rule

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

    public boolean check(Request request)

 [WriteClassStructure]
[INFO] class NormalStatusStrategy ( public implements UserStatusStrategy )

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

    public void update(User user)
    public UserStatus getStatus()

 [WriteClassStructure]
[INFO] class LoanNormal ( public implements LoanStrategy )

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

    public int calculateMaxDays(int copies)

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

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

    private String _igac
    private Creator _creator
    private int _effetiveCopies

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

    public String getIgac()
    public List<Creator> getCreators()
    public String toString()

 [WriteClassStructure]
[INFO] class ActiveUserRule ( public )
  extends Rule

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

    public boolean check(Request request)

 [WriteClassStructure]
[INFO] class LoanFaltoso ( public implements LoanStrategy )

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

    public int calculateMaxDays(int copies)

 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private String _filename
    private Library _library

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

    public boolean isModified()
    public boolean hasNoFilename()
    public String getFilename()
    public void setFilename(String filename)
    public int doDisplayDate()
    public void doAdvanceDate(int days)
    public User registerUser(String name, String email)
    public List<User> getUsers()
    public User getUserById(int id)
    public Work getWork(int id)
    public List<Work> getAllWorks()
    public List<Work> getWorkByCreator(String name)
    public List<Work> doPerformSearch(String term)
    public int calculateLoanDays(User user, Work work)
    public Collection<Request> getRequests()
    public Request getRequest(User user, Work work)
    public int doRequestWork(int idUser, int idWork)
    public int doReturnWork(int idUser, int idWork)
    public void doPayFine(int id)
    public void setCopies(int id, int copies)
    public void updateUsersState()
    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 _days
    private boolean _modified
    private List<User> _users
    private Collection<Creator> _creators
    private List<Work> _works
    private Collection<Request> _requests
    private final static Map<UserStatus, LoanStrategy> STRATEGIES

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

    public void modifyTrue()
    public void modifyFalse()
    public boolean isModified()
    public int doDisplayDate()
    public void doAdvanceDate(int days)
    public User registerUser(String name, String email)
    public List<User> getUsers()
    public User getUserById(int id)
    public Creator registerCreator(String name)
    private void registerWork(Work work)
    public DVD registerDvd(String title, Creator creator, Category category, int price, String igac, int copies)
    public Book registerBook(String title, int price, Category category, String isbn, List creators, int copies)
    public Work getWork(int id)
    public List<Work> getAllWorks()
    public List<Work> getWorkByCreator(String name)
    public List<Work> doPerformSearch(String term)
    public Collection<Request> getRequests()
    public Request getRequest(User user, Work work)
    public int doRequestWork(int idUser, int idWork)
    public int doReturnWork(int idUser, int idWork)
    public void updateUsersState()
    public int calculateLoanDays(User user, Work work)
    public void doPayFine(int id)
    public void setCopies(int id, int copies)
    public void removeUser(int idUser)
    void importFile(String filename)

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

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

    private final int _id

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

    public int getId()
    public abstract boolean check(Request request)

  ###### Subclasses  ###### 
    UniqueWorkRule   WorkHasCopiesRule   ReferenceWorkRule   UserHasRequestsRule   WorkTooExpensiveRule   ActiveUserRule   

   Method check(Request) overriden in subclass(es) UniqueWorkRule WorkHasCopiesRule ReferenceWorkRule UserHasRequestsRule WorkTooExpensiveRule ActiveUserRule 
 [WriteClassStructure]
[INFO] class CumpridorStatusStrategy ( public implements UserStatusStrategy )

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

    public void update(User user)
    public UserStatus getStatus()

 [WriteClassStructure]
Auditoria completa.
