

####    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] 008/bci/core/MyParser.java:56:	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] 008/bci/app/main/DoOpenFile.java:34:	EmptyCatchBlock:	Evitar blocos catch vazios.
[ERROR] 008/bci/app/main/DoSaveFile.java:46:	EmptyCatchBlock:	Evitar blocos catch vazios.
Total de erros:  3


####    Quebra do encapsulamento


Nada a assinalar


####    Verificaçao do princípio de desenho Programar para o supertipo


[INFO] 008/bci/core/Book.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (0) do princípio Programar para abstracção no ficheiro Book.java.
[INFO] 008/bci/core/Creator.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro Creator.java.
[INFO] 008/bci/core/Library.java:0:	POLooseCouplingRule:	Aplicação correcta (9) e incorrecta (0) do princípio Programar para abstracção no ficheiro Library.java.
[INFO] 008/bci/core/LibraryManager.java:0:	POLooseCouplingRule:	Aplicação correcta (4) e incorrecta (0) do princípio Programar para abstracção no ficheiro LibraryManager.java.
[INFO] 008/bci/core/MyParser.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (0) do princípio Programar para abstracção no ficheiro MyParser.java.
Total de erros:  0


####    Verificação de fugas de privacidade


[INFO] 008/bci/core/Creator.java:34:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Creator evitada por criação de cópia (new HashSet) de _works no método works.
Total de erros:  0
Total de fugas evitadas:        1


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


[WARN] 008/bci/app/request/DoReturnWork.java:64:	UseEqualsToCompareStrings:	Utilize equals() para comparar strings em vez de =' or !=.
[ERROR] 008/bci/app/request/DoReturnWork.java:64:18: Literais de String deveriam ser comparados com equals(), não com '=='. [POStringEquality]
Total de erros:  1


####    Verificação da boa aplicação do mecanismo de herança


[WARN] 008/bci/core/Request.java:13:24: Parâmetro/variável local 'userId' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 008/bci/core/Request.java:13:36: Parâmetro/variável local 'workId' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 008/bci/core/Request.java:13:48: Parâmetro/variável local 'requestDate' esconde atributo da classe com o mesmo nome [HiddenField]
Total de erros:  0


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

[ERROR] 008/bci/core/LibraryManager.java:120:10: A variável local com o nome '_user'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
[ERROR] 008/bci/core/Request.java:8:23: O atributo com o nome 'userId'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 008/bci/core/Request.java:9:23: O atributo com o nome 'workId'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 008/bci/core/Request.java:10:23: O atributo com o nome 'requestDate'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 008/bci/core/Request.java:11:17: O atributo com o nome 'dueDate'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
Total de erros:  5

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

