

####    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] 073/bci/core/Book.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (1) do princípio Programar para abstracção no ficheiro Book.java.
[ERROR] 073/bci/core/Book.java:10:	POLooseCouplingRule:	Erro: Evite declarar variáveis utilizando tipos concretos como 'ArrayList'; Em vez do tipo concreto utilize a interface.
[INFO] 073/bci/core/Creator.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (1) do princípio Programar para abstracção no ficheiro Creator.java.
[ERROR] 073/bci/core/Creator.java:8:	POLooseCouplingRule:	Erro: Evite declarar variáveis utilizando tipos concretos como 'ArrayList'; Em vez do tipo concreto utilize a interface.
[INFO] 073/bci/core/Library.java:0:	POLooseCouplingRule:	Aplicação correcta (9) e incorrecta (0) do princípio Programar para abstracção no ficheiro Library.java.
[INFO] 073/bci/core/LibraryManager.java:0:	POLooseCouplingRule:	Aplicação correcta (4) e incorrecta (0) do princípio Programar para abstracção no ficheiro LibraryManager.java.
[INFO] 073/bci/core/Subject.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (0) do princípio Programar para abstracção no ficheiro Subject.java.
[INFO] 073/bci/core/User.java:0:	POLooseCouplingRule:	Aplicação correcta (4) e incorrecta (1) do princípio Programar para abstracção no ficheiro User.java.
[ERROR] 073/bci/core/User.java:15:	POLooseCouplingRule:	Erro: Evite declarar variáveis utilizando tipos concretos como 'LinkedList'; Em vez do tipo concreto utilize a interface.
[INFO] 073/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:  3


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


[ERROR] 073/bci/core/Book.java:13:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe Book - atribui parâmetro (creators) a atributo (this._creators)
[INFO] 073/bci/core/Book.java:17:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Book evitada por criação de cópia (new ArrayList) de _creators no método creators.
[INFO] 073/bci/core/Library.java:263:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Library evitada por criação de cópia (new ArrayList) de _works.values() no método works.
[INFO] 073/bci/core/User.java:45:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe User evitada por criação de cópia (new ArrayList) de _requests no método requests.
Total de erros:  1
Total de fugas evitadas:        3


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


[ERROR] 073/bci/core/Library.java:328:73: Possível uso inválido de entrySet() para iterar um mapa. Utilize antes values() ou keySet(). [POCheckEntrySetCallRule]
[ERROR] 073/bci/core/User.java:156:9: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por '_lateHistory' (do tipo 'LinkedList<Boolean>'). Substituir por ciclo for-each ou usar um iterador dado que a utilização do método get pode ser muito ineficiente neste caso. [POIterateListWithForLoop]
Total de erros:  2


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


Nada a assinalar


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

Nada a assinalar

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

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

