

####    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] 060/bci/core/Parser.java:61:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.
Total de erros:  1


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


[WARN] 060/bci/core/Category.java:10:21: Parâmetro/variável local 'displayName' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 060/bci/core/Library.java:60:112: Parâmetro/variável local 'creators' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 060/bci/core/User.java:17:28: Parâmetro/variável local '_id' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 060/bci/core/User.java:25:33: Parâmetro/variável local '_name' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 060/bci/core/User.java:33:34: Parâmetro/variável local '_email' esconde atributo da classe com o mesmo nome [HiddenField]
Total de erros:  0


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

[ERROR] 060/bci/core/Dvd.java:14:17: O método com o nome 'set_director' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 060/bci/core/LibraryManager.java:22:16: O atributo com o nome 'date'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 060/bci/core/Category.java:8:26: O atributo com o nome 'displayName'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 060/bci/core/Library.java:25:22: O atributo com o nome 'users'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 060/bci/core/Library.java:28:23: O atributo com o nome 'works'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 060/bci/core/Library.java:31:25: O atributo com o nome 'creators'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 060/bci/core/User.java:13:16: O método com o nome 'get_id' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 060/bci/core/User.java:17:17: O método com o nome 'set_id' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 060/bci/core/User.java:17:28: O parâmetro '_id' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
[ERROR] 060/bci/core/User.java:21:19: O método com o nome 'get_name' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 060/bci/core/User.java:25:17: O método com o nome 'set_name' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 060/bci/core/User.java:25:33: O parâmetro '_name' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
[ERROR] 060/bci/core/User.java:29:19: O método com o nome 'get_email' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 060/bci/core/User.java:33:17: O método com o nome 'set_email' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 060/bci/core/User.java:33:34: O parâmetro '_email' deve condizer com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [ParameterName]
[ERROR] 060/bci/app/user/DoRegisterUser.java:14:16: O atributo com o nome 'form'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 060/bci/app/user/DoShowUser.java:15:16: O atributo com o nome 'form'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 060/bci/app/work/DoDisplayWork.java:15:16: O atributo com o nome 'form'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 060/bci/app/work/DoDisplayWorksByCreator.java:16:16: O atributo com o nome 'form'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 060/bci/app/main/DoAdvanceDate.java:12:16: O atributo com o nome 'form'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
Total de erros:  20

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

Iniciando a auditoria...
[ERROR] Número errado de instâncias criadas de 'ObjectInputStream'. Devia ser 1 e é '0'. [CheckSerialization]
[ERROR] Número errado de instâncias criadas de 'ObjectOutputStream'. Devia ser 1 e é '0'. [CheckSerialization]
Auditoria completa.
O Checkstyle terminou com 2 erros.

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

Iniciando a auditoria...
[ERROR] 060/bci/core/Library.java:135 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] 060/bci/core/Library.java:139 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] 060/bci/core/Parser.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.
O Checkstyle terminou com 2 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


Nada a assinalar


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

Iniciando a auditoria...
[INFO] 060/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 '15'. [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, UserBehavior]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 16, dos quais 0 private, 1 package-private, 0 protected e 15 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 (7): '[UserNotFoundException, MissingFileAssociationException, WorkNotFoundException, UnavailableFileException, ImportFileException, UnrecognizedEntryException, CreatorNotFoundException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 62, dos quais 5 private, 4 package-private, 1 protected e 52 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 )

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

    private final String displayName

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserBehavior ( public )

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

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

    private int _id
    private String _name
    private String _email
    private boolean _active
    private int _fine
    private UserBehavior _userBehavior

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

    public int get_id()
    public void set_id(int _id)
    public String get_name()
    public void set_name(String _name)
    public String get_email()
    public void set_email(String _email)
    private boolean isActive()
    public String toString()

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

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

    private int _id
    private String _name
    private List<Work> _works

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

    public String getName()
    public int getId()
    void add(Work work)
    void remove(Work work)
    public List<Work> getWorks()
    public String toString()

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

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

    private int _currentDate

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

    public int getCurrentDate()
    public void advanceDate(int days)
    public String toString()

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

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

    private String _igac
    private Creator _director

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

    public void set_director(Creator director)
    public String getIgac()
    public Creator getDirector()
    public String toString()

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

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

    private String _isbn
    private List<Creator> _authors

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

    public String getIsbn()
    public List<Creator> getAuthors()
    public void setAuthors(List authors)
    public String getAuthorsString()
    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 int _id
    private int _price
    private int _numberOfCopies
    private String _title
    private Category _category

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

    public int getId()
    public String getTitle()
    public int getPrice()
    public Category getCategory()
    public int getCopies()
    public void changeInventory(int delta)
    protected String getDescription()
    public abstract String toString()

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

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

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

    private Library _library
    private Date date

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

    public int getDate()
    public int registerUser(String name, String email)
    public String showUser(int id)
    public String showWork(int id)
    public ArrayList<String> showAllUsers()
    public ArrayList<String> showAllWorks()
    public ArrayList<String> showCreatorWorks(int creatorId)
    public void advanceDate(int d)
    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> users
    private int _userId
    private List<Work> works
    private int _workId
    private List<Creator> creators
    private int _creatorId

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

    public int registerUser(String name, String email)
    public Creator registerCreator(String name)
    public void registerDvd(int price, int nCopies, String title, Category category, String igac, Creator creator)
    public void registerBook(int price, int nCopies, String title, Category category, String igac, List creators)
    public String showUser(int id)
    public String showWork(int id)
    public String showCreator(int id)
    public ArrayList<String> showAllUsers()
    public ArrayList<String> showAllWorks()
    public ArrayList<String> showCreatorWorks(int creatorId)
    void importFile(String filename)

 [WriteClassStructure]
Auditoria completa.
