

####    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] 011/bci/app/work/DoDisplayWorksByCreator.java:34:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.
[ERROR] 011/bci/core/LibraryManager.java:68:	AvoidThrowingNewInstanceOfSameException:	Deve evitar blocos catch que apenas apanham uma excepção apenas para a relançar.
[ERROR] 011/bci/core/Parser.java:121:	POAvoidCatchingGenericException:	Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch.
Total de erros:  3


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

[ERROR] 011/bci/core/Parser.java:120:42: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
[ERROR] 011/bci/core/LibraryManager.java:94:15: O método com o nome 'import_' não está de acordo com o padrão '^[a-z][a-zA-Z]*[0-9]?$'. [MethodName]
[ERROR] 011/bci/core/User.java:14:27: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
[ERROR] 011/bci/core/User.java:14:43: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
[ERROR] 011/bci/core/Work.java:20:29: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
[ERROR] 011/bci/core/Work.java:20:55: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
[ERROR] 011/bci/core/Work.java:21:45: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
[ERROR] 011/bci/core/Creator.java:17:27: Apenas uma instrução por linha é permitida. [OneStatementPerLine]
Total de erros:  8

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

Iniciando a auditoria...
[INFO] 011/bci/core/LibraryManager.java:57 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 011/bci/core/LibraryManager.java:74 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] 011/bci/app/work/DoDisplayWork.java:43 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] 011/bci/app/work/DoDisplayWork.java:52 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] 011/bci/app/work/DoDisplayWork.java:56 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] 011/bci/app/work/DoDisplayWork.java:72 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'u' comparada '7' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[ERROR] 011/bci/app/work/DoDisplayWorks.java:33 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] 011/bci/app/work/DoDisplayWorks.java:42 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] 011/bci/app/work/DoDisplayWorks.java:46 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] 011/bci/app/work/DoDisplayWorks.java:62 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'u' comparada '7' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[ERROR] 011/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]
[ERROR] 011/bci/app/work/DoDisplayWorksByCreator.java:56 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] 011/bci/app/work/DoDisplayWorksByCreator.java:60 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] 011/bci/app/work/DoDisplayWorksByCreator.java:76 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'u' comparada '7' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[ERROR] 011/bci/core/LibraryManager.java:76 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] 011/bci/core/Parser.java:27 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'tag' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
Auditoria completa.
O Checkstyle terminou com 10 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] 011/bci/core/LibraryManager.java:8 import 'bci.app.exception.NoSuchCreatorException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 011/bci/core/LibraryManager.java:10 import 'bci.app.exception.FileOpenFailedException' não permitido na classe 'LibraryManager'. [POCoreImport]
[WARN] 011/bci/core/LibraryManager.java:11 import 'bci.app.exception.FileSaveFailedException' não permitido na classe 'LibraryManager'. [POCoreImport]
[ERROR] 011/bci/core/LibraryManager.java:54 Classe 'FileSaveFailedException', 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]
[ERROR] 011/bci/core/LibraryManager.java:56 instanciação do tipo 'FileSaveFailedException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 011/bci/core/LibraryManager.java:60 instanciação do tipo 'FileSaveFailedException' não permitido em classes da camada de domínio. [POCoreImport]
[ERROR] 011/bci/core/LibraryManager.java:64 Classe 'FileSaveFailedException', 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]
[ERROR] 011/bci/core/LibraryManager.java:69 instanciação do tipo 'FileSaveFailedException' não permitido em classes da camada de domínio. [POCoreImport]
[WARN] 011/bci/core/Parser.java:9 import 'bci.app.exception.NoSuchWorkException' não permitido na classe 'Parser'. [POCoreImport]
Auditoria completa.
O Checkstyle terminou com 5 erros.

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

