

####    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] 063/bci/app/user/DoRegisterUser.java:29:	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] 063/bci/core/MyParser.java:32:	EmptyCatchBlock:	Evitar blocos catch vazios.
Total de erros:  2


####    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] 063/bci/core/exception/RuleException.java:6:30: Parâmetro/variável local 'ruleId' esconde atributo da classe com o mesmo nome [HiddenField]
Total de erros:  0


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

[ERROR] 063/bci/core/exception/RuleException.java:4:23: O atributo com o nome 'ruleId'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
Total de erros:  1

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

Iniciando a auditoria...
[INFO] 063/bci/core/LibraryManager.java:37 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 063/bci/core/LibraryManager.java:66 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] 063/bci/core/MyParser.java:41 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] 063/bci/core/Work.java:68 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.

####  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] 063/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


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 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, 1 package-private, 0 protected e 1 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (2): '[Category, UserBehavior]'. [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 (2): '[Work, Rule]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (10): '[User, Request, Creator, Notification, Date, Dvd, Book, MyParser, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (5): '[MissingFileAssociationException, RuleException, UnavailableFileException, ImportFileException, UnrecognizedEntryException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 74, dos quais 4 private, 6 package-private, 1 protected e 63 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 (  )

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

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

    private int _id
    private boolean _isActive
    private String _name
    private String _email
    private int _fine
    private UserBehavior _behavior

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

    public int getId()
    boolean isActive()
    public String getName()
    public String getEmail()
    public int getFine()
    public UserBehavior getBehavior()
    public void setIsActive(boolean isActive)
    public void setFine(int fine)
    public void setBehavior(UserBehavior behavior)
    public void updateStatus(Date currentDate)
    public String toString()

 [WriteClassStructure]
[INFO] class Request ( public )

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

    private int _deadline

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

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

    private String _name
    private Set<Work> _works

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

    public String getName()
    public Set<Work> getWorks()
    public void addWork(Work work)
    public void removeWork(Work work)
    public boolean hasWorks()

 [WriteClassStructure]
[INFO] class Notification ( public )

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

    private String _message

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

    public String toString()

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

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

    private int _currentDate

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

    public int getCurrentDate()
    void advanceDay(int nDays)

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

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

    private String _igac
    private Creator _director

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

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

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

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

    private List<Creator> _authors
    private String _isbn

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

    public List<Creator> getAuthors()
    public String getIsbn()
    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 _totalCopies
    private int _availableCopies
    private String _title
    private Category _category

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

    public int getId()
    public int getPrice()
    public int getTotalCopies()
    public int getAvailableCopies()
    public String getTitle()
    public Category getCategory()
    protected String categoryLabel()
    public boolean borrowOne()
    public void returnOne()
    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 String _filename

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

    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String datafile)
    public boolean hasChanged()
    public Date getCurrentDate()
    public void advanceDays(int nDays)
    public User getUser(int id)
    public Collection<User> getUsers()
    public User registerUser(String name, String email)
    public boolean hasCreator(String name)
    public Creator registerCreator(String name)
    public Work getWork(int id)
    public Collection<Work> getWorks()
    public Collection<Work> getWorksByCreator(String name)
    public Dvd registerDvd(int price, int nCopies, String title, Category category, Creator director, String igac)
    public Book registerBook(int price, int nCopies, String title, Category category, List authors, String isbn)

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

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

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

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

    void importFile(String filename)
    public boolean hasChanged()
    public void setModified(boolean m)
    Date getCurrentDate()
    void advanceDays(int nDays)
    public User getUser(int id)
    public Collection<User> getUsers()
    public User registerUser(String name, String email)
    public boolean hasCreator(String name)
    public Creator registerCreator(String name)
    public Work getWork(int id)
    public Collection<Work> getWorks()
    public Collection<Work> getWorksByCreator(String name)
    public Dvd registerDvd(int price, int nCopies, String title, Category category, Creator director, String igac)
    public Book registerBook(int price, int nCopies, String title, Category category, List authors, String isbn)

 [WriteClassStructure]
[INFO]  abstract class Rule ( public )

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

    private int _id

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

    public int getid()
    public abstract void check(Work w, User u)

 [WriteClassStructure]
Auditoria completa.
