

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

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

[ERROR] 071/bci/app/main/DoSaveFile.java:29:	EmptyCatchBlock:	Evitar blocos catch vazios.
[ERROR] 071/bci/app/main/DoSaveFile.java:32:	EmptyCatchBlock:	Evitar blocos catch vazios.
Total de erros:  4


####    Quebra do encapsulamento


Nada a assinalar


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


[ERROR] 071/bci/core/Livro.java:32:9: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por 'criadores' (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:  1


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


Nada a assinalar


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

[ERROR] 071/bci/core/LibraryManager.java:37:31: O parâmetro 'IdUt' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
[ERROR] 071/bci/core/Library.java:42:31: O parâmetro 'IdUt' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
[ERROR] 071/bci/core/Date.java:5:31: A constante com o nome '_instance' deve condizer com o padrão '^[A-Z][A-Z0-9]*(_[A-Z]+)*$'. [ConstantName]
[ERROR] 071/bci/core/Date.java:17:17: O método com o nome 'AdvanceDate' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 071/bci/app/user/DoRegisterUser.java:23:12: A variável local com o nome '_nome'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 071/bci/app/user/DoRegisterUser.java:24:12: A variável local com o nome '_email'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 071/bci/app/user/DoShowUser.java:22:9: A variável local com o nome '_idUt'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 071/bci/app/work/DoDisplayWork.java:22:9: A variável local com o nome '_idObra'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 071/bci/app/main/DoAdvanceDate.java:19:9: A variável local com o nome '_days'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 071/bci/app/main/DoAdvanceDate.java:22:12: A variável local com o nome '_date'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 071/bci/app/main/DoDisplayDate.java:19:10: A variável local com o nome '_date'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 071/bci/app/main/DoSaveFile.java:25:14: A variável local com o nome 'Filename'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
Total de erros:  12

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

Iniciando a auditoria...
[INFO] 071/bci/core/Library.java:166 ObjectOutputStream criado no método 'public void save()' da classe 'Library'. [CheckSerialization]
[INFO] 071/bci/core/Library.java:179 ObjectInputStream criado no método 'public static Library load(String filename)' da classe 'Library'. [CheckSerialization]
Auditoria completa.

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

Iniciando a auditoria...
[ERROR] 071/bci/core/Library.java:181 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] 071/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]
[WARN] 071/bci/core/Work.java:22 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'categoria' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
Auditoria completa.
O Checkstyle terminou com 1 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] 071/bci/core/Library.java:10 import 'pt.tecnico.uilib.Display' não permitido na classe 'Library'. [POCoreImport]
[ERROR] 071/bci/core/Library.java:55 O tipo ('Display') da variável 'disp' não é permitido em entidades do domínio. [POCoreImport]
[ERROR] 071/bci/core/Library.java:55 instanciação do tipo 'Display' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 071/bci/core/Library.java:86 O tipo ('Display') da variável 'disp' não é permitido em entidades do domínio. [POCoreImport]
[ERROR] 071/bci/core/Library.java:86 instanciação do tipo 'Display' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 071/bci/core/Library.java:107 O tipo ('Display') da variável 'disp' não é permitido em entidades do domínio. [POCoreImport]
[ERROR] 071/bci/core/Library.java:107 instanciação do tipo 'Display' não permitido em classes da camada de domínio. [POCoreImport]
[WARN] 071/bci/core/LibraryManager.java:6 import 'bci.app.exception.NoSuchCreatorException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 071/bci/core/LibraryManager.java:7 import 'bci.app.exception.NoSuchUserException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 071/bci/core/LibraryManager.java:8 import 'bci.app.exception.NoSuchWorkException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 071/bci/core/LibraryManager.java:9 import 'bci.app.exception.UserRegistrationFailedException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 071/bci/core/LibraryManager.java:10 import 'pt.tecnico.uilib.Display' não permitido na classe 'LibraryManager'. [POCoreImport]
[ERROR] 071/bci/core/LibraryManager.java:28 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] 071/bci/core/LibraryManager.java:33 instanciação do tipo 'NoSuchUserException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 071/bci/core/LibraryManager.java:37 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] 071/bci/core/LibraryManager.java:42 instanciação do tipo 'NoSuchUserException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 071/bci/core/LibraryManager.java:50 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] 071/bci/core/LibraryManager.java:55 instanciação do tipo 'UserRegistrationFailedException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 071/bci/core/LibraryManager.java:59 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] 071/bci/core/LibraryManager.java:64 instanciação do tipo 'NoSuchWorkException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 071/bci/core/LibraryManager.java:68 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] 071/bci/core/LibraryManager.java:73 instanciação do tipo 'NoSuchWorkException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 071/bci/core/LibraryManager.java:81 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] 071/bci/core/LibraryManager.java:86 instanciação do tipo 'NoSuchCreatorException' não permitido em classes da camada de domínio. [POCoreImport]
Auditoria completa.
O Checkstyle terminou com 18 erros.

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

