

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


Nada a assinalar


####    Quebra do encapsulamento


Nada a assinalar


####    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] 025/bci/core/LibraryManager.java:39:34: O atributo com o nome 'compareUsersByName'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 025/bci/core/LibraryManager.java:64:34: O atributo com o nome 'compareWorksById'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 025/bci/core/LibraryManager.java:77:34: O atributo com o nome 'compareWorksByTitle'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
Total de erros:  3

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

Iniciando a auditoria...
[INFO] 025/bci/core/LibraryManager.java:130 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 025/bci/core/LibraryManager.java:173 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] 025/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]
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] 025/bci/core/model/Book.java:42 uso desnecessário de super para invocar método 'getDescription' da super classe. [AvoidUselessSuper]
[WARN] 025/bci/core/model/Dvd.java:25 uso desnecessário de super para invocar método 'getDescription' 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] 025/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

Iniciando a auditoria...
[ERROR] 025/bci/core/exception/EmailAlreadyExistsException.java:5 O atributo '_email', com nível de acesso 'package', deveria ser privado e ter métodos acessores. [POVisibilityModifier]
[ERROR] 025/bci/core/exception/NoSuchCreatorNameException.java:4 O atributo '_name', com nível de acesso 'package', deveria ser privado e ter métodos acessores. [POVisibilityModifier]
[ERROR] 025/bci/core/exception/NoSuchObjectWithIdException.java:4 O atributo '_id', com nível de acesso 'package', deveria ser privado e ter métodos acessores. [POVisibilityModifier]
Auditoria completa.
O Checkstyle terminou com 3 erros.

####  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, UserBehavior]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 18, dos quais 0 private, 1 package-private, 0 protected e 17 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, Creator, Notification, Date, Dvd, Book, MyParser, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (8): '[UsernameFieldsCannotBeEmptyException, MissingFileAssociationException, EmailAlreadyExistsException, NoSuchCreatorNameException, UnavailableFileException, NoSuchObjectWithIdException, ImportFileException, UnrecognizedEntryException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 69, dos quais 4 private, 18 package-private, 1 protected e 46 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 35, dos quais 35 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 _displayValue

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

    public String getDisplayValue()

 [WriteClassStructure]
[INFO] enum UserBehavior ( public )

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

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

    private final int _id
    private boolean _isActive
    private final String _name
    private final String _email
    private int _fine
    private UserBehavior _behavior
    private List<Notification> _notifications

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

    public int getId()
    boolean getIsActive()
    public boolean setActive(boolean active)
    public String getName()
    public String getEmail()
    public int getFine()
    public void setFine(int euros)
    public List<Notification> getNotification()
    public String toString()

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

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

    private final String _name

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

    public boolean equals(Object o)
    public int hashCode()
    public String getName()

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

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

    private String _message

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

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

    private int _currentDate

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

    int getCurrentDate()
    void advanceDate(int days)

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

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

    private final String _igac
    private Creator _director

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

    public String getIgac()
    public Creator getDirector()
    public String getType()
    public String toString()

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

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

    private final String _isbn
    private Set<Creator> _authors

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

    public Collection<Creator> getAuthors()
    public String getIsbn()
    public 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 Serializable )

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

    private final int _id
    private int _price
    private final String _title
    private Category _category
    private int _numberOfCopies
    private int _onLoan

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

    public int getId()
    public int getPrice()
    public String getTitle()
    public Category getCategory()
    public int getNumOfCopies()
    public int getOnLoan()
    public int getAvailable()
    public abstract String getType()
    protected String getDescription()
    public abstract String toString()

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

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

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

    private Library _library
    private String _fileName
    private final Comparator<User> compareUsersByName
    private final Comparator<Work> compareWorksById
    private final Comparator<Work> compareWorksByTitle

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

    public boolean isLibraryModified()
    public int registerUser(String user, String email)
    public User getUser(int id)
    public List<User> getOrderedUsers()
    public Work getWork(int id)
    public void setFilename(String filename)
    public String getFilename()
    public List<Work> getWorksById()
    public List<Work> getWorksByCreator(String creatorName)
    public int getCurrentDate()
    public void advanceDate(int days)
    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 _nextWorkId
    private int _nextUserId
    private boolean _modified
    private Date _currentDate
    private Map<Integer, User> _usersById
    private Map<String, User> _usersByEmail
    private Map<Integer, Work> _works
    private Map<String, Creator> _creatorsByName
    private Map<Creator, Set<Work>> _worksByCreator

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

    boolean isModified()
    void setModified()
    void resetModified()
    User registerUser(String userName, String email)
    public void updateUserStatus()
    Creator registerCreator(String name)
    Creator getCreatorByName(String name)
    Set<Work> getWorksOfCreator(Creator c)
    void registerDvd(String title, Creator director, int price, Category categ, String igac, int nCopies)
    void registerBook(String title, Collection authors, int price, Category categ, String isbn, int nCopies)
    User getUser(int id)
    Collection<User> getAllUsers()
    Work getWork(int id)
    Collection<Work> getAllWorks()
    public int getCurrentDate()
    public void advanceDate(int days)
    void importFile(String filename)

 [WriteClassStructure]
Auditoria completa.
