

####    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] 051/bci/app/main/DoOpenFile.java:24:	AvoidRethrowingException:	Deve evitar o uso de um bloco catch que apenas apanha a excepção para relançar outra excepção do mesmo tipo
[ERROR] 051/bci/app/user/DoRegisterUser.java:31:	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] 051/bci/core/LibraryManager.java:194:	EmptyCatchBlock:	Evitar blocos catch vazios.
Total de erros:  3


####    Quebra do encapsulamento


[ERROR] 051/bci/core/Library.java:77:	MethodReturnsFieldCollectionRule:	Possível quebra de encapsulamento na classe Library com o método getUsers a devolver um Map
[ERROR] 051/bci/core/Library.java:86:	MethodReturnsFieldCollectionRule:	Possível quebra de encapsulamento na classe Library com o método getWorks a devolver um Map
Total de erros:  2


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


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

Nada a assinalar

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

Iniciando a auditoria...
[INFO] 051/bci/core/LibraryManager.java:175 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 051/bci/core/LibraryManager.java:207 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] 051/bci/core/Category.java:8 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'this' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 051/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]
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

Iniciando a auditoria...
[WARN] 051/bci/core/LibraryManager.java:3 import 'bci.app.exception.*' não permitido na classe 'LibraryManager'. [POCoreImport]
Auditoria completa.

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

Iniciando a auditoria...
[INFO] 051/bci/core/User.java:17 Atributo estático final 'CompareUserByNameAndId COMPARE_BY_NAME_AND_ID' permitido. [POStaticMember]
[INFO] 051/bci/core/Work.java:17 Atributo estático final 'CompareWorkByTitle COMPARE_BY_TITLE' permitido. [POStaticMember]
[INFO] 051/bci/core/Work.java:18 Atributo estático final 'CompareWorkById COMPARE_BY_ID' permitido. [POStaticMember]
[INFO] 051/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


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 (11): '[User, CompareUserByNameAndId, Creator, Date, CompareWorkById, Dvd, Book, MyParser, LibraryManager, Library, CompareWorkByTitle]'. [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): 66, dos quais 4 private, 36 package-private, 0 protected e 26 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 32, dos quais 29 private, 0 package-private, 0 protected e 3 public. [WriteClassStructure]
Auditoria completa.

Descrição das estruturas de dados do core do projecto

Iniciando a auditoria...
[INFO] enum Category ( public )

  ###### 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 int _fine
    private UserBehavior _behavior
    private boolean _isActive
    public final static CompareUserByNameAndId COMPARE_BY_NAME_AND_ID

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

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

 [WriteClassStructure]
[INFO] class CompareUserByNameAndId ( public implements Comparator<User> )

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

    public int compare(User u1, User u2)

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

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

    private String _name
    private List<Work> _works

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

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

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

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

    private int _currentDate

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

    int getCurrentDate()
    void advanceDay(int nDays)
    public String toString()

 [WriteClassStructure]
[INFO] class CompareWorkById ( public implements Comparator<Work> )

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

    public int compare(Work w1, Work w2)

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

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

    private String _igac
    private Creator _director

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

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

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

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

    private String _isbn
    private List<Creator> _authors

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

    String getIsbn()
    List<Creator> getAuthors()
    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 String _title
    private int _price
    private Category _category
    private int _totalCopies
    private int _availableCopies
    public final static CompareWorkByTitle COMPARE_BY_TITLE
    public final static CompareWorkById COMPARE_BY_ID

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

    int getId()
    String getTitle()
    int getPrice()
    Category getCategory()
    int getTotalCopies()
    int getAvailableCopies()
    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 String _filename

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

    public Library getLibrary()
    public User getUser(int id)
    public Collection<User> getAllUsers()
    public Work getWork(int id)
    public Collection<Work> getAllWorks()
    public Creator getCreator(String name)
    public int getCurrentDate()
    public User registerUser(String name, String email)
    public Book registerBook(String title, List creators, int price, Category category, String isbn, int nCopies)
    public Dvd registerDvd(String title, Creator creator, int price, Category category, String igac, int nCopies)
    public Creator registerCreator(String name)
    public void advanceDays(int nDays)
    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 int _nextUserId
    private int _nextWorkId
    private boolean _modified
    private Map<Integer, User> _users
    private Map<Integer, Work> _works
    private Map<String, Creator> _creators
    private Date _date

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

    User getUser(int id)
    Work getWork(int id)
    void setModified(boolean modified)
    boolean hasModified()
    Map<Integer, User> getUsers()
    Map<Integer, Work> getWorks()
    Creator getCreator(String name)
    Date getCurrentDate()
    void advanceDays(int nDays)
    User registerUser(String name, String email)
    Book registerBook(String title, List creators, int price, Category category, String isbn, int nCopies)
    Dvd registerDvd(String title, Creator creator, int price, Category category, String igac, int nCopies)
    Creator registerCreator(String name)
    void importFile(String filename)

 [WriteClassStructure]
[INFO] class CompareWorkByTitle ( public implements Comparator<Work> )

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

    public int compare(Work w1, Work w2)

 [WriteClassStructure]
Auditoria completa.
