

####    Verificação do uso correcto do mecanismo de excepções




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

[ERROR] 056/bci/core/LibraryManager.java:92:	EmptyCatchBlock:	Evitar blocos catch vazios.
Total de erros:  1


####    Quebra do encapsulamento


[ERROR] 056/bci/core/Creator.java:33:	MethodReturnsFieldCollectionRule:	Possível quebra de encapsulamento na classe Creator com o método gworks a devolver um Map
Total de erros:  1


####    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] 056/bci/core/Book.java:40:16: A variável local com o nome '_tostring'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
Total de erros:  1

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

Iniciando a auditoria...
[INFO] 056/bci/core/LibraryManager.java:75 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 056/bci/core/LibraryManager.java:105 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] 056/bci/core/Parser.java:33 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


Nada a assinalar


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

Iniciando a auditoria...
[INFO] 056/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.

####  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 'Request' utilizada no atributo 'private final Set<Request> _requests' da classe 'User' 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: 21, dos quais 0 private, 1 package-private, 0 protected e 20 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 (12): '[User, CompareUserByNameAndId, Request, Creator, CompareWorkByName, Notification, Date, Parser, Dvd, Book, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (8): '[MissingFileAssociationException, FindWorkFailedException, UnavailableFileException, ImportFileException, UnrecognizedEntryException, FindCreatorFailedException, FindUserFailedException, CreateUserFailedException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 73, dos quais 5 private, 45 package-private, 0 protected e 23 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 )

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

    private final String _display

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserBehavior ( public )

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

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

    private final int _id
    private boolean _isActive
    private final String _name
    private final String _email
    private int _fine
    private UserBehavior _behavior
    private final Set<Request> _requests
    private final List<Notification> _notifications

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

    int id()
    String name()
    boolean isActive()
    private Collection<Notification> getNotifications()
    public String toString()

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

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

    public int compare(User o1, User o2)

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

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

    private final int _deadline

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

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

    private final String _name
    private final Map<Integer, Work> _works

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

    public boolean equals(Object obj)
    public int hashCode()
    String gname()
    Map<Integer, Work> gworks()
    void addWork(Work nWork)
    void removeWork(Work work)

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

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

    public int compare(Work w1, Work w2)

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

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

    private final String _message

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

    public String toString()

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

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

    private int _currentDate

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

    int getCurrentDate()
    void advanceDay(int nDays)

 [WriteClassStructure]
[INFO] class Parser (  )

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

    private final 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] class Dvd ( public )
  extends Work

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

    private final String _igac
    private Creator _creator

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

    void removeCreator(Creator creator)
    void addCreator(Creator creator)
    List<Creator> getCreators()
    String gigac()
    String getType()
    public String addiInfo()

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

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

    private final String _isbn
    private final List<Creator> _creators

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

    List<Creator> getCreators()
    void removeCreator(Creator creator)
    void addCreator(Creator creator)
    String gIsbn()
    String getType()
    public String addiInfo()

 [WriteClassStructure]
[INFO]  abstract class Work ( public implements Serializable )

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

    private final int _id
    private final int _price
    private int _numberOfCopies
    private final String _title
    private final Category _category

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

    boolean changeCopyNum(int number)
    final int id()
    final String title()
    final int numberOfCopies()
    public String toString()
    abstract void addCreator(Creator creator)
    abstract void removeCreator(Creator creator)
    abstract List<Creator> getCreators()
    abstract String getType()
    abstract String addiInfo()

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

   Method addCreator(Creator) overriden in subclass(es) Dvd Book 
   Method removeCreator(Creator) overriden in subclass(es) Dvd Book 
   Method getCreators() overriden in subclass(es) Dvd Book 
   Method getType() overriden in subclass(es) Dvd Book 
   Method addiInfo() overriden in subclass(es) Dvd Book 
 [WriteClassStructure]
[INFO] class LibraryManager ( public implements Serializable )

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

    private Library _library
    private String _filename

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

    public int getCurrentDate()
    public void advanceDays(int nDays)
    public int rcreateUser(String name, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public String saveFile()
    public Work getWork(int id)
    public Collection<Work> getWorks()
    public Collection<Work> getCreatorWorks(String name)
    public boolean modified()
    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 final Date _date
    private int _nextUserId
    private int _nextWorkId
    private final Map<Integer, User> _users
    private final Set<Creator> _creators
    private final Map<Integer, Work> _works
    private boolean _modified

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

    void importFile(String filename)
    void setSaved()
    boolean modified()
    void advanceDays(int nDays)
    int getCurrentDate()
    User createUser(String name, String email)
    User getUser(int id)
    List<User> getUsers()
    Creator addCreator(String nome)
    void addBook(int price, String title, int numberCopies, Category category, String isbn, List creators)
    void addDVD(int price, String title, int numberCopies, Category category, String igac, Creator creator)
    void changeNumber(int dif, Work work)
    Work getWork(int id)
    Collection<Work> getWorks()
    Collection<Work> getCreatorWorks(String nome)
    void removeWork(Work work)

 [WriteClassStructure]
Auditoria completa.
