

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

	 Uso do mecanismo de excepção como controlo de fluxo, lançar uma excepção demasiado genérica, apanhar uma excepção num bloco catch e lançar uma nova excepção do mesmo tipo ou a mesma excepção 

[ERROR] 026/bci/app/main/DoOpenMenuRequests.java:30:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.
[ERROR] 026/bci/app/main/DoOpenMenuUsers.java:24:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.
[ERROR] 026/bci/app/main/DoOpenMenuWorks.java:23:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.
Total de erros:  3


####    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] 026/bci/core/Library.java:22:15: O atributo com o nome 'nextCreatorId'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 026/bci/core/Library.java:23:15: O atributo com o nome 'nextWorkId'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 026/bci/core/Work.java:46:29: O método com o nome '_getType' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
Total de erros:  3

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

Iniciando a auditoria...
[INFO] 026/bci/core/LibraryManager.java:91 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 026/bci/core/LibraryManager.java:113 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 026/bci/core/LibraryManager.java:145 ObjectInputStream criado no método 'public void load(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[ERROR] Número errado de instâncias criadas de 'ObjectOutputStream'. Devia ser 1 e é '2'. [CheckSerialization]
Auditoria completa.
O Checkstyle terminou com 1 erros.

####  Verificação do princípio de desenho aberto/fechado

Iniciando a auditoria...
[WARN] 026/bci/core/Book.java:67 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'category' comparada '3' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 026/bci/core/Dvd.java:47 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'category' comparada '3' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 026/bci/core/MyParser.java:60 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] 026/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 '18'. [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

Iniciando a auditoria...
[ERROR] Nível de acesso incorrecto (protected) nos seguintes membros '[isActive, getUserId, getUserName, getUserEmail, getUserFine, getUserBehavior, getDescription]' da classe 'User' dado que não envolve o mecanismo de herança [WriteClassStructure]
[ERROR] Nível de acesso incorrecto (protected) nos seguintes membros '[getName, getId, add, remove, works]' da classe 'Creator' dado que não envolve o mecanismo de herança [WriteClassStructure]
[ERROR] Nível de acesso incorrecto (protected) nos seguintes membros '[isbn, creatorNamesToString]' da classe 'Book' dado que não envolve o mecanismo de herança [WriteClassStructure]
Auditoria completa.
O Checkstyle terminou com 3 erros.

####  Verificação do mecanismo de herança II: atributos duplicados e métodos que deviam ser abstractos

Iniciando a auditoria...
[ERROR] Attribute '_currentDate' specified in superclass 'Library' duplicated in subclass 'Date'. [WriteClassStructure]
[INFO] Os métodos '[getCurrentDate, advanceDays]' estão a ser substituídos em todas as classes derivadas de 'Library'. Talvez a classe possa ser abstracta. [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 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: 13, dos quais 0 private, 1 package-private, 0 protected e 12 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 (8): '[User, Creator, Date, Dvd, Book, MyParser, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (4): '[MissingFileAssociationException, UnavailableFileException, ImportFileException, UnrecognizedEntryException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 88, dos quais 5 private, 2 package-private, 53 protected e 28 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 32, dos quais 32 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 )

 [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

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

    protected boolean isActive()
    protected int getUserId()
    protected String getUserName()
    protected String getUserEmail()
    protected int getUserFine()
    protected UserBehavior getUserBehavior()
    protected String getDescription()

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

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

    private final String _name
    private Work[] _works
    private final int _id

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

    protected String getName()
    protected int getId()
    protected void add(Work work)
    protected void remove(Work work)
    protected Collection<Work> works()

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

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

    private int _currentDate

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

    protected int getCurrentDate()
    protected void advanceDays(int nDays)

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

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

    private final String _igac

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

    public String toString()
    protected String _getType()
    protected String getAditionalInfo()
    protected String categoryToString(Category category)

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

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

    private final String _isbn

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

    protected String isbn()
    public String toString()
    protected String _getType()
    protected String creatorNamesToString()
    protected String getAditionalInfo()
    protected String categoryToString(Category category)

 [WriteClassStructure]
[INFO] class MyParser (  )

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

    private final 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)
    private int parseInt(String str, String field, String line)

 [WriteClassStructure]
[INFO]  abstract class Work ( public implements Serializable, Comparable<Work> )

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

    private final int _id
    private final String _title
    private final Creator[] _creator
    private int _numOfCopies
    private final int _price
    private int _totalCopies
    private final Category _category

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

    protected int getIdWork()
    protected String getTitle()
    protected Creator[] getCreator()
    protected Category getCategory()
    public int compareTo(Work work)
    public abstract String toString()
    protected abstract String _getType()
    protected abstract String getAditionalInfo()
    protected abstract String categoryToString(Category category)
    protected String getDescription()

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

   Method toString() overriden in subclass(es) Dvd Book 
   Method _getType() overriden in subclass(es) Dvd Book 
   Method getAditionalInfo() overriden in subclass(es) Dvd Book 
   Method categoryToString(Category) overriden in subclass(es) Dvd Book 
 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private final Date _date
    private int _userId
    private boolean _modified
    private String _filename
    private Library _library

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

    public User getUser(int idUser)
    public int getCurrentDate()
    public int getUserIdLibrary()
    public String getWork(int id)
    public boolean hasAssociatedFile()
    public boolean isModified()
    public void setModified(boolean mod)
    public List<String> getWorkDescriptions()
    public List<String> getUserDescriptions()
    public String getUserDescription(int idUser)
    public List<String> getDescriptionsByCreator(String name)
    public List<Work> getWorksByCreator(String name)
    public boolean findCreator(String name)
    public boolean findUser(int idUser)
    public boolean findWork(int idWork)
    public void incrementUserIdLibraryManager()
    public void advanceDays(int n)
    public void save()
    public void saveAs(String filename)
    public int registerUser(String name, String email)
    public void load(String filename)
    public Work registerBook(int id, int price, int numOfCopies, String title, Creator creator, Category category, String isbn)
    public Work registerDvd(int id, int price, int numOfCopies, String title, Creator creator, Category category, String igac)
    public void importFile(String datafile)

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

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

    private int _currentDate
    private final List<User> _userList
    private int _userId
    private final Map<Integer, Work> _works
    private final Map<String, Creator> _creatorsByName
    private int nextCreatorId
    private int nextWorkId

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

    protected int getNextWorkId()
    protected int getCurrentDate()
    protected List<User> getUserList()
    protected void incrementUserIdLibrary()
    protected List<User> getUsers()
    protected int getUserIdLibrary()
    protected boolean findWork(int id)
    protected void advanceDays(int n)
    protected void addWork(Work work)
    protected boolean findCreator(String name)
    protected boolean findUser(int idUser)
    protected List<Work> getWorks()
    protected List<Work> getWorksByCreator(String name)
    protected List<String> getDescriptionsByCreator(String name)
    protected List<String> getWorkDescriptions()
    protected String getWork(int id)
    protected Work registerBook(int id, int price, int numOfCopies, String title, Creator creator, Category category, String isbn)
    protected Work registerDvd(int id, int price, int numOfCopies, String title, Creator creator, Category category, String igac)
    protected Creator registerCreator(String name)
    protected String getUserDescription(int idUser)
    protected List<String> getUserDescriptions()
    protected User registerUser(String userName, String email)
    protected User getUser(int idUser)
    void importFile(String filename)

  ###### Subclasses  ###### 
    Date   

   Method getCurrentDate() overriden in subclass(es) Date 
   Method advanceDays(int) overriden in subclass(es) Date 
 [WriteClassStructure]
Auditoria completa.