Iniciando a auditoria...
[ERROR] 011/bci/app/user/DoShowUsers.java:28 Membro estático 'private static String formatUserHuman(User u)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWork.java:42 Membro estático 'private static String formatWorkHuman(int index, Work w)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWork.java:66 Membro estático 'private static String centsToPt(int cents)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWork.java:72 Membro estático 'private static String mapCategoryPt(String cat)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWork.java:88 Membro estático 'private static String capitalizeFirst(String s)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWorks.java:32 Membro estático 'private static String formatWorkHuman(int index, Work w)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWorks.java:56 Membro estático 'private static String centsToPt(int cents)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWorks.java:62 Membro estático 'private static String mapCategoryPt(String cat)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWorks.java:79 Membro estático 'private static String capitalizeFirst(String s)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWorksByCreator.java:46 Membro estático 'private static String formatWorkHuman(int index, Work w)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWorksByCreator.java:70 Membro estático 'private static String centsToPt(int cents)' não recomendável. [POStaticMember]
[ERROR] 011/bci/app/work/DoDisplayWorksByCreator.java:76 Membro estático 'private static String mapCategoryPt(String cat)' não recomendável. [POStaticMember]
[ERROR] 011/bci/core/Parser.java:88 Membro estático 'private static int eurosToCents(String s, String line)' não recomendável. [POStaticMember]
[ERROR] 011/bci/core/Parser.java:98 Membro estático 'private static int parseInt(String s, String line)' não recomendável. [POStaticMember]
[ERROR] 011/bci/core/Parser.java:103 Membro estático 'private static String slug(String s)' não recomendável. [POStaticMember]
[INFO] 011/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 15 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: 1, dos quais 0 private, 0 package-private, 0 protected e 1 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (1): '[Category]'. [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 (8): '[User, Creator, Date, Dvd, Book, MyParser, LibraryManager, Library]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (7): '[MissingFileAssociationException, NoSuchWorkException, NoSuchUserException, UnavailableFileException, ImportFileException, UnrecognizedEntryException, NoSuchCreatorException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 63, dos quais 9 private, 5 package-private, 0 protected e 49 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 25, dos quais 25 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 )

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

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

    private final int _id
    private final String _name
    private final String _email
    private boolean _active

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

    public int getId()
    public String getName()
    public String getEmail()
    public boolean isActive()
    void suspend()
    void activate()

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

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

    private final String _id
    private final String _name
    private final List<Work> _works

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

    public String getId()
    public String getName()
    void addWork(Work w)
    public List<Work> getWorks()

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

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

    private int _current

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

    public int getCurrentDateInt()
    public void advanceDay(int days)

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

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

    private final String _igacReg

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

    public String getIgacReg()

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

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

    private final String _isbn

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

    public String getIsbn()

 [WriteClassStructure]
[INFO] class MyParser (  )

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

    private final Library _library

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

    void parseFile(String filename)
    private void parseLine(String line)
    private void parseUser(String c, String line)
    private void parseBook(String c, String line)
    private void parseDvd(String c, String line)
    private static int eurosToCents(String s, String line)
    private static int parseInt(String s, String line)
    private static String slug(String s)
    private String uniqueWorkIdFromTitle(String title)
    private boolean workExists(String id)

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

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

    private final String _id
    private final String _title
    private final int _priceCents
    private final String _category
    private final Creator _creator
    private int _totalCopies
    private int _availableCopies

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

    public String getId()
    public String getTitle()
    public int getPriceCents()
    public String getCategory()
    public Creator getCreator()
    public int getTotalCopies()
    public int getAvailableCopies()
    public void setInventory(int newTotal)

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

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

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

    private Library _library
    private String _filename

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

    public Library library()
    public int getCurrentDate()
    public int getCurrentDateInt()
    public void advanceDays(int d)
    public void advanceDay(int d)
    public void advanceDate(int d)
    public int registerUser(String name, String email)
    public User getUser(int id)
    public List<User> getUsers()
    public Work getWork(int id)
    public Work getWork(String id)
    public List<Work> getWorks()
    public List<Work> getWorksByCreator(String nameOrId)
    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String datafile)
    public void import_(String datafile)

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

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

    private final Date _date
    private final Map<Integer, User> _users
    private final Map<String, Work> _works
    private final Map<String, Creator> _creators
    private int _nextUserId

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

    public int getCurrentDateInt()
    public void advanceDay(int days)
    public int registerUser(String name, String email)
    public User getUser(int id)
    public List<User> getUsers()
    Creator getOrCreateCreator(String id, String name)
    public void addWork(Work w)
    public Work getWork(String id)
    public Work getWork(int idAsInt)
    public List<Work> getWorks()
    public List<Work> getWorksByCreator(String creatorId)
    public List<Work> getWorksByCreatorName(String name)
    public void importFile(String filename)

 [WriteClassStructure]
Auditoria completa.
