

####    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] 078/bci/app/user/DoRegisterUser.java:31:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.
Total de erros:  1


####    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] 078/bci/core/Category.java:13:21: Parâmetro/variável local 'displayName' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 078/bci/core/User.java:17:21: Parâmetro/variável local 'id' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 078/bci/core/User.java:17:32: Parâmetro/variável local 'name' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 078/bci/core/User.java:17:45: Parâmetro/variável local 'email' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 078/bci/core/User.java:47:34: Parâmetro/variável local 'estado' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 078/bci/core/User.java:48:41: Parâmetro/variável local 'comportamento' esconde atributo da classe com o mesmo nome [HiddenField]
[WARN] 078/bci/core/User.java:49:33: Parâmetro/variável local 'multa' esconde atributo da classe com o mesmo nome [HiddenField]
Total de erros:  0


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

[ERROR] 078/bci/core/Category.java:11:26: O atributo com o nome 'displayName'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 078/bci/core/Library.java:35:32: O atributo com o nome 'users'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 078/bci/core/Library.java:36:32: O atributo com o nome 'works'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 078/bci/core/User.java:9:23: O atributo com o nome 'id'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 078/bci/core/User.java:10:26: O atributo com o nome 'name'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 078/bci/core/User.java:11:26: O atributo com o nome 'email'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 078/bci/core/User.java:13:20: O atributo com o nome 'estado'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 078/bci/core/User.java:14:20: O atributo com o nome 'comportamento'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 078/bci/core/User.java:15:20: O atributo com o nome 'multa'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 078/bci/core/Creator.java:12:24: O atributo com o nome 'nextId'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
Total de erros:  10

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

Iniciando a auditoria...
[INFO] 078/bci/core/LibraryManager.java:50 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 078/bci/core/LibraryManager.java:61 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...
[ERROR] 078/bci/app/work/DoDisplayWork.java:30 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 078/bci/app/work/DoDisplayWork.java:36 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 078/bci/app/work/DoDisplayWork.java:38 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 078/bci/app/work/DoDisplayWorks.java:23 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 078/bci/app/work/DoDisplayWorks.java:29 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 078/bci/app/work/DoDisplayWorks.java:31 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 078/bci/app/work/DoDisplayWorksByCreator.java:39 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 078/bci/app/work/DoDisplayWorksByCreator.java:45 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[ERROR] 078/bci/app/work/DoDisplayWorksByCreator.java:47 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple]
[WARN] 078/bci/core/Category.java:23 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 's.toUpperCase()' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 078/bci/core/TextImporter.java:41 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'type' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 078/bci/core/TextImporter.java:110 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 's.toUpperCase()' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
Auditoria completa.
O Checkstyle terminou com 9 erros.

####  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] 078/bci/core/LibraryManager.java:3 import 'bci.app.exception.*' não permitido na classe 'LibraryManager'. [POCoreImport]
[ERROR] 078/bci/core/LibraryManager.java:21 Classe 'UserRegistrationFailedException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport]
Auditoria completa.
O Checkstyle terminou com 1 erros.

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

Iniciando a auditoria...
[ERROR] 078/bci/core/Category.java:23 Membro estático 'public static Category fromString(String s)' não recomendável. [POStaticMember]
[ERROR] 078/bci/core/Creator.java:12 Membro estático 'int nextId' não recomendável. [POStaticMember]
[INFO] 078/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 '17'. [POStaticMember]
Auditoria completa.
O Checkstyle terminou com 2 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: 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: 15, dos quais 0 private, 0 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 (10): '[User, Request, Creator, Notification, Date, Dvd, Book, LibraryManager, Library, TextImporter]'. [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): 82, dos quais 5 private, 1 package-private, 2 protected e 74 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 39, dos quais 33 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 )

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

    private final String displayName

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

    public String toString()
    public static Category fromString(String s)

 [WriteClassStructure]
[INFO] enum UserBehavior ( public )

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

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

    private final int id
    private final String name
    private final String email
    private String estado
    private String comportamento
    private double multa

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

    public int getId()
    public String getName()
    public String getEmail()
    public String getEstado()
    public String getComportamento()
    public double getMulta()
    public void setEstado(String estado)
    public void setComportamento(String comportamento)
    public void setMulta(double multa)
    public String toString()

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

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

    private final User _user
    private final Work _work
    private final int _deadline
    private boolean _returned

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

    public User getUser()
    public Work getWork()
    public int getDeadline()
    public boolean isReturned()
    public void markAsReturned()
    public String toString()

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

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

    private static int nextId
    private final int _id
    private String _name
    private List<Work> _works

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

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

 [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 advanceDays(int nDays)
    public String toString()

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

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

    private String _igac
    private String _director

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

    public String getIgac()
    public String getDirector()
    public String getDescription()
    public String getType()
    public String toString()

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

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

    private String _isbn
    private List<String> _authors

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

    public String getIsbn()
    public List<String> getAuthors()
    public String getDescription()
    protected String getType()

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

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

    protected int _id
    protected int _price
    protected int _numberOfCopies
    protected int _availableCopies
    protected String _title
    protected Category _category

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

    public int getId()
    public String getTitle()
    public int getPrice()
    public int getNumberOfCopies()
    public int getAvailableCopies()
    public void setAvailableCopies(int availableCopies)
    public Category getCategory()
    public abstract String getDescription()
    protected abstract String getType()
    public String toString()

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

   Method getDescription() overriden in subclass(es) Dvd Book 
   Method getType() overriden in subclass(es) Dvd Book 
   Method toString() overriden in subclass(es) Dvd 
 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private String _filename
    private Library _library

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

    public Work getWork(int id)
    public List<Work> getWorks()
    public int rcreateUser(String userName, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public Creator getCreator(int id)
    public Creator getCreatorByName(String name)
    public Date getCurrentDate()
    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 _nextWorkId
    private int _nextUserId
    private int _nextCreatorId
    private boolean _modified
    private Date _date
    private Map<Integer, User> users
    private Map<Integer, Work> works
    private Map<Integer, Creator> _creators
    private Map<String, Creator> _creatorsByName
    private List<Request> _requests

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

    public int nextWorkId()
    public int nextUserId()
    public int nextCreatorId()
    public Date getCurrentDate()
    public void advanceDays(int nDays)
    public User createUser(String userName, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public void addWork(Work w, List creatorNames)
    public Work getWork(int id)
    public List<Work> getWorks()
    public Creator createCreator(String name)
    public Creator getCreator(int id)
    public Creator getCreatorByName(String name)
    public List<Creator> getCreators()
    public Request createRequest(User user, Work work, int duration)
    public void returnRequest(Request req)
    public List<Request> getRequests()
    void importFile(String filename)

 [WriteClassStructure]
[INFO] class TextImporter ( public )

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

    private final Library _library

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

    public void importFile(String filename)
    private void processLine(String line)
    private void createUser(String tokens)
    private void createBook(String tokens)
    private void createDvd(String tokens)
    private Category parseCategory(String s)

 [WriteClassStructure]
Auditoria completa.
