

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


Nada a assinalar


####    Quebra do encapsulamento


[ERROR] 004/bci/core/AvailabilityInterest.java:39:	MethodReturnsFieldCollectionRule:	Possível quebra de encapsulamento na classe AvailabilityInterest com o método getMap a devolver um Map
[ERROR] 004/bci/core/Interest.java:20:	MethodReturnsFieldCollectionRule:	Possível quebra de encapsulamento na classe Interest com o método getMap a devolver um Map
[ERROR] 004/bci/core/RequestInterest.java:34:	MethodReturnsFieldCollectionRule:	Possível quebra de encapsulamento na classe RequestInterest com o método getMap a devolver um Map
Total de erros:  3


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


[INFO] 004/bci/core/AvailabilityInterest.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (0) do princípio Programar para abstracção no ficheiro AvailabilityInterest.java.
[INFO] 004/bci/core/Book.java:0:	POLooseCouplingRule:	Aplicação correcta (3) e incorrecta (0) do princípio Programar para abstracção no ficheiro Book.java.
[INFO] 004/bci/core/CollectionIntoString.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (0) do princípio Programar para abstracção no ficheiro CollectionIntoString.java.
[INFO] 004/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] 004/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] 004/bci/core/Interest.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro Interest.java.
[INFO] 004/bci/core/Library.java:0:	POLooseCouplingRule:	Aplicação correcta (6) e incorrecta (0) do princípio Programar para abstracção no ficheiro Library.java.
[INFO] 004/bci/core/RequestInterest.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro RequestInterest.java.
[INFO] 004/bci/core/User.java:0:	POLooseCouplingRule:	Aplicação correcta (3) e incorrecta (0) do princípio Programar para abstracção no ficheiro User.java.
[INFO] 004/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:  0


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


[WARN] 004/bci/core/AvailabilityInterest.java:39:	MethodReturnsFieldCollectionRule:	Potencial fuga de privacidade (aceite) em método getMap da classe AvailabilityInterest: devolve referência directa para '_interest' mas método não é público: protected
[WARN] 004/bci/core/RequestInterest.java:34:	MethodReturnsFieldCollectionRule:	Potencial fuga de privacidade (aceite) em método getMap da classe RequestInterest: devolve referência directa para '_interest' mas método não é público: protected
[INFO] 004/bci/core/Book.java:37:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Book, por atribuição de parâmetro a atributo authors, evitada por criação de cópia (new new ArrayList(authors)) no construtor.
[INFO] 004/bci/core/Book.java:46:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em Book por uso de Collections.unmodifiableCollection para devolver vista imutável de _authors em método getCreators
[INFO] 004/bci/core/Creator.java:33:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em Creator por uso de Collections.unmodifiableCollection para devolver vista imutável de _works em método getWorks
[INFO] 004/bci/core/User.java:194:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em User por uso de Collections.unmodifiableCollection para devolver vista imutável de _notis em método getNotifications
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] 004/bci/core/Library.java:469:24: A variável local com o nome '_calculator'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
Total de erros:  1

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