Iniciando a auditoria...
[INFO] 071/bci/core/Date.java:5 Atributo estático final 'Date _instance' permitido. [POStaticMember]
[ERROR] 071/bci/core/Date.java:10 Método estático 'public static Date getInstance()' com um simples return valor literal ou atributo não recomendável. [POStaticMember]
[ERROR] 071/bci/core/Library.java:178 Membro estático 'public static Library load(String filename)' não recomendável. [POStaticMember]
[INFO] 071/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.
O Checkstyle terminou com 2 erros.

####  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): '[Classificacao, Categoria]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 17, dos quais 0 private, 1 package-private, 0 protected e 16 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, Livro, MyParser, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (8): '[MissingFileAssociationException, NoSuchWorkCoreException, NoSuchUserCoreException, UnavailableFileException, UserRegistrationFailedCoreException, ImportFileException, UnrecognizedEntryException, NoSuchCreatorCoreException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 55, dos quais 4 private, 2 package-private, 0 protected e 49 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 30, dos quais 30 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 Classificacao ( public )

 [WriteClassStructure]
[INFO] enum Categoria ( public )

 [WriteClassStructure]
[INFO] class User ( public )

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

    private int _idUt
    private String _nomeUt
    private String _email
    private boolean _isAtivo
    private Classificacao _classificacao
    private int _obrasDev
    private int _obrasDevAtraso
    private int _multaTotal

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

    public int getId()
    public String toString()

 [WriteClassStructure]
[INFO] class Creator ( public )

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

    private String _idCriador
    private List<Work> _obrasCriador

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

    public void adicionarObra(Work work)
    public void removerObra(Work work)
    public List<Work> getObrasCriador()
    public String getIdCriador()
    public String toString()

 [WriteClassStructure]
[INFO] class Date ( public )

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

    private final static Date _instance
    private int _day

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

    public static Date getInstance()
    public int getDate()
    public void AdvanceDate(int days)

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

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

    private String _igac
    private Creator _criador

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

    public String toString()

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

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

    private String _isbn
    private List<Creator> _criadores

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

    public String toString()
    public String getCriadores(List criadores)

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

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

    private int _idObra
    private int _preco
    private String _titulo
    private int _numExemplares
    private Categoria _categoria
    private int _numExempDisp

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

    public abstract String toString()
    public String classToString(Categoria categoria)
    public int getIdObra()
    public int getPreco()
    public String getTitulo()
    public int getNumExemplares()
    public Categoria getCategoria()
    public int getNumExempDisp()

  ###### Subclasses  ###### 
    Dvd   Livro   

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

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

    private Library _library

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

    public String mostrarUtente(int idUt)
    public User obtemUtente(int IdUt)
    public Display mostrarUtentes()
    public int registarUtente(String nome, String email)
    public Work obtemObra(int idObra)
    public String mostrarObra(int idObra)
    public Display mostrarObras()
    public Display mostrarObrasCriador(String idCriador)
    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 List<User> _utentes
    private List<Work> _obras
    private List<Creator> _criadores
    private int _nextId
    private int _nextIdObra
    private String _filename

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

    public User obtemUtente(int IdUt)
    public String mostrarUtente(int idUt)
    public Display mostrarUtentes()
    public int registarUtente(String nome, String email)
    public Work obtemObra(int idObra)
    public String mostrarObra(int idObra)
    public Display mostrarObras()
    public Creator getCriador(String idCriador)
    public Display mostrarObrasCriador(String idCriador)
    public int compare(Work w1, Work w2)
    public Creator registarCriador(String nome)
    public void registerBook(String titulo, List criadores, int preco, Categoria categoria, String isbn, int numExemplares)
    public void registerDvd(String titulo, Creator criador, int preco, Categoria categoria, String igac, int numExemplares)
    void importFile(String filename)
    public void save()
    public void saveAs(String filename)
    public static Library load(String filename)

 [WriteClassStructure]
Auditoria completa.
