

####    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] 001/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] 001/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] 001/bci/core/Library.java:0:	POLooseCouplingRule:	Aplicação correcta (8) e incorrecta (0) do princípio Programar para abstracção no ficheiro Library.java.
[INFO] 001/bci/core/LibraryManager.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro LibraryManager.java.
[INFO] 001/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] 001/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


[WARN] 001/bci/core/Book.java:12:	MethodReturnsFieldCollectionRule:	Potencial fuga de privacidade (aceite) na classe Book: construtor atribui parâmetro 'creators' a atributo '_creators', mas construtor não é público
[INFO] 001/bci/core/Book.java:27:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em Book por uso de Collections.unmodifiableList para devolver vista imutável de _creators em método getCreators
[INFO] 001/bci/core/Creator.java:33:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em Creator por uso de Collections.unmodifiableCollection para devolver vista imutável de _works.values() em método getWorks
[INFO] 001/bci/core/Library.java:224:	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] 001/bci/core/Library.java:289:	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] 001/bci/core/User.java:122:	MethodReturnsFieldCollectionRule:	Fuga de privacidade evitada em User por uso de Collections.unmodifiableCollection para devolver vista imutável de _requests em método getRequests
Total de erros:  0
Total de fugas evitadas:        5


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


[WARN] 001/bci/core/Library.java:484:26: A expressão pode ser simplicada. [SimplifyBooleanExpression]
Total de erros:  0


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


Nada a assinalar


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

[ERROR] 001/bci/core/Dvd.java:9:33: A constante com o nome '_type' deve condizer com o padrão '^[A-Z][A-Z0-9]*(_[A-Z]+)*$'. [ConstantName]
[ERROR] 001/bci/core/Book.java:8:33: A constante com o nome '_type' deve condizer com o padrão '^[A-Z][A-Z0-9]*(_[A-Z]+)*$'. [ConstantName]
Total de erros:  2

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

