

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


Nada a assinalar


####    Quebra do encapsulamento


Nada a assinalar


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


[INFO] 037/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] 037/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] 037/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] 037/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] 037/bci/core/User.java:0:	POLooseCouplingRule:	Aplicação correcta (3) e incorrecta (1) do princípio Programar para abstracção no ficheiro User.java.
[ERROR] 037/bci/core/User.java:28:	POLooseCouplingRule:	Erro: Evite declarar variáveis utilizando tipos concretos como 'LinkedList'; Em vez do tipo concreto utilize a interface.
[INFO] 037/bci/core/Work.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (0) do princípio Programar para abstracção no ficheiro Work.java.
Total de erros:  1


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


[WARN] 037/bci/core/Book.java:15:	MethodReturnsFieldCollectionRule:	Potencial fuga de privacidade (aceite) na classe Book: construtor atribui parâmetro 'authors' a atributo '_authors', mas construtor não é público
[INFO] 037/bci/core/Creator.java:21:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em Creator por uso de Collections.unmodifiableList para devolver vista imutável de _works em método works
[INFO] 037/bci/core/Library.java:126:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em Library por uso de Collections.unmodifiableCollection para devolver vista imutável de _users.values() em método getUsers
[INFO] 037/bci/core/Library.java:204:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em Library por uso de Collections.unmodifiableCollection para devolver vista imutável de _works.values() em método getWorks
[INFO] 037/bci/core/User.java:126:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em User por uso de Collections.unmodifiableCollection para devolver vista imutável de _requests em método requests
Total de erros:  0
Total de fugas evitadas:        4


####    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] 037/bci/core/User.java:18:23: O atributo com o nome 'FINE_PRICE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/UserState.java:26:59: O parâmetro 'lessThan5WorkDeadline' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
[ERROR] 037/bci/core/UserState.java:26:86: O parâmetro 'moreThan5WorkDeadline' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
[ERROR] 037/bci/core/FaultyState.java:5:23: O atributo com o nome 'MAX_NUMBER_REQUEST'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/FaultyState.java:6:23: O atributo com o nome 'MAX_WORK_PRICE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/FaultyState.java:7:26: O atributo com o nome 'USER_BEHAVIOR'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/FaultyState.java:8:23: O atributo com o nome 'DEADLINE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/NormalState.java:5:23: O atributo com o nome 'MAX_NUMBER_REQUEST'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/NormalState.java:6:23: O atributo com o nome 'MAX_WORK_PRICE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/NormalState.java:7:23: O atributo com o nome 'ONE_EXEMPLAR_DEADLINE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/NormalState.java:8:23: O atributo com o nome 'LESS_FIVE_EXEMPLAR_DEADLINE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/NormalState.java:9:23: O atributo com o nome 'MORE_FIVE_EXEMPLAR_DEADLINE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/NormalState.java:10:26: O atributo com o nome 'USER_BEHAVIOR'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/DutifulState.java:5:23: O atributo com o nome 'MAX_NUMBER_REQUESTS'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/DutifulState.java:6:26: O atributo com o nome 'USER_BEHAVIOR'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/DutifulState.java:7:23: O atributo com o nome 'ONE_EXEMPLAR_DEADLINE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/DutifulState.java:8:23: O atributo com o nome 'LESS_FIVE_EXEMPLAR_DEADLINE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/DutifulState.java:9:23: O atributo com o nome 'MORE_FIVE_EXEMPLAR_DEADLINE'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 037/bci/core/Constants.java:25:42: O parâmetro '_status' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
Total de erros:  19

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

Iniciando a auditoria...
[INFO] 037/bci/core/LibraryManager.java:99 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 037/bci/core/LibraryManager.java:128 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] 037/bci/core/Parser.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] 037/bci/core/Work.java:41 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

