

####    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] 075/bci/app/main/DoSaveFile.java:32:	EmptyCatchBlock:	Evitar blocos catch vazios.
[ERROR] 075/bci/app/main/DoSaveFile.java:36:	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


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] 075/bci/core/LibraryManager.java:30 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 075/bci/core/LibraryManager.java:57 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] 075/bci/core/Category.java:12 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] 075/bci/core/MyParser.java:34 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'components[ ].trim().toUpperCase()' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 075/bci/core/MyParser.java:124 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'normalized' 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...
[ERROR] 075/bci/core/Request.java:8 Membro estático 'int _nextId' não recomendável. [POStaticMember]
[ERROR] 075/bci/core/User.java:10 Membro estático 'int _nextId' não recomendável. [POStaticMember]
[ERROR] 075/bci/core/Work.java:8 Membro estático 'int _nextId' não recomendável. [POStaticMember]
[INFO] 075/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 '20'. [POStaticMember]
Auditoria completa.
O Checkstyle terminou com 3 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: 3, dos quais 0 private, 0 package-private, 0 protected e 3 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (3): '[Category, UserStatus, UserBehavior]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 13, dos quais 0 private, 1 package-private, 0 protected e 12 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, Request, Creator, Dvd, Book, MyParser, LibraryManager, Library]'. [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): 88, dos quais 5 private, 2 package-private, 0 protected e 81 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 34, dos quais 34 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 )

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

    public String toString()

 [WriteClassStructure]
[INFO] enum UserStatus ( public )

 [WriteClassStructure]
[INFO] enum UserBehavior ( public )

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

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

    private static int _nextId
    private final int _id
    private final String _name
    private final String _email
    private UserStatus _status
    private UserBehavior _behavior
    private int _fine
    private List<String> _notifications

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

    public int getId()
    public String getName()
    public String getEmail()
    public UserStatus getStatus()
    public UserBehavior getBehavior()
    public int getFine()
    public List<String> getNotifications()
    public void addFine(int value)
    public void payFine()
    public void suspendUser()
    public boolean canRequest()
    public boolean hasDebt()
    public void addNotification(String message)
    public void setBehavior(UserBehavior behavior)
    public void setStatus(UserStatus status)
    public String toString()

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

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

    private static int _nextId
    private final int _id
    private final User _user
    private final Work _work
    private final int _startDate
    private final int _dueDate
    private Integer _returnDate
    private boolean _isActive

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

    public int getId()
    public User getUser()
    public Work getWork()
    public int getStartDate()
    public int getDueDate()
    public Integer getReturnDate()
    public boolean isActive()
    public void returnWork(int date)
    public int getDelayDays()
    public boolean isLate()
    public String toString()

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

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

    private final String _name
    private final List<Work> _works

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

    public String getName()
    public List<Work> getWorks()
    public void addWork(Work w)
    public void removeWork(Work w)
    public String toString()
    public boolean equals(Object o)
    public int hashCode()

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

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

    private final String _igac

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

    public String getIgac()
    public String toString()

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

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

    private final String _isbn

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

    public String getIsbn()
    public String toString()

 [WriteClassStructure]
[INFO] class MyParser (  implements Serializable )

  ###### 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 parseBook(String components, String line)
    private void parseDvd(String components, String line)
    private Category parseCategory(String raw)

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

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

    private static int _nextId
    private final int _id
    private final String _title
    private final int _price
    private final Category _category
    private int _totalCopies
    private int _availableCopies

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

    public int getId()
    public String getTitle()
    public int getPrice()
    public Category getCategory()
    public int getTotalCopies()
    public int getAvailableCopies()
    public void changeCopies(int delta)
    public boolean borrowCopy()
    public void returnCopy()
    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 Library getLibrary()
    public User registerUser(String name, String email)
    public Iterable<User> getUsers()
    public int getCurrentDate()
    public void advanceDate(int days)
    public String showWorksByCreator(String name)
    public String showAllWorks()
    public java.util.List getWorks()
    public Work getWorkById(int id)

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

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

    private List<User> _users
    private List<Creator> _creators
    private List<Work> _works
    private int _currentDate

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

    public User registerUser(String name, String email)
    public List<User> getUsers()
    public User getUserById(int id)
    public String showUser(int id)
    public String showAllUsers()
    public Creator registerCreator(String name)
    public List<Creator> getCreators()
    public Creator getCreatorByName(String name)
    public Work registerBook(String title, int price, Category category, int copies, String isbn, Creator creators)
    public Work registerDvd(String title, int price, Category category, int copies, String igac, Creator creators)
    public List<Work> getWorks()
    public Work getWorkById(int id)
    public Work getWorkByTitle(String title)
    public String getCreatorsOfWork(Work work)
    public String showWork(Work w)
    public String showAllWorks()
    public String showWorksByCreator(String name)
    public boolean updateInventory(int workId, int delta)
    public int getCurrentDate()
    public void advanceDate(int days)
    void importFile(String filename)

 [WriteClassStructure]
Auditoria completa.