Iniciando a auditoria...
[INFO] 008/bci/core/LibraryManager.java:61 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 008/bci/core/LibraryManager.java:80 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] 008/bci/core/Book.java:23 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]
[WARN] 008/bci/core/Dvd.java:21 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] 008/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 '19'. [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 interfaces definidos no core: 3, dos quais 0 private, 1 package-private, 0 protected e 2 public. [WriteClassStructure]
[INFO] Interfaces definidos no package core da aplicação (3): '[EntryParser, UserBehaviorState, Observer]'. [WriteClassStructure]
[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: 18, dos quais 0 private, 3 package-private, 0 protected e 15 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 (12): '[User, Request, Creator, Notification, Date, CheckRequestTwice, CheckUserIsSuspended, 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): 84, dos quais 4 private, 2 package-private, 0 protected e 78 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 37, dos quais 31 private, 0 package-private, 6 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 ( public )

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

    public int getMaxRequests()
    public int getLoanPeriod(int totalCopies)
    public int getMaxRequests()
    public int getLoanPeriod(int totalCopies)
    public int getMaxRequests()
    public int getLoanPeriod(int totalCopies)

 [WriteClassStructure]
[INFO] interface EntryParser (  )

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

    void parse(String components, String line)

 [WriteClassStructure]
[INFO] interface UserBehaviorState ( public )

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

    int getMaxRequests()
    int getLoanPeriod(int totalCopies)

 [WriteClassStructure]
[INFO] interface Observer ( public )

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

    void update(Notification notification)

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

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

    private final int _id
    private final String _name
    private final String _email
    private boolean _active
    private UserBehavior _behavior
    private int _fine
    private final Queue<Notification> _notifications

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

    public int getId()
    public String getName()
    public String getEmail()
    public boolean isActive()
    public void setActive(boolean active)
    public UserBehavior getBehavior()
    public void setBehavior(UserBehavior behavior)
    public int getFine()
    public void resetFine()
    public void addFine(int amount)
    public Queue<Notification> getNotifications()
    public void update(Notification notification)
    public String toString()

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

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

    private final int userId
    private final int workId
    private final int requestDate
    private int dueDate

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

    public int getUserId()
    public int getWorkId()
    public int getRequestDate()
    public int getDueDate()
    public void extendDueDate(int days)

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

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

    private final String _name
    private final Set<Work> _works

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

    public String getName()
    public void add(Work work)
    public void remove(Work work)
    public Collection<Work> works()

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

  ###### 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()
    public void advanceDay(int nDays)

 [WriteClassStructure]
[INFO] class CheckRequestTwice (  )
  extends Rule

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

    public boolean check(Work w, User u)

 [WriteClassStructure]
[INFO] class CheckUserIsSuspended (  )
  extends Rule

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

    public boolean check(Work w, User u)

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

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

    private final String _igac
    private Creator _director

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

    public void setDirector(Creator director)
    public String toString()

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

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

    private final String _isbn
    private final List<Creator> _authors

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

    public void addAuthor(Creator author)
    public String toString()

 [WriteClassStructure]
[INFO] class MyParser (  )

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

    private Library _library
    private final Map<String, EntryParser> _parsers

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

    protected final int _id
    protected final String _title
    protected final int _price
    protected final Category _category
    protected int _numeroCopias

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

    public int getId()
    public String getTitle()
    public int getPrice()
    public Category getCategory()
    public int getCopias()
    public void updateInventory(int amount)
    public abstract String toString()
    public boolean equals(Object obj)
    public int hashCode()

  ###### 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 int getCurrentDate()
    public void advanceDays(int nDays)
    public int createUser(String name, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public Work getWork(int id)
    public List<Work> getWorks()
    public List<Work> getWorksCreator(String creatorName)
    public boolean isModified()
    public String getFileName()
    public Request createRequest(int userId, int workId)
    public void returnWork(int userId, int workId)
    public List<Creator> getCreators()
    public boolean userHasLateWorks(int userId)
    public Request findRequest(int userId, int workId)

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

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

    private final Date _date
    private int _nextUserId
    private int _nextWorkId
    private boolean _modified
    private final Map<Integer, User> _users
    private final Map<Integer, Work> _works
    private final Map<String, Creator> _creators
    private final Map<Integer, Request> _requests

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

    public int getCurrentDate()
    public void advanceDays(int nDays)
    public User createUser(String name, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public Work getWork(int id)
    public List<Work> getWorks()
    public List<Work> getWorksCreator(String creatorName)
    public void createBook(String title, List authors, int price, Category category, String isbn, int numeroCopias)
    public void createDVD(String title, String directorName, int price, Category category, String igac, int numeroCopias)
    void importFile(String filename)
    public boolean isModified()
    public void setModified(boolean modified)
    public Request createRequest(int userId, int workId)
    public void returnWork(int userId, int workId)
    public Request findRequest(int userId, int workId)
    public boolean removeUser(int userId)
    public List<Creator> getCreators()
    public boolean userHasLateWorks(int userId)

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

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

    protected int _id

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

    public abstract boolean check(Work w, User u)

  ###### Subclasses  ###### 
    CheckRequestTwice   CheckUserIsSuspended   

   Method check(Work, User) overriden in subclass(es) CheckRequestTwice CheckUserIsSuspended 
 [WriteClassStructure]
Auditoria completa.