Iniciando a auditoria...
[INFO] 001/bci/core/LibraryManager.java:116 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 001/bci/core/LibraryManager.java:152 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] 001/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]
[INFO] 001/bci/core/RuleCategoryNotReference.java:9 Comparação de valores enumerados via método equals. Normalmente, a comparação de valores enumerados pode ser realizada via operador ==. [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...
[INFO] 001/bci/core/Book.java:8 Atributo estático final 'String _type' permitido. [POStaticMember]
[INFO] 001/bci/core/Dvd.java:9 Atributo estático final 'String _type' permitido. [POStaticMember]
[INFO] 001/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 '30'. [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 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): '[Subject, 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, Behavior]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 33, dos quais 0 private, 1 package-private, 0 protected e 32 public. [WriteClassStructure]
[INFO] Classes abstractas definidas no package core da aplicação (2): '[Work, Rules]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (16): '[RuleMaxPrice, User, RuleCategoryNotReference, RuleAvailability, Creator, Notification, RuleUserIsSuspended, Book, MyParser, Request, Date, Dvd, RuleNumMaxRequests, RuleRequestTwice, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (15): '[UserIdNotFoundException, UnavailableFileException, UnrecognizedEntryException, CoreNotEnoughInventoryException, CoreBorrowingRuleFailedException, WorkIdNotFoundException, MissingFileAssociationException, CoreWorkNotBorrowedByUserException, UserHasDebtException, ImportFileException, InvalidUserIdException, CreatorIdNotFoundException, InvalidUserParametersException, CoreUserIsActiveException, InvalidWorkIdException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 125, dos quais 4 private, 81 package-private, 0 protected e 40 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 45, dos quais 45 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 _categoria

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

    String getCategoriaString()

 [WriteClassStructure]
[INFO] enum Behavior ( public )

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

    private final String _name
    private final int _limitOne
    private final int _limitFive
    private final int _limitMoreThanFive
    private final int _maxRequests

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

    String getName()
    int getLimitOne()
    int getLimitFive()
    int getLimitMoreThanFive()
    int getMaxRequests()
    Behavior updateBehavior(User user)

 [WriteClassStructure]
[INFO] interface Subject ( public )

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

    void addObserver(Observer observer)
    void removeObserver(Observer observer)
    void notifyObservers()

 [WriteClassStructure]
[INFO] interface Observer ( public )

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

    void update(Notification notification)

 [WriteClassStructure]
[INFO] class RuleMaxPrice ( public )
  extends Rules

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

    public int check(Work work, User user)

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

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

    private final int _idUser
    private final String _name
    private final String _email
    private boolean _active
    private int _deadlinesMet
    private int _deadlinesMissed
    private int _debt
    private final List<Request> _requests
    private final List<Notification> _notifications
    private Behavior _behavior

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

    String getName()
    String getEmail()
    int getUserId()
    boolean getStatus()
    void suspendUser()
    void activateUser()
    int getDeadlinesMet()
    void increaseDeadlinesMet()
    int getDeadlinesMissed()
    void increaseDeadlinesMissed()
    int getDebt()
    void addDebt(int debt)
    void resetDebt()
    Behavior getBehavior()
    void updateBehavior()
    public void update(Notification notification)
    void addRequest(Request request)
    void removeRequest(Request request)
    Collection<Request> getRequests()
    Collection<Notification> getNotifications()
    public String toString()

 [WriteClassStructure]
[INFO] class RuleCategoryNotReference ( public )
  extends Rules

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

    public int check(Work work, User user)

 [WriteClassStructure]
[INFO] class RuleAvailability ( public )
  extends Rules

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

    public int check(Work work, User user)

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

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

    private final String _name
    private final Map<Integer, Work> _works

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

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

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

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

    private final Work _work
    private final String _workToString

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

    Work getWork()
    public String toString()

 [WriteClassStructure]
[INFO] class RuleUserIsSuspended ( public )
  extends Rules

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

    public int check(Work work, User user)

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

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

    private final String _isbn
    private final List<Creator> _creators
    private final static String _type

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

    String getIsbn()
    String getType()
    Collection<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]  abstract class Work ( public implements Serializable, Subject )

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

    private int _numCopies
    private int _numCopiesAvailable
    private final int _idWork
    private final String _title
    private final int _price
    private final Category _category
    private final List<Observer> _observers

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

    int getNumCopies()
    int getNumCopiesAvailable()
    void reduceNumCopiesAvailable()
    void increaseNumCopiesAvailable()
    void updateNumCopies(int num)
    int getWorkId()
    String getTitle()
    int getPrice()
    Category getCategory()
    public void addObserver(Observer observer)
    public void removeObserver(Observer observer)
    public void notifyObservers()
    String getCommonFormat()
    abstract String getType()
    abstract Collection<Creator> getCreators()
    public abstract String toString()

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

   Method getType() overriden in subclass(es) Book Dvd 
   Method getCreators() overriden in subclass(es) Book Dvd 
   Method toString() overriden in subclass(es) Book Dvd 
 [WriteClassStructure]
[INFO] class Request ( public implements Serializable )

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

    private final int _idUser
    private final int _idWork
    private final int _deadline
    private int _daysPaid

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

    int getUserId()
    int getWorkId()
    int getDeadline()
    int isDelayed(int currentDate)
    void increaseDaysPaid(int num)

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

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

    private final int _numRule

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

    int getNum()
    public abstract int check(Work work, User user)

  ###### Subclasses  ###### 
    RuleMaxPrice   RuleCategoryNotReference   RuleAvailability   RuleUserIsSuspended   RuleNumMaxRequests   RuleRequestTwice   

   Method check(Work, User) overriden in subclass(es) RuleMaxPrice RuleCategoryNotReference RuleAvailability RuleUserIsSuspended RuleNumMaxRequests RuleRequestTwice 
 [WriteClassStructure]
[INFO] class Date ( public implements Serializable )

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

    private int _day

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

    int getCurrentDate()
    void advanceDate(int day)

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

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

    private final String _igac
    private final Creator _creator
    private final static String _type

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

    String getIgac()
    String getType()
    Collection<Creator> getCreators()
    public String toString()

 [WriteClassStructure]
[INFO] class RuleNumMaxRequests ( public )
  extends Rules

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

    public int check(Work work, User user)

 [WriteClassStructure]
[INFO] class RuleRequestTwice ( public )
  extends Rules

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

    public int check(Work work, User user)

 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private Library _library
    private String _filename

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

    public boolean isModified()
    public int getCurrentDateInt()
    public void advanceDays(int nDays)
    public int registerUser(String userName, String email)
    public User getUser(int idUser)
    public String getUserString(int idUser)
    public Collection<User> getUsers()
    public String getUsersString()
    public Work getWork(int idWork)
    public String getWorkString(int idWork)
    public Collection<Work> getWorks()
    public String getWorksString()
    public void changeWorkInventory(int idWork, int amount)
    public String getCreatorsWorks(String name)
    public String performSearch(String string)
    public int requestWork(int idUser, int idWork)
    public void returnWork(int idUser, int idWork)
    public void reactivateUser(int idUser)
    public void registerNotification(int idUser, int idWork)
    public String getNotificationsString(int idUser)
    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 final Map<Integer, User> _users
    private final Map<Integer, Work> _works
    private final Map<String, Creator> _creators
    private final List<Request> _requests
    private final List<Rules> _requestRules
    private int _nextWorkId
    private int _nextUserId
    private boolean _modified
    private Date _date

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

    void startRules()
    boolean isModified()
    void setModified(Boolean bool)
    int getCurrentDateInt()
    void advanceDays(int nDays)
    void checkDelays()
    User registerUser(String userName, String email)
    Book registerBook(int numCopies, String title, int price, Category category, List creators, String isbn)
    Dvd registerDvd(int numCopies, String title, int price, Category category, Creator creator, String igac)
    void addWork(Work work)
    Creator registerCreator(String name)
    User getUser(int idUser)
    String getUserString(int idUser)
    Collection<User> getUsers()
    String getUsersString()
    Work getWork(int idWork)
    String getWorkString(int idWork)
    Collection<Work> getWorks()
    String getWorksString()
    void changeWorkInventory(int idWork, int amount)
    void removeWork(int idWork, Work work)
    String getCreatorsWorks(String name)
    String performSearch(String string)
    Request requestWork(int idUser, int idWork)
    int getLoanPeriod(User user, Work work)
    void returnWork(int idUser, int idWork)
    void reactivateUser(int idUser)
    void registerNotification(int idUser, int idWork)
    String getNotificationsString(int idUser)
    void importFile(String filename)

 [WriteClassStructure]
Auditoria completa.
