

####    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] 062/bci/app/work/DoDisplayWork.java:31:	AvoidThrowingNewInstanceOfSameException:	Deve evitar blocos catch que apenas apanham uma excepção apenas para a relançar.
[ERROR] 062/bci/core/Parser.java:55:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.

	 Blocos catch's iguais ou vazios (incluindo neste casos blocos try e finaly vazios)

[ERROR] 062/bci/app/main/DoAdvanceDate.java:28:	EmptyCatchBlock:	Evitar blocos catch vazios.
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] 062/bci/core/Library.java:220:99: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
[ERROR] 062/bci/core/Library.java:222:81: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
[ERROR] 062/bci/app/work/DoDisplayWork.java:9:42: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
Total de erros:  3

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

Iniciando a auditoria...
[INFO] 062/bci/core/LibraryManager.java:33 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 062/bci/core/LibraryManager.java:62 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...
[ERROR] 062/bci/core/Library.java:214 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 062/bci/core/Library.java:219 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 062/bci/core/Library.java:221 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 062/bci/core/Library.java:227 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[WARN] 062/bci/core/Parser.java:28 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]
[WARN] 062/bci/core/Work.java:59 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão '_category' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
Auditoria completa.
O Checkstyle terminou com 4 erros.

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

Iniciando a auditoria...
[WARN] 062/bci/core/Library.java:7 import 'bci.app.exception.NoSuchCreatorException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 062/bci/core/Library.java:8 import 'bci.app.exception.NoSuchUserException' não permitido na classe 'Library'. [POCoreImport]
[WARN] 062/bci/core/Library.java:9 import 'bci.app.exception.NoSuchWorkException' não permitido na classe 'Library'. [POCoreImport]
[ERROR] 062/bci/core/Library.java:147 Classe 'NoSuchWorkException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
[ERROR] 062/bci/core/Library.java:150 instanciação do tipo 'NoSuchWorkException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 062/bci/core/Library.java:175 Classe 'NoSuchUserException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
[ERROR] 062/bci/core/Library.java:177 instanciação do tipo 'NoSuchUserException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 062/bci/core/Library.java:202 Classe 'NoSuchCreatorException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
[ERROR] 062/bci/core/Library.java:207 instanciação do tipo 'NoSuchCreatorException' não permitido em classes da camada de domínio. [POCoreImport]
[WARN] 062/bci/core/LibraryManager.java:3 import 'bci.app.exception.NoSuchCreatorException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 062/bci/core/LibraryManager.java:4 import 'bci.app.exception.NoSuchUserException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 062/bci/core/LibraryManager.java:5 import 'bci.app.exception.NoSuchWorkException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 062/bci/core/LibraryManager.java:6 import 'bci.app.exception.UserRegistrationFailedException' não permitido na classe 'LibraryManager'. [POCoreImport]
[ERROR] 062/bci/core/LibraryManager.java:95 Classe 'UserRegistrationFailedException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
[ERROR] 062/bci/core/LibraryManager.java:99 instanciação do tipo 'UserRegistrationFailedException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 062/bci/core/LibraryManager.java:104 Classe 'NoSuchUserException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
[ERROR] 062/bci/core/LibraryManager.java:112 Classe 'NoSuchWorkException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
[ERROR] 062/bci/core/LibraryManager.java:120 Classe 'NoSuchCreatorException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
Auditoria completa.
O Checkstyle terminou com 11 erros.

####  Verificação do uso de membros estáticos

Iniciando a auditoria...
[ERROR] 062/bci/core/Library.java:43 Membro estático 'private static String normalizeName(String s)' não recomendável. [POStaticMember]
[INFO] 062/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.
O Checkstyle terminou com 1 erros.

####  Verificação do nível de acesso dos atributos


Nada a assinalar


####  Verificação da necessidade da concretização de hashCode e equals

Iniciando a auditoria...
[WARN] Possível erro: A classe 'Work' utilizada no atributo 'private final Set<Work> _works' da classe 'Creator' não substitui os métodos hashCode e equals. [WriteClassStructure]
Auditoria completa.

####  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: 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): 65, dos quais 5 private, 15 package-private, 7 protected e 38 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 28, dos quais 28 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 int _id
    private boolean _isActive
    private String _name
    private String _email
    private UserBehavior _behavior

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

    public int getId()
    public String getName()
    public String getEmail()
    public UserBehavior getBehavior()
    public boolean isActive()
    public String toString()

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

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

    private String _name
    private final Set<Work> _works

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

    String getName()
    boolean addWork(Work w)
    boolean removeWork(Work w)
    Collection<Work> works()
    boolean hasNoWork()
    public String toString()
    public boolean equals(Object o)
    public int hashCode()

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

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

    private int _currentDate

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

    int getCurrentDate()
    void advanceDays(int nDays)

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

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

    private final Creator _director
    private final String _igac

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

    public Creator getDirector()
    public String getIgac()
    protected String typeName()
    protected String additionalInfo()

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

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

    private final List<String> _authors
    private final String _isbn

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

    public List<String> getAuthors()
    public String getIsbn()
    protected String typeName()
    protected String additionalInfo()

 [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 int _id
    private int _price
    private int _numberOfCopies
    private String _title
    private int _totalCopies
    private int _availableCopies
    private final Category _category

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

    public int getId()
    public int getPrice()
    public int getNumberOfCopies()
    public String getTitle()
    public int getTotalCopies()
    public int getAvailableCopies()
    public Category getCategory()
    protected abstract String typeName()
    protected abstract String additionalInfo()
    protected String categoryLabel()
    public String toString()

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

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

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

    private Library _library
    private String _filename

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

    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String filename)
    public int getCurrentDate()
    public void advanceDays(int nDays)
    public int registerUser(String name, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public Work getWork(int id)
    public List<Work> getWorks()
    public List<Work> getWorksByCreator(String name)

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

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

    private Date _currentDate
    private int _nextWorkId
    private int _nextUserId
    private final Map<Integer, Work> _works
    private final Map<Integer, User> _users
    private final Map<String, Creator> _creators

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

    private static String normalizeName(String s)
    int getCurrentDate()
    void advanceDays(int nDays)
    Dvd registerDvd(String title, Creator director, int price, Category category, String igac, int nCopies)
    Creator registerCreator(String name)
    Book registerBook(String title, List authors, int price, Category category, String isbn, int nCopies)
    void importFile(String filename)
    public List<Work> getWorks()
    public Work getWork(int id)
    User createUser(String name, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public List<Work> getWorksByCreator(String name)

 [WriteClassStructure]
Auditoria completa.