Iniciando a auditoria...
[INFO] 004/bci/core/LibraryManager.java:41 ObjectOutputStream criado no método 'private void serialize()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 004/bci/core/LibraryManager.java:101 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] 004/bci/core/Category.java:15 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'this' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 004/bci/core/CheckAmountRequests.java:20 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'user.getUserBehaviour()' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 004/bci/core/DeadlineFiveOrLessTotal.java:18 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'user.getUserBehaviour()' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 004/bci/core/DeadlineMoreThanFiveTotal.java:18 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'user.getUserBehaviour()' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 004/bci/core/DeadlineOneTotal.java:18 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'user.getUserBehaviour()' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 004/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] 004/bci/core/SwitchUserBehaviour.java:37 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'behaviour' 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] 004/bci/core/AvailabilityInterest.java:16 Membro estático 'AvailabilityInterest _instance' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/AvailabilityInterest.java:27 Membro estático 'static AvailabilityInterest getInstance()' não recomendável. [POStaticMember]
[INFO] 004/bci/core/Constants.java:11 Atributo estático final 'int LATE_REQS_FOR_FALTOSO' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:12 Atributo estático final 'int ON_TIME_REQS_FOR_CUMPRIDOR' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:13 Atributo estático final 'int STREAK_TO_NORMAL' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:15 Atributo estático final 'int FINE_EACH_DAY_LATE' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:17 Atributo estático final 'int INITIAL_ID' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:19 Atributo estático final 'int AMOUNT_OF_RULES' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:21 Atributo estático final 'int CHECK_REQUEST_TWICE_ID' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:22 Atributo estático final 'int CHECK_IS_USER_ACTIVE_ID' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:23 Atributo estático final 'int CHECK_AVAILABLE_COPY_ID' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:24 Atributo estático final 'int CHECK_AMOUNT_REQUESTS_ID' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:25 Atributo estático final 'int CHECK_CATEGORY_ID' permitido. [POStaticMember]
[INFO] 004/bci/core/Constants.java:26 Atributo estático final 'int CHECK_PRICE_ID' permitido. [POStaticMember]
[ERROR] 004/bci/core/Date.java:11 Membro estático 'Date _instance' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/Date.java:25 Membro estático 'static Date getInstance()' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/Library.java:18 Membro estático 'Library _instance' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/Library.java:59 Membro estático 'static Library getInstance()' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/LibraryManager.java:19 Membro estático 'LibraryManager _instance' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/LibraryManager.java:30 Membro estático 'public static LibraryManager getInstance()' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/RequestInterest.java:17 Membro estático 'RequestInterest _instance' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/RequestInterest.java:28 Membro estático 'static RequestInterest getInstance()' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/RuleChecker.java:15 Membro estático 'RuleChecker _instance' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/RuleChecker.java:37 Membro estático 'static RuleChecker getInstance()' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/SelectDeadlineCalculator.java:12 Membro estático 'SelectDeadlineCalculator _instance' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/SelectDeadlineCalculator.java:31 Membro estático 'static SelectDeadlineCalculator getInstance()' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/SwitchUserBehaviour.java:15 Membro estático 'SwitchUserBehaviour _instance' não recomendável. [POStaticMember]
[ERROR] 004/bci/core/SwitchUserBehaviour.java:25 Membro estático 'static SwitchUserBehaviour getInstance()' não recomendável. [POStaticMember]
[INFO] 004/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.
O Checkstyle terminou com 16 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 '_interest' está duplicado em todas as subclasses de 'Interest'. [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, 0 package-private, 0 protected e 2 public. [WriteClassStructure]
[INFO] Interfaces definidos no package core da aplicação (2): '[DeadlineCalculator, Constants]'. [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, UserBehaviour]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 40, dos quais 0 private, 1 package-private, 0 protected e 39 public. [WriteClassStructure]
[INFO] Classes abstractas definidas no package core da aplicação (4): '[Notification, Interest, Work, Rule]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (26): '[User, SwitchUserBehaviour, CheckIsUserActive, SelectDeadlineCalculator, RuleChecker, CheckCategory, Creator, CheckAvailableCopy, CheckRequestTwice, DeadlineMoreThanFiveTotal, Book, MyParser, AvailabilityInterest, CheckPrice, RequestInterest, CheckAmountRequests, CollectionIntoString, DeadlineFiveOrLessTotal, RequestNotification, Request, Date, Dvd, LibraryManager, AvailabilityNotification, DeadlineOneTotal, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (10): '[WorkNotBorrowedByUserException, UserIsActiveException, UnavailableFileException, UnrecognizedEntryException, NoSuchUserIdException, NoSuchWorkIdException, MissingFileAssociationException, ImportFileException, NoSuchCreatorIdException, UserRegistrationFailedException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 178, dos quais 23 private, 111 package-private, 6 protected e 38 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 63, dos quais 63 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 )

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserBehaviour ( public )

 [WriteClassStructure]
[INFO] interface DeadlineCalculator ( public )
  extends Serializable

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

    int calculateDeadline(User user)

 [WriteClassStructure]
[INFO] interface Constants ( public )
  extends Serializable

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

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

    private final int _id
    private String _name
    private String _email
    private int _fine
    private boolean _active
    private UserBehaviour _behaviour
    private List<Notification> _notis
    private Map<Integer, Request> _reqs
    private int _lateWorks
    private int _onTimeStreak
    private int _lateStreak

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

    int getLateStreak()
    void resetLateStreak()
    void increaseLateStreak()
    public String toString()
    int getAmountRequests()
    void addRequest(Request request, int workId)
    void returnRequest(int workId)
    Request getRequest(int workId)
    boolean wasWorkRequested(int workId)
    int getUserId()
    String getName()
    String getEmail()
    int getFine()
    boolean isActive()
    UserBehaviour getUserBehaviour()
    int getLateWorks()
    void setFine(int amount)
    void setActive()
    void setSuspended()
    void setUserBehaviour(UserBehaviour behaviour)
    void changeLateWorks(int amount)
    int getOnTimeStreak()
    void increaseOnTimeStreak()
    void resetOnTimeStreak()
    Collection<Notification> getNotifications()
    void addNotification(Notification notification)
    void clearNotifications()

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

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

    private static SwitchUserBehaviour _instance

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

    static SwitchUserBehaviour getInstance()
    void switchBehaviour(User user, boolean isReqLate)
    private boolean checkToFaltoso(User user, int lateStreak)
    private boolean checkToCumpridor(User user, int onTimeStreak)
    private boolean checkCumpridorToNormal(boolean isReqLate)
    private boolean checkFaltosoToNormal(int onTimeStreak)

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

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

    boolean check(User user, Work work)

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

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

    private static SelectDeadlineCalculator _instance
    private DeadlineCalculator _oneTotal
    private DeadlineCalculator _fiveOrLessTotal
    private DeadlineCalculator _moreThanFiveTotal

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

    static SelectDeadlineCalculator getInstance()
    DeadlineCalculator selectCalculator(Work work)

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

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

    private static RuleChecker _instance
    private Rule[] _rules

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

    static RuleChecker getInstance()
    boolean checkRule(int ruleId, User user, Work work)

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

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

    boolean check(User user, Work work)

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

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

    private final String _name
    private List<Work> _works

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

    String getName()
    Collection<Work> getWorks()
    void addWork(Work work)
    int removeWork(Work work)

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

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

    private String _workDesc

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

    protected String getWorkDesc()
    public abstract String toString()

  ###### Subclasses  ###### 
    RequestNotification   AvailabilityNotification   

   Method toString() overriden in subclass(es) RequestNotification AvailabilityNotification 
 [WriteClassStructure]
[INFO]  abstract class Interest ( public implements Serializable )

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

    protected abstract Map<Integer, Collection<User>> getMap()
    void addInterest(int workId, User user)
    void removeUserInterest(int workId, User user)
    void removeWork(int workId)
    boolean isUserInterested(int workId, User user)
    Collection<User> getInterestedUsers(int workId)
    void removeUser(User user)

  ###### Subclasses  ###### 
    AvailabilityInterest   RequestInterest   

   Method getMap() overriden in subclass(es) AvailabilityInterest RequestInterest 
 [WriteClassStructure]
[INFO] class CheckAvailableCopy ( public )
  extends Rule

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

    boolean check(User user, Work work)

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

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

    boolean check(User user, Work work)

 [WriteClassStructure]
[INFO] class DeadlineMoreThanFiveTotal ( public implements DeadlineCalculator )

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

    public int calculateDeadline(User user)

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

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

    private List<Creator> _authors
    private String _isbn

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

    String getIsbn()
    Collection<Creator> getCreators()
    boolean hasTerm(String term)
    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 AvailabilityInterest ( public )
  extends Interest

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

    private static AvailabilityInterest _instance
    private Map<Integer, Collection<User>> _interest

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

    static AvailabilityInterest getInstance()
    protected Map<Integer, Collection<User>> getMap()

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

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

    private final int _id
    private final String _title
    private int _price
    private int _totalCopies
    private int _availableCopies
    private final Category _category

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

    int getWorkId()
    String getTitle()
    String getTitleLower()
    int getPrice()
    void setPrice(int price)
    int getTotalCopies()
    void changeTotalCopies(int amount)
    int getAvailableCopies()
    int changeAvailableCopies(int amount)
    Category getCategory()
    boolean hasTerm(String term)
    protected String descPart1()
    protected String descPart2()
    public abstract String toString()
    abstract Collection<Creator> getCreators()

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

   Method hasTerm(String) overriden in subclass(es) Book Dvd 
   Method toString() overriden in subclass(es) Book Dvd 
   Method getCreators() overriden in subclass(es) Book Dvd 
 [WriteClassStructure]
[INFO] class CheckPrice ( public )
  extends Rule

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

    boolean check(User user, Work work)

 [WriteClassStructure]
[INFO] class RequestInterest ( public )
  extends Interest

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

    private static RequestInterest _instance
    private Map<Integer, Collection<User>> _interest

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

    static RequestInterest getInstance()
    protected Map<Integer, Collection<User>> getMap()

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

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

    boolean check(User user, Work work)

 [WriteClassStructure]
[INFO] class CollectionIntoString ( public )

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

    private final Comparator<T> _comp

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

    public String toString(Collection coll)

 [WriteClassStructure]
[INFO] class DeadlineFiveOrLessTotal ( public implements DeadlineCalculator )

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

    public int calculateDeadline(User user)

 [WriteClassStructure]
[INFO] class RequestNotification ( public )
  extends Notification

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

    public String toString()

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

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

    private int _deadline
    private final int _workId
    private final int _userId
    private boolean _returned
    private boolean _late

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

    int getDeadline()
    int getWorkId()
    int getUserId()
    boolean wasReturned()
    void setReturned()
    boolean isLate()
    void setLate()

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

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

    private static Date _instance
    private int _currentDay
    private int _lastDay

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

    static Date getInstance()
    int getCurrentDay()
    int getLastDay()
    void advanceDays(int nDays)

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

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

    private Creator _director
    private String _igac

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

    String getIgac()
    Collection<Creator> getCreators()
    boolean hasTerm(String term)
    public String toString()

 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private Library _library
    private String _filename
    private static LibraryManager _instance

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

    public static LibraryManager getInstance()
    private void serialize()
    private boolean isFileValid(String filename)
    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String datafile)
    private void setModified(boolean modified)
    public boolean isModified()
    public int registerUser(String name, String email)
    public String showUser(int userId)
    public String showAllUsers()
    public int getCurrentDay()
    public void advanceDays(int nDays)
    public String showWork(int workId)
    public String showAllWorks()
    public String showCreatorWorks(String creatorId)
    public boolean wasWorkRequested(int userId, int workId)
    public void returnWork(int userId, int workId)
    public int calculateFine(int userId, int workId)
    public void notPayingFine(int userId, int fine)
    public void payFine(int userId)
    public boolean updateWorkInventory(int workId, int amount)
    public String searchWorks(String term)
    public int checkRules(int workId, int userId)
    public int requestWork(int userId, int workId)
    public void setAvailableInterest(int workId, int userId)
    public void setRequestInterest(int workId, int userId)
    public void removeRequestInterest(int workId, int userId)
    public String showNotifications(int userId)

 [WriteClassStructure]
[INFO] class AvailabilityNotification ( public )
  extends Notification

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

    public String toString()

 [WriteClassStructure]
[INFO] class DeadlineOneTotal ( public implements DeadlineCalculator )

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

    public int calculateDeadline(User user)

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

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

    private static Library _instance
    private boolean _modified
    private Map<Integer, Collection<Request>> _reqs
    private Map<Integer, User> _users
    private Map<Integer, Work> _works
    private Map<String, Creator> _creators
    private Date _currentDate
    private AvailabilityInterest _availInterest
    private RequestInterest _reqInterest
    private SelectDeadlineCalculator _selectCalculator
    private RuleChecker _ruleChecker
    private SwitchUserBehaviour _switchBehaviour
    private int _nextWorkId
    private int _nextUserId

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

    static Library getInstance()
    void setModified(boolean modified)
    boolean isModified()
    void importFile(String filename)
    void registerDvd(String title, int price, int totalCopies, Category category, Creator director, String igac)
    void registerBook(String title, int price, int totalCopies, Category category, Collection authors, String isbn)
    Creator registerCreator(String name)
    private User createUser(String name, String email)
    int registerUser(String name, String email)
    void removeUser(User user)
    private User getUserById(int userId)
    String showUser(int userId)
    String showAllUsers()
    int getCurrentDay()
    void advanceDays(int nDays)
    private Collection<Request> getLateRequests(int currentDay)
    private void manageLateRequests(int currentDay)
    private Work getWorkById(int workId)
    private Creator getCreatorById(String creatorId)
    String showWork(int workId)
    String showAllWorks()
    String searchWorks(String term)
    private void removeWork(int workId)
    private void removeCreatorWork(Creator creator, Work work)
    private void removeCreator(Creator creator)
    String showCreatorWorks(String creatorId)
    private void addAvailabilityNotification(Work work, int workId)
    private int calculateDeadline(Work work, User user)
    private void addRequest(int deadline, Request req)
    int requestWork(int userId, int workId)
    String showNotifications(int userId)
    int checkRules(int userId, int workId)
    void removeRequestInterest(int workId, int userId)
    void setRequestInterest(int workId, int userId)
    void setAvailableInterest(int workId, int userId)
    boolean updateWorkInventory(int workId, int amount)
    boolean wasWorkRequested(int userId, int workId)
    void returnWork(int userId, int workId)
    int calculateFine(int userId, int workId)
    void notPayingFine(int userId, int fine)
    void payFine(int userId)

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

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

    private int _id

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

    int getId()
    abstract boolean check(User user, Work work)

  ###### Subclasses  ###### 
    CheckIsUserActive   CheckCategory   CheckAvailableCopy   CheckRequestTwice   CheckPrice   CheckAmountRequests   

   Method check(User, Work) overriden in subclass(es) CheckIsUserActive CheckCategory CheckAvailableCopy CheckRequestTwice CheckPrice CheckAmountRequests 
 [WriteClassStructure]
Auditoria completa.
