

####    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] 028/bci/app/main/DoOpenFile.java:24:	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


Nada a assinalar


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

[ERROR] 028/bci/core/Work.java:10:17: O atributo com o nome '_AvailableCopies'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
Total de erros:  1

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

Iniciando a auditoria...
[INFO] 028/bci/core/LibraryManager.java:33 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 028/bci/core/LibraryManager.java:46 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 028/bci/core/LibraryManager.java:61 ObjectInputStream criado no método 'public void load(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[ERROR] Número errado de instâncias criadas de 'ObjectOutputStream'. Devia ser 1 e é '2'. [CheckSerialization]
Auditoria completa.
O Checkstyle terminou com 1 erros.

####  Verificação do princípio de desenho aberto/fechado

Iniciando a auditoria...
[ERROR] 028/bci/core/Library.java:155 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] 028/bci/core/LibraryManager.java:63 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] 028/bci/core/MyParser.java:58 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]
[WARN] 028/bci/core/Work.java:36 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão '_category' comparada '2' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
Auditoria completa.
O Checkstyle terminou com 2 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] 028/bci/core/exception/NoSuchCreatorExceptionCore.java:3 import 'pt.tecnico.uilib.menus.CommandException' não permitido na classe 'NoSuchCreatorExceptionCore'. [POCoreImport]
[ERROR] 028/bci/core/exception/NoSuchCreatorExceptionCore.java:5 Classe 'CommandException' definida na camada de aplicação. Não pode ser superclasse da classe do domínio 'NoSuchCreatorExceptionCore'. [POCoreImport]
[WARN] 028/bci/core/exception/NoSuchUserExceptionCore.java:3 import 'pt.tecnico.uilib.menus.CommandException' não permitido na classe 'NoSuchUserExceptionCore'. [POCoreImport]
[ERROR] 028/bci/core/exception/NoSuchUserExceptionCore.java:8 Classe 'CommandException' definida na camada de aplicação. Não pode ser superclasse da classe do domínio 'NoSuchUserExceptionCore'. [POCoreImport]
[WARN] 028/bci/core/exception/NoSuchWorkExceptionCore.java:3 import 'pt.tecnico.uilib.menus.CommandException' não permitido na classe 'NoSuchWorkExceptionCore'. [POCoreImport]
[ERROR] 028/bci/core/exception/NoSuchWorkExceptionCore.java:5 Classe 'CommandException' definida na camada de aplicação. Não pode ser superclasse da classe do domínio 'NoSuchWorkExceptionCore'. [POCoreImport]
Auditoria completa.
O Checkstyle terminou com 3 erros.

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

Iniciando a auditoria...
[INFO] 028/bci/core/exception/ImportFileException.java:7 Atributo estático final 'String ERROR_MESSAGE' permitido. [POStaticMember]
[INFO] 028/bci/core/exception/NoIdMatchException.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 '16'. [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 enumerados definidos no core: 2, dos quais 0 private, 2 package-private, 0 protected e 0 public. [WriteClassStructure]
[INFO] Enumerados definidos no package core da aplicação (2): '[Category, UserBehavior]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 16, dos quais 0 private, 6 package-private, 0 protected e 10 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, NoSuchWorkExceptionCore, NoSuchUserExceptionCore, Creator, Dvd, Book, MyParser, LibraryManager, Library, NoSuchCreatorExceptionCore]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (5): '[MissingFileAssociationException, NoIdMatchException, UnavailableFileException, ImportFileException, UnrecognizedEntryException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 62, dos quais 4 private, 39 package-private, 0 protected e 19 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 28, dos quais 28 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 (  )

 [WriteClassStructure]
[INFO] enum UserBehavior (  )

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

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

    private int _id
    private boolean _isActive
    private String _name
    private String _email
    private int _fine
    private UserBehavior _behavior

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

    String isActive()
    int getUserId()
    String getName()
    public String toString()

 [WriteClassStructure]
[INFO] class NoSuchWorkExceptionCore ( public )
  extends CommandException

 [WriteClassStructure]
[INFO] class NoSuchUserExceptionCore ( public )
  extends CommandException

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

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

    private String _name
    private List<Work> _workList

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

    void addWork(Work work)
    void removeWork(int workId)
    String getName()
    List<Work> getWorkList()

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

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

    private String _igac
    private Creator _creator

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

    String getType()
    String getAdInfo()
    Creator getCreator()

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

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

    private String _isbn
    private List<Creator> _creators

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

    String getType()
    String getAdInfo()
    List<Creator> getCreators()

 [WriteClassStructure]
[INFO] class MyParser (  )

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

    private 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]  abstract class Work (  implements Serializable )

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

    private int _workId
    private String _title
    private int _price
    private int _numberOfCopies
    private int _AvailableCopies
    private Category _category

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

    int getWorkId()
    int getNumberOfCopies()
    int getAvailableCopies()
    String getTitle()
    int getPrice()
    abstract String getType()
    abstract String getAdInfo()
    String getCategoryString()
    public String toString()

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

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

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

    private Library _library
    private String _filename
    private boolean _modified

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

    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String datafile)
    public int getCurrentDay()
    public void advanceDays(int days)
    public void alterInvWork(int number, int workId)
    public String listWork(int workId)
    public String listWorks()
    public String listWorksByCreators(String name)
    public int registerUser(String name, String email)
    public String listUser(int userId)
    public String listUsers()
    public void registerDvd(String igac, Creator creator, String title, int price, int numberOfCopies, Category type)
    public void registerBook(String isbn, int price, String title, int numberOfCopies, . creators, Category type)
    public Creator registerCreator(String name)
    public boolean isModified()

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

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

    private List<Work> _listOfWorks
    private List<Creator> _listOfCreators
    private List<User> _listOfUsers
    private int _currentDay
    private int _nextWorkId
    private int _nextUserId

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

    void importFile(String filename)
    List<Work> getListOfWorks()
    List<Creator> getListOfCreators()
    List<User> getListOfUsers()
    String listWork(int workId)
    String listWorks()
    String listWorksByCreators(String name)
    void verify(Work work)
    void alterInvWork(int number, int workId)
    void registerDvd(String igac, Creator creator, String title, int price, int numberOfCopies, Category type)
    void registerBook(String isbn, int price, String title, int numberOfCopies, List creators, Category type)
    Creator registerCreator(String name)
    int getCurrentDay()
    void advanceDays(int days)
    int registerUser(String name, String email)
    String listUser(int userId)
    String listUsers()

 [WriteClassStructure]
[INFO] class NoSuchCreatorExceptionCore ( public )
  extends CommandException

 [WriteClassStructure]
Auditoria completa.