Iniciando a auditoria...
[WARN] 037/bci/core/Book.java:34 uso desnecessário de super para invocar método 'getDescription' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/CheckNumberRequests.java:11 uso desnecessário de super para invocar método 'id' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/CheckRequestTwice.java:12 uso desnecessário de super para invocar método 'id' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/CheckUserActive.java:11 uso desnecessário de super para invocar método 'id' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/CheckWorkAvailableCopies.java:11 uso desnecessário de super para invocar método 'id' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/CheckWorkCategory.java:11 uso desnecessário de super para invocar método 'id' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/CheckWorkPrice.java:11 uso desnecessário de super para invocar método 'id' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/DutifulState.java:14 uso desnecessário de super para invocar método 'request' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/Dvd.java:18 uso desnecessário de super para invocar método 'getDescription' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/FaultyState.java:13 uso desnecessário de super para invocar método 'request' da super classe. [AvoidUselessSuper]
[WARN] 037/bci/core/NormalState.java:15 uso desnecessário de super para invocar método 'request' 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...
[ERROR] 037/bci/core/Constants.java:5 Método estático 'static int firstDay()' com um simples return valor literal ou atributo não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:9 Método estático 'static int noFine()' com um simples return valor literal ou atributo não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:13 Método estático 'static int firstId()' com um simples return valor literal ou atributo não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:17 Membro estático 'static boolean active()' não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:21 Membro estático 'static boolean notActive()' não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:25 Membro estático 'static String activeToString(boolean _status)' não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:31 Membro estático 'static String fineToString(int fine)' não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:35 Método estático 'static int deadlineIfFaltoso()' com um simples return valor literal ou atributo não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:39 Método estático 'static int deadlineTierFour()' com um simples return valor literal ou atributo não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:43 Método estático 'static int deadlineTierThree()' com um simples return valor literal ou atributo não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:47 Método estático 'static int deadlineTierTwo()' com um simples return valor literal ou atributo não recomendável. [POStaticMember]
[ERROR] 037/bci/core/Constants.java:51 Método estático 'static int deadlineTierOne()' com um simples return valor literal ou atributo não recomendável. [POStaticMember]
[INFO] 037/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 '20'. [POStaticMember]
Auditoria completa.
O Checkstyle terminou com 12 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 atributo 'USER_BEHAVIOR' está duplicado em todas as subclasses de 'UserState'. [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: 2, dos quais 0 private, 2 package-private, 0 protected e 0 public. [WriteClassStructure]
[INFO] Interfaces definidos no package core da aplicação (2): '[Observer, Constants]'. [WriteClassStructure]
[INFO] Número total de enumerados definidos no core: 1, dos quais 0 private, 1 package-private, 0 protected e 0 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (1): '[Category]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 35, dos quais 0 private, 2 package-private, 0 protected e 33 public. [WriteClassStructure]
[INFO] Classes abstractas definidas no package core da aplicação (3): '[Work, UserState, Rule]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (19): '[User, Creator, Notification, CheckRequestTwice, Book, MyParser, NormalState, DutifulState, Request, CheckUserActive, CheckWorkPrice, FaultyState, Date, CheckWorkCategory, Dvd, CheckWorkAvailableCopies, CheckNumberRequests, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (13): '[UserNotFoundException, UserIsActiveException, RuleFailedException, UnavailableFileException, UnrecognizedEntryException, WorkQuantityExceededException, NoSuchCreatorException, MissingFileAssociationException, WorkDueException, NoSuchWorkException, ImportFileException, WorkNotBorrowedException, UserRegistrationFailedException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 134, dos quais 4 private, 95 package-private, 0 protected e 35 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 57, dos quais 57 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 (  )

 [WriteClassStructure]
[INFO] interface Observer (  )

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

    void update(Notification n)

 [WriteClassStructure]
[INFO] interface Constants (  )

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

    static int firstDay()
    static int noFine()
    static int firstId()
    static boolean active()
    static boolean notActive()
    static String activeToString(boolean _status)
    static String fineToString(int fine)
    static int deadlineIfFaltoso()
    static int deadlineTierFour()
    static int deadlineTierThree()
    static int deadlineTierTwo()
    static int deadlineTierOne()

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

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

    private final int FINE_PRICE
    private int _id
    private boolean _isActive
    private String _name
    private String _email
    private int _fine
    private int _consecutiveOnTimeRequests
    private int _consecutiveDueRequests
    private UserState _state
    private List<Notification> _notifications
    private LinkedList<Request> _requests

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

    public String toString()
    int getId()
    String getName()
    boolean isActive()
    int consecutiveOnTimeRequests()
    public int compareTo(User u)
    public void update(Notification noti)
    Collection<Notification> getNotifications()
    void payFine(int currentDay)
    void checkRequests(int currentDay)
    int dueRequests()
    int maxNumberOfRequests()
    boolean canPayRequest(Work w)
    int requestWork(int day, Work w)
    void changeState(UserState state)
    void addRequest(Request request)
    void removeRequest(int currentDay, Work w)
    Collection<Request> requests()

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

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

    private String _name
    private List<Work> _works

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

    List<Work> works()
    void add(Work work)
    void remove(Work work)
    String getName()

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

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

    private String _message

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

    public String toString()

 [WriteClassStructure]
[INFO] class CheckRequestTwice (  )
  extends Rule

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

    void check(Work w, User u)

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

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

    private String _isbn
    private List<Creator> _authors

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

    String getRegisterNumber()
    String getCreatorsName()
    String getType()
    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]  abstract class Work ( public implements Comparable<Work>, Serializable )

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

    private int _id
    private int _price
    private int _numberOfCopies
    private int _availableCopies
    private String _title
    private Category _category
    private Set<Observer> _observers

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

    abstract String getRegisterNumber()
    abstract String getType()
    abstract String getCreatorsName()
    int price()
    Category category()
    String getTitle()
    int totalCopies()
    int availableCopies()
    void decrementCopies()
    void incrementCopies()
    String categoryToSring()
    String getDescription()
    public abstract String toString()
    public int compareTo(Work workToCompare)
    boolean addObserver(Observer obs)
    boolean removeObserver(Observer obs)
    void notifyObservers(String message)
    int changeInventory(int quant)
    int id()

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

   Method getRegisterNumber() overriden in subclass(es) Book Dvd 
   Method getType() overriden in subclass(es) Book Dvd 
   Method getCreatorsName() overriden in subclass(es) Book Dvd 
   Method toString() overriden in subclass(es) Book Dvd 
 [WriteClassStructure]
[INFO]  abstract class UserState ( public implements Serializable )

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

    private User _user

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

    User user()
    abstract int maxNumberOfRequests()
    abstract boolean canPayRequest(Work w)
    abstract String behavior()
    abstract int request(int day, Work w)
    int request(int day, Work w, int oneWorkDeadline, int lessThan5WorkDeadline, int moreThan5WorkDeadline)
    abstract void checkRequestStatus(int currentDay)

  ###### Subclasses  ###### 
    NormalState   DutifulState   FaultyState   

   Method maxNumberOfRequests() overriden in subclass(es) NormalState DutifulState FaultyState 
   Method canPayRequest(Work) overriden in subclass(es) NormalState DutifulState FaultyState 
   Method behavior() overriden in subclass(es) NormalState DutifulState FaultyState 
   Method request(int, Work) overriden in subclass(es) NormalState DutifulState FaultyState 
   Method checkRequestStatus(int) overriden in subclass(es) NormalState DutifulState FaultyState 
 [WriteClassStructure]
[INFO] class NormalState ( public )
  extends UserState

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

    private final int MAX_NUMBER_REQUEST
    private final int MAX_WORK_PRICE
    private final int ONE_EXEMPLAR_DEADLINE
    private final int LESS_FIVE_EXEMPLAR_DEADLINE
    private final int MORE_FIVE_EXEMPLAR_DEADLINE
    private final String USER_BEHAVIOR

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

    int request(int day, Work w)
    public int maxNumberOfRequests()
    public boolean canPayRequest(Work w)
    public String behavior()
    void checkRequestStatus(int currentDay)

 [WriteClassStructure]
[INFO] class DutifulState ( public )
  extends UserState

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

    private final int MAX_NUMBER_REQUESTS
    private final String USER_BEHAVIOR
    private final int ONE_EXEMPLAR_DEADLINE
    private final int LESS_FIVE_EXEMPLAR_DEADLINE
    private final int MORE_FIVE_EXEMPLAR_DEADLINE

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

    int request(int day, Work w)
    int maxNumberOfRequests()
    boolean canPayRequest(Work w)
    String behavior()
    void checkRequestStatus(int currentDay)

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

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

    private int _deadline
    private Work _work
    private User _user

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

    boolean isDue(int day)
    Work work()
    int deadline()

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

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

    void check(Work w, User u)

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

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

    void check(Work w, User u)

 [WriteClassStructure]
[INFO] class FaultyState ( public )
  extends UserState

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

    private final int MAX_NUMBER_REQUEST
    private final int MAX_WORK_PRICE
    private final String USER_BEHAVIOR
    private final int DEADLINE

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

    int request(int day, Work w)
    int maxNumberOfRequests()
    boolean canPayRequest(Work w)
    String behavior()
    void checkRequestStatus(int currentDay)

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

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

    private int _currentDate

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

    public int getCurrentDate()
    void advanceDays(int nDays)

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

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

    void check(Work w, User u)

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

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

    private String _igac
    private Creator _director

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

    String getRegisterNumber()
    String getCreatorsName()
    String getType()
    public String toString()

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

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

    void check(Work w, User u)

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

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

    void check(Work w, User u)

 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private Library _library
    private String _filename

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

    public void advanceDays(int nDays)
    public Date getCurrentDate()
    public int registerUser(String userName, String email)
    public User getUser(int id)
    public Collection<User> getUsers()
    public Work getWork(int id)
    public Collection<Work> getWorks()
    public Collection<Work> searchWork(String term)
    public List<Work> getCreatorWorks(String name)
    public boolean isModified()
    public boolean hasFileAssociation()
    public void changeInventory(int id, int quant)
    public Collection<Notification> getUserNotifications(int userId)
    public int requestWork(int userId, int workId)
    public void addInterest(int userId, int workId)
    public void returnWork(int userId, int workId)
    public void payFine(int userId)
    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 _nextUserId
    private int _nextWorkId
    private Date _date
    private Map<Integer, User> _users
    private Map<String, Creator> _creators
    private Map<Integer, Work> _works
    private Collection<Rule> _rules
    private boolean _modified

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

    public void setModified(boolean value)
    public boolean isModified()
    void advanceDays(int nDays)
    Date getCurrentDate()
    User registerUser(String userName, String email)
    User getUser(int id)
    Collection<User> getUsers()
    void registerBook(int price, List authors, int nCopies, String title, String isbn, Category category)
    void registerDvd(int price, Creator director, int nCopies, String title, String igac, Category category)
    Creator registerCreator(String name)
    Work getWork(int id)
    Collection<Work> getWorks()
    Collection<Work> searchWorks(String term)
    List<Work> getCreatorWorks(String name)
    void removeWork(int workId, List creatorNames)
    void changeInventory(int id, int quant)
    int requestWork(int userId, int workId)
    void returnWork(int userId, int workId)
    Collection<Notification> getUserNotifications(int userId)
    void addInterest(int userId, int workId)
    void checkUsersStatus()
    void payFine(int userId)
    void importFile(String filename)

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

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

    private int _id

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

    abstract void check(Work w, User u)
    int id()

  ###### Subclasses  ###### 
    CheckRequestTwice   CheckUserActive   CheckWorkPrice   CheckWorkCategory   CheckWorkAvailableCopies   CheckNumberRequests   

   Method check(Work, User) overriden in subclass(es) CheckRequestTwice CheckUserActive CheckWorkPrice CheckWorkCategory CheckWorkAvailableCopies CheckNumberRequests 
 [WriteClassStructure]
Auditoria completa.