####  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: 3, dos quais 0 private, 0 package-private, 0 protected e 3 public. [WriteClassStructure]
[INFO] Interfaces definidos no package core da aplicação (3): '[ClassUserState, Observer, Rule]'. [WriteClassStructure]
[INFO] Número total de enumerados definidos no core: 1, dos quais 0 private, 0 package-private, 0 protected e 1 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (1): '[Category]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 28, dos quais 0 private, 1 package-private, 0 protected e 27 public. [WriteClassStructure]
[INFO] Classes abstractas definidas no package core da aplicação (1): '[Work]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (19): '[User, CumpridorState, Creator, Notification, RuleF, FaltosoState, RuleD, RuleE, Book, MyParser, RuleB, RuleC, RuleA, NormalState, Request, Subject, Dvd, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (8): '[RuleThreeException, UnavailableFileException, BorrowingRuleFailedCoreException, UnrecognizedEntryException, MissingFileAssociationException, AlreadyExistsException, ImportFileException, WorkNotBorrowedException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 153, dos quais 4 private, 2 package-private, 0 protected e 147 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 38, dos quais 38 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] interface ClassUserState ( public )

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

    public String toString()
    public int calculateDeadline(Work work)
    public int maxRequests()
    public boolean canRequestWork(Work work)
    public ClassUserState normal()
    public ClassUserState cumpridor()
    public ClassUserState faltoso()

 [WriteClassStructure]
[INFO] interface Observer ( public )

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

    void update(Work work, String type)

 [WriteClassStructure]
[INFO] interface Rule ( public )

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

    public boolean check(Work work, User user)

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

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

    private int _id
    private final String _name
    private final String _email
    private boolean _active
    private int _debt
    private ClassUserState _classUser
    private List<Request> _requests
    private List<Notification> _notifications
    private LinkedList<Boolean> _lateHistory

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

    public int hashCode()
    public boolean equals(Object o)
    public String name()
    public List<Request> requests()
    public void activateUser()
    public void suspendUser()
    public int id()
    public void setId(int id)
    public boolean active()
    public int debt()
    public void payFine(int currentDay)
    public String hasDebt()
    public ClassUserState classUser()
    public void setCumpridor()
    public void setNormal()
    public void setFaltoso()
    public void requestWork(Work work, int lastDay)
    public void returnWork(Work work, int currentDay)
    public void addToHistory(boolean late)
    public void updateClassUser()
    public boolean endsWithPattern(boolean value, int count)
    public void updateActiveStatus(int currentDay)
    public boolean hasLateWorks(int currentDay)
    public void update(Work work, String type)
    public List<Notification> notifications()
    public String toString()

 [WriteClassStructure]
[INFO] class CumpridorState ( public implements ClassUserState, Serializable )

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

    public ClassUserState normal()
    public ClassUserState cumpridor()
    public ClassUserState faltoso()
    public String toString()
    public int calculateDeadline(Work work)
    public int maxRequests()
    public boolean canRequestWork(Work work)

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

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

    private final String _name
    private ArrayList<Work> _works

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

    public void addWork(Work work)
    public void removeWork(Work work)
    public String name()
    public List<Work> works()
    public int compare(Work workA, Work workB)
    public boolean equals(Object o)
    public int hashCode()

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

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

    private final String _message

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

    public String toString()

 [WriteClassStructure]
[INFO] class RuleF ( public implements Rule, Serializable )

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

    public boolean check(Work work, User user)

 [WriteClassStructure]
[INFO] class FaltosoState ( public implements ClassUserState, Serializable )

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

    public ClassUserState normal()
    public ClassUserState cumpridor()
    public ClassUserState faltoso()
    public String toString()
    public int calculateDeadline(Work work)
    public int maxRequests()
    public boolean canRequestWork(Work work)

 [WriteClassStructure]
[INFO] class RuleD ( public implements Rule, Serializable )

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

    public boolean check(Work work, User user)

 [WriteClassStructure]
[INFO] class RuleE ( public implements Rule, Serializable )

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

    public boolean check(Work work, User user)

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

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

    private final String _isbn
    private final List<Creator> _creators

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

    public List<Creator> creators()
    public String creatorsString()
    public String toString()
    public boolean compareSearch(String term)
    public void removeFromCreators(Library library)

 [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 )
  extends Subject

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

    private final int _workNr
    private final int _price
    private int _rented
    private int _amount
    private final String _title
    private final Category _category
    private List<Observer> _requestObservers
    private List<Observer> _availabilityObservers

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

    public int hashCode()
    public boolean equals(Object obj)
    public void setAmount(int amount)
    public int amount()
    public int price()
    public String category()
    public String title()
    public void rented()
    public void returned()
    public int workNr()
    public int available()
    public void addRequestObserver(Observer obs)
    public void addAvailabilityObserver(Observer obs)
    public void notifyRequestObservers()
    public void notifyAvailabilityObservers()
    public abstract String toString()
    public abstract boolean compareSearch(String term)
    public abstract void removeFromCreators(Library library)

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

   Method toString() overriden in subclass(es) Book Dvd 
   Method compareSearch(String) overriden in subclass(es) Book Dvd 
   Method removeFromCreators(Library) overriden in subclass(es) Book Dvd 
 [WriteClassStructure]
[INFO] class RuleB ( public implements Rule, Serializable )

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

    public boolean check(Work work, User user)

 [WriteClassStructure]
[INFO] class RuleC ( public implements Rule, Serializable )

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

    public boolean check(Work work, User user)

 [WriteClassStructure]
[INFO] class RuleA ( public implements Rule, Serializable )

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

    public boolean check(Work work, User user)

 [WriteClassStructure]
[INFO] class NormalState ( public implements ClassUserState, Serializable )

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

    public ClassUserState normal()
    public ClassUserState cumpridor()
    public ClassUserState faltoso()
    public String toString()
    public int calculateDeadline(Work work)
    public int maxRequests()
    public boolean canRequestWork(Work work)

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

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

    private int _lastDay
    private final Work _work

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

    public Work work()
    public int getLastDay()

 [WriteClassStructure]
[INFO] class Subject ( public )

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

    private final List<Observer> _observers

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

    public void registerObserver(Observer observer)
    public void removeObserver(Observer observer)
    public void notifyObservers(Work work, String type)

  ###### Subclasses  ###### 
    Work   Request   

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

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

    private final String _igac
    private final String _creator

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

    public String toString()
    public boolean compareSearch(String term)
    public void removeFromCreators(Library library)

 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private Library _library

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

    public Library currentLibrary()
    public boolean isChanged()
    public int displayDate()
    public void advanceDate(int days)
    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String filename)
    public Library getLibrary()
    public void registerUser(String name, String email)
    public Creator registerCreator(String name)
    public void notifyUser(int id)
    public User user(int id)
    public List<User> users()
    public Work work(int id)
    public List<Work> works()
    public List<Work> worksCreator(String creatorName)
    public void setWorkAmount(int id, int amount)
    public List<Work> searchWorks(String term)
    public int calculateDeadLine(int userId, int workId)
    public boolean check(Work work, User user)
    public void request(int userId, int workId, int day)
    public void returnWork(int userId, int workId)
    public void addAvailabilityInterest(int userId, int workId)
    public void addRequestInterest(int userId, int workId)
    public void findBorrowedRequest(int userId, int workId)

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

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

    private int _currentDay
    private int _currentWorks
    private int _currentUsers
    private boolean _changed
    private String _filename
    private Map<Integer, Work> _works
    private Map<String, Creator> _creators
    private Map<Integer, User> _users
    private List<Rule> _rules

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

    void importFile(String filename)
    public boolean isChanged()
    public void setChanged(boolean changed)
    public String getFilename()
    public void setFilename(String filename)
    public void advanceDate(int days)
    public int displayDate()
    public int currentUsers()
    public int currentWorks()
    public boolean hasCreator(String name)
    public void registerUser(String name, String email)
    public Creator registerCreator(String name)
    public void registerDvd(String title, String creator, int price, Category category, int nCopies, String igac)
    public void registerBook(String title, List creators, int price, Category category, int nCopies, String isbn)
    public User user(int id)
    public List<User> users()
    public int compare(User userA, User userB)
    public List<Work> works()
    public Work work(int id)
    public Creator creator(String creatorName)
    public List<Work> worksCreator(String creatorName)
    public void setWorkAmount(int workId, int amount)
    public void removeWork(int workId)
    public List<Work> searchWorks(String term)
    public int calculateFine(Request request)
    public int calculateDeadLine(int userId, int workId)
    public boolean check(Work work, User user)
    public void request(int userId, int workId, int day)
    public void returnWork(int userId, int workId)
    public void findBorrowedRequest(int userId, int workId)

 [WriteClassStructure]
Auditoria completa.
