

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


Nada a assinalar


####    Quebra do encapsulamento


[ERROR] 004/bci/core/User.java:89:	MethodReturnsFieldCollectionRule:	Possível quebra de encapsulamento na classe User com o método getRequests a devolver um Map
Total de erros:  1


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


[ERROR] 004/bci/core/Library.java:444:5: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por 'list' (do tipo 'List<T>'). 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]
[ERROR] 004/bci/core/Book.java:41:9: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por '_authors' (do tipo 'List<Creator>'). 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

[ERROR] 004/bci/core/Date.java:14:78: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
Total de erros:  1

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

Iniciando a auditoria...
[INFO] 004/bci/core/LibraryManager.java:24 ObjectOutputStream criado no método 'private void serialize()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 004/bci/core/LibraryManager.java:75 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:8 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/Library.java:476 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'user.getUserBehaviour()' comparada '2' 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]
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] 004/bci/core/Book.java:35 uso desnecessário de super para invocar método 'descPart1' da super classe. [AvoidUselessSuper]
[WARN] 004/bci/core/Book.java:36 uso desnecessário de super para invocar método 'descPart2' da super classe. [AvoidUselessSuper]
[WARN] 004/bci/core/Dvd.java:29 uso desnecessário de super para invocar método 'descPart1' da super classe. [AvoidUselessSuper]
[WARN] 004/bci/core/Dvd.java:31 uso desnecessário de super para invocar método 'descPart2' 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...
[INFO] 004/bci/core/Library.java:20 Atributo estático final 'int LAST_REQS_FOR_FALTOSO' permitido. [POStaticMember]
[INFO] 004/bci/core/Library.java:21 Atributo estático final 'int LAST_REQS_FOR_CUMPRIDOR' permitido. [POStaticMember]
[INFO] 004/bci/core/Library.java:22 Atributo estático final 'int MAX_LEN_OF_LAST_REQS' permitido. [POStaticMember]
[INFO] 004/bci/core/Library.java:23 Atributo estático final 'int STREAK_TO_NORMAL' permitido. [POStaticMember]
[INFO] 004/bci/core/Library.java:24 Atributo estático final 'int FINE_EACH_DAY_LATE' permitido. [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.

####  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 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: 19, dos quais 0 private, 1 package-private, 0 protected e 18 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 (9): '[User, Request, Creator, Date, Dvd, Book, MyParser, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (9): '[MissingFileAssociationException, WorkNotBorrowedByUserException, UserIsActiveException, UnavailableFileException, ImportFileException, NoSuchCreatorIdException, UnrecognizedEntryException, NoSuchUserIdException, NoSuchWorkIdException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 119, dos quais 18 private, 77 package-private, 2 protected e 22 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 44, dos quais 39 private, 0 package-private, 0 protected e 5 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] 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 Map<Integer, Request> _reqs
    private int _lateWorks
    private List<Request> _lastReqs
    private int _onTimeStreak

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

    User copy()
    public String toString()
    int getLastRequestsSize()
    Collection<Request> getLastRequests()
    void addRequest(Request request)
    void removeFromLastRequests(Request request)
    void returnRequest(int workId)
    Request getRequest(int workId)
    boolean wasWorkRequested(int workId)
    int getUserId()
    String getName()
    String getEmail()
    int getFine()
    boolean isActive()
    UserBehaviour getUserBehaviour()
    private Map<Integer, Request> getRequests()
    int getLateWorks()
    void changeFine(int amount)
    void setActive()
    void setSuspended()
    void setUserBehaviour(UserBehaviour behaviour)
    void changeLateWorks(int amount)
    int getOnTimeStreak()
    void increaseOnTimeStreak()
    void resetOnTimeStreak()

 [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 ###### 

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

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

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

    private final String _name
    private List<Work> _works

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

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

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

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

    private int _currentDay
    private int _lastDay

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

    int getCurrentDay()
    int getLastDay()
    void advanceDays(int nDays)

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

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

    private Creator _director
    private String _igac

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

    Work copy()
    String getIgac()
    Creator getDirector()
    public String toString()

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

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

    private List<Creator> _authors
    private String _isbn

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

    Work copy()
    String getIsbn()
    Collection<Creator> getAuthors()
    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 )

  ###### 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()
    int getPrice()
    void setPrice(int price)
    int getTotalCopies()
    void setTotalCopies(int totalCopies)
    int getAvailableCopies()
    void setAvailableCopies(int availableCopies)
    Category getCategory()
    protected String descPart1()
    protected String descPart2()
    public abstract String toString()
    abstract Work copy()

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

   Method toString() overriden in subclass(es) Dvd Book 
   Method copy() overriden in subclass(es) Dvd Book 
 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private Library _library
    private String _filename

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

    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)
    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 setActiveIfEligible(int userId)
    public void payFine(int userId)

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

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

    public final static int LAST_REQS_FOR_FALTOSO
    public final static int LAST_REQS_FOR_CUMPRIDOR
    public final static int MAX_LEN_OF_LAST_REQS
    public final static int STREAK_TO_NORMAL
    public final static int FINE_EACH_DAY_LATE
    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 int _nextWorkId
    private int _nextUserId

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

    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()
    private Date getCurrentDate()
    int getCurrentDay()
    void advanceDays(int nDays)
    private Collection<Request> getLateRequests(int currentDay)
    private void manageLateRequests(int currentDay)
    private boolean checkForFaltoso(User user, Request request)
    private boolean checkForCumpridor(User user, Request request)
    private Work getWorkById(int workId)
    String showWork(int workId)
    String showAllWorks()
    void addCreator(Creator creator)
    void removeCreatorWork(String creatorId, Work work)
    private void removeCreator(Creator creator)
    private Creator getCreatorById(String creatorId)
    String showCreatorWorks(String creatorId)
    private String stringBuilder(Collection coll, Comparator comp)
    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 setActiveIfEligible(int userId)
    void payFine(int userId)

 [WriteClassStructure]
Auditoria completa.
