

####    Verificação do uso correcto do mecanismo de excepções


Nada a assinalar


####    Quebra do encapsulamento


[ERROR] 042/bci/core/user/Utente.java:156:	MethodReturnsFieldCollectionRule:	Possível quebra de encapsulamento na classe Utente com o método getInteresses a devolver um Map
Total de erros:  1


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


[INFO] 042/bci/core/Library.java:0:	POLooseCouplingRule:	Aplicação correcta (7) e incorrecta (0) do princípio Programar para abstracção no ficheiro Library.java.
[INFO] 042/bci/core/LibraryManager.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro LibraryManager.java.
[INFO] 042/bci/core/TempoRequisicao.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (0) do princípio Programar para abstracção no ficheiro TempoRequisicao.java.
[INFO] 042/bci/core/request/rules/AvaliadorRegras.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro AvaliadorRegras.java.
[INFO] 042/bci/core/user/Utente.java:0:	POLooseCouplingRule:	Aplicação correcta (7) e incorrecta (0) do princípio Programar para abstracção no ficheiro Utente.java.
[INFO] 042/bci/core/work/Criador.java:0:	POLooseCouplingRule:	Aplicação correcta (2) e incorrecta (0) do princípio Programar para abstracção no ficheiro Criador.java.
[INFO] 042/bci/core/work/Livro.java:0:	POLooseCouplingRule:	Aplicação correcta (3) e incorrecta (0) do princípio Programar para abstracção no ficheiro Livro.java.
[INFO] 042/bci/core/work/Obra.java:0:	POLooseCouplingRule:	Aplicação correcta (1) e incorrecta (0) do princípio Programar para abstracção no ficheiro Obra.java.
Total de erros:  0


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


[ERROR] 042/bci/core/request/rules/AvaliadorRegras.java:23:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe AvaliadorRegras - devolve atributo (_regras) em método público (getRegras)
[ERROR] 042/bci/core/user/Utente.java:145:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe Utente - devolve atributo (_notificacoesAtuais) em método público (getNotificacaoPopup)
[ERROR] 042/bci/core/user/Utente.java:157:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe Utente - devolve atributo (_mapNotificacoes) em método público (getInteresses)
[ERROR] 042/bci/core/user/Utente.java:183:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe Utente - devolve atributo (_requisicoes) em método público (getRequisicoes)
[ERROR] 042/bci/core/work/Criador.java:22:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe Criador - devolve atributo (_obras) em método público (getObras)
[ERROR] 042/bci/core/work/Livro.java:24:	MethodReturnsFieldCollectionRule:	Erro: Fuga de privacidade na classe Livro - devolve atributo (_criador) em método público (getCriador)
[INFO] 042/bci/core/work/Livro.java:16:	MethodReturnsFieldCollectionRule:	Fuga de privacidade na classe Livro, por atribuição de parâmetro a atributo criador, evitada por criação de cópia (new new LinkedHashSet(criador)) no construtor.
Total de erros:  6
Total de fugas evitadas:        1


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


[WARN] 042/bci/core/work/Livro.java:34:	EmptyControlStatement:	Empty if statement
[WARN] 042/bci/core/Library.java:278:23: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/core/Library.java:342:23: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/core/Library.java:427:16: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/core/Library.java:430:20: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[ERROR] 042/bci/core/Library.java:441:5: Iteração de um mapa referenciado por 'interesses' (do tipo 'Map<Integer, Set<Notificacao>>') num ciclo 'for' utilizando os métodos keySet e get em vez de iterar directamente através do método ´values´. [POKeySetInvocation]
[WARN] 042/bci/core/work/Livro.java:34:23: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/core/request/rules/Regra2.java:11:27: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/core/request/rules/Regra3.java:10:5: A lógica condicional pode ser removida. [SimplifyBooleanReturn]
[WARN] 042/bci/app/user/DoPayFine.java:30:25: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/app/request/DoReturnWork.java:36:61: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/app/request/DoRequestWork.java:45:68: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/app/main/DoOpenFile.java:27:34: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/app/main/DoOpenFile.java:28:50: A expressão pode ser simplicada. [SimplifyBooleanExpression]
[WARN] 042/bci/app/main/DoSaveFile.java:25:35: A expressão pode ser simplicada. [SimplifyBooleanExpression]
Total de erros:  1


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


Nada a assinalar


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

[ERROR] 042/bci/core/TempoRequisicao.java:8:56: A constante com o nome 'regras' deve condizer com o padrão '^[A-Z][A-Z0-9]*(_[A-Z]+)*$'. [ConstantName]
[ERROR] 042/bci/core/Library.java:43:49: O atributo com o nome 'REGRAS_TEMPO'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName]
[ERROR] 042/bci/core/request/rules/Regra2.java:6:14: O tipo 'Regra2' deve condizer com o padrão '^[A-Z][a-zA-Z]+$'. [TypeName]
[ERROR] 042/bci/core/request/rules/Regra3.java:6:14: O tipo 'Regra3' deve condizer com o padrão '^[A-Z][a-zA-Z]+$'. [TypeName]
[ERROR] 042/bci/core/request/rules/Regra4.java:7:14: O tipo 'Regra4' deve condizer com o padrão '^[A-Z][a-zA-Z]+$'. [TypeName]
[ERROR] 042/bci/core/request/rules/Regra5.java:7:14: O tipo 'Regra5' deve condizer com o padrão '^[A-Z][a-zA-Z]+$'. [TypeName]
[ERROR] 042/bci/core/request/rules/Regra6.java:7:14: O tipo 'Regra6' deve condizer com o padrão '^[A-Z][a-zA-Z]+$'. [TypeName]
[ERROR] 042/bci/core/request/rules/Regra1.java:7:14: O tipo 'Regra1' deve condizer com o padrão '^[A-Z][a-zA-Z]+$'. [TypeName]
[ERROR] 042/bci/core/exception/Regra3Exception.java:3:14: O tipo 'Regra3Exception' deve condizer com o padrão '^[A-Z][a-zA-Z]+$'. [TypeName]
[ERROR] 042/bci/app/user/DoShowUsers.java:22:18: A variável local com o nome '_utentes'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName]
Total de erros:  10

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

Iniciando a auditoria...
[INFO] 042/bci/core/LibraryManager.java:56 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization]
[INFO] 042/bci/core/LibraryManager.java:75 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] 042/bci/core/Library.java:483 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'classificacao' comparada '2' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 042/bci/core/Parser.java:28 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] 042/bci/core/notification/TipoNotificacao.java:6 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'this' comparada '3' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 042/bci/core/request/rules/Regra4.java:10 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'classificacao' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple]
[WARN] 042/bci/core/work/CategoriaObra.java:6 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]
Auditoria completa.

####  Verificação de dependência app de core

Iniciando a auditoria...
[ERROR] 042/bci/app/request/DoRequestWork.java:46 Instanciação de classe do domínio 'Notificacao' não permitido na camada da aplicação. [POCreateCoreEntitiesInApp]
Auditoria completa.
O Checkstyle terminou com 1 erros.

####  Verificação do uso desnecessário de super


Nada a assinalar


####  Verificação de dependência de core de app

Iniciando a auditoria...
[WARN] 042/bci/core/exception/NoSuchCreatorException.java:3 import 'pt.tecnico.uilib.menus.CommandException' não permitido na classe 'NoSuchCreatorException'. [POCoreImport]
[ERROR] 042/bci/core/exception/NoSuchCreatorException.java:5 Classe 'CommandException' definida na camada de aplicação. Não pode ser superclasse da classe do domínio 'NoSuchCreatorException'. [POCoreImport]
[WARN] 042/bci/core/exception/NoSuchUserException.java:3 import 'pt.tecnico.uilib.menus.CommandException' não permitido na classe 'NoSuchUserException'. [POCoreImport]
[ERROR] 042/bci/core/exception/NoSuchUserException.java:8 Classe 'CommandException' definida na camada de aplicação. Não pode ser superclasse da classe do domínio 'NoSuchUserException'. [POCoreImport]
[WARN] 042/bci/core/exception/NoSuchWorkException.java:3 import 'pt.tecnico.uilib.menus.CommandException' não permitido na classe 'NoSuchWorkException'. [POCoreImport]
[ERROR] 042/bci/core/exception/NoSuchWorkException.java:8 Classe 'CommandException' definida na camada de aplicação. Não pode ser superclasse da classe do domínio 'NoSuchWorkException'. [POCoreImport]
[WARN] 042/bci/core/exception/UserIsActiveException.java:3 import 'pt.tecnico.uilib.menus.CommandException' não permitido na classe 'UserIsActiveException'. [POCoreImport]
[ERROR] 042/bci/core/exception/UserIsActiveException.java:8 Classe 'CommandException' definida na camada de aplicação. Não pode ser superclasse da classe do domínio 'UserIsActiveException'. [POCoreImport]
[WARN] 042/bci/core/exception/UserRegistrationFailedException.java:3 import 'pt.tecnico.uilib.menus.CommandException' não permitido na classe 'UserRegistrationFailedException'. [POCoreImport]
[ERROR] 042/bci/core/exception/UserRegistrationFailedException.java:9 Classe 'CommandException' definida na camada de aplicação. Não pode ser superclasse da classe do domínio 'UserRegistrationFailedException'. [POCoreImport]
[WARN] 042/bci/core/exception/WorkNotBorrowedByUserException.java:3 import 'pt.tecnico.uilib.menus.CommandException' não permitido na classe 'WorkNotBorrowedByUserException'. [POCoreImport]
[ERROR] 042/bci/core/exception/WorkNotBorrowedByUserException.java:9 Classe 'CommandException' definida na camada de aplicação. Não pode ser superclasse da classe do domínio 'WorkNotBorrowedByUserException'. [POCoreImport]
Auditoria completa.
O Checkstyle terminou com 6 erros.

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

Iniciando a auditoria...
[INFO] 042/bci/core/TempoRequisicao.java:8 Atributo estático final 'Map<ClassificacaoUtente, int[]> regras' permitido. [POStaticMember]
[ERROR] 042/bci/core/TempoRequisicao.java:14 Membro estático 'public static int calcularTempo(ClassificacaoUtente classificacao, int numExemplares)' não recomendável. [POStaticMember]
[INFO] 042/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 '18'. [POStaticMember]
Auditoria completa.
O Checkstyle terminou com 1 erros.

####  Verificação do nível de acesso dos atributos

Iniciando a auditoria...
[ERROR] 042/bci/core/request/rules/Regra.java:7 O atributo '_idRegra', com nível de acesso 'package', deveria ser privado e ter métodos acessores. [POVisibilityModifier]
Auditoria completa.
O Checkstyle terminou com 1 erros.

####  Verificação da necessidade da concretização de hashCode e equals

Iniciando a auditoria...
[WARN] Possível erro: A classe 'Requisicao' utilizada no atributo 'private Set<Requisicao> _requisicoes' da classe 'Utente' não substitui os métodos hashCode e equals. [WriteClassStructure]
[WARN] Possível erro: A classe 'Criador' utilizada no atributo 'private Set<Criador> _criador' da classe 'Livro' não substitui os métodos hashCode e equals. [WriteClassStructure]
[WARN] Possível erro: A classe 'Obra' utilizada no atributo 'private Set<Obra> _obras' da classe 'Criador' não substitui os métodos hashCode e equals. [WriteClassStructure]
Auditoria completa.

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

Iniciando a auditoria...
[ERROR] Attribute '_idRegra' specified in superclass 'Regra' duplicated in subclass 'Regra2'. [WriteClassStructure]
[ERROR] Attribute '_idRegra' specified in superclass 'Regra' duplicated in subclass 'Regra1'. [WriteClassStructure]
[ERROR] Attribute '_idRegra' specified in superclass 'Regra' duplicated in subclass 'Regra4'. [WriteClassStructure]
[ERROR] Attribute '_idRegra' specified in superclass 'Regra' duplicated in subclass 'Regra3'. [WriteClassStructure]
[ERROR] Attribute '_idRegra' specified in superclass 'Regra' duplicated in subclass 'Regra6'. [WriteClassStructure]
[ERROR] Attribute '_idRegra' specified in superclass 'Regra' duplicated in subclass 'Regra5'. [WriteClassStructure]
Auditoria completa.
O Checkstyle terminou com 6 erros.

####  Sumário das classes do core da aplicação

Iniciando a auditoria...
[INFO] Número total de interfaces definidos no core: 1, dos quais 0 private, 0 package-private, 0 protected e 1 public. [WriteClassStructure]
[INFO] Interfaces definidos no package core da aplicação (1): '[CheckRegra]'. [WriteClassStructure]
[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): '[TipoNotificacao, ClassificacaoUtente, CategoriaObra]'. [WriteClassStructure]
[INFO] Número total de classes definidos no core: 32, dos quais 0 private, 1 package-private, 0 protected e 31 public. [WriteClassStructure]
[INFO] Classes abstractas definidas no package core da aplicação (2): '[Obra, Regra]'. [WriteClassStructure]
[INFO] Classes concretas e não excepções definidas no package core da aplicação (24): '[Regra2, Regra1, Utente, WorkNotBorrowedByUserException, NoSuchUserException, UserIsActiveException, Livro, MyParser, Notificacao, NoSuchCreatorException, Regra4, Regra3, Regra6, Regra5, NoSuchWorkException, TempoRequisicao, AvaliadorRegras, Data, Dvd, LibraryManager, Library, UserRegistrationFailedException, Criador, Requisicao]'. [WriteClassStructure]
[INFO] Excepções definidas no package core da aplicação (6): '[UnavailableFileException, BorrowingRuleFailedException, UnrecognizedEntryException, Regra3Exception, MissingFileAssociationException, ImportFileException]'. [WriteClassStructure]
[INFO] Número total de métodos nas classes do core (sem excepções): 139, dos quais 4 private, 32 package-private, 0 protected e 103 public. [WriteClassStructure]
[INFO] Número total de atributos nas classes do core (sem excepções): 50, dos quais 49 private, 1 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 TipoNotificacao ( public )

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

    public String toString()

 [WriteClassStructure]
[INFO] enum ClassificacaoUtente ( public )

 [WriteClassStructure]
[INFO] enum CategoriaObra ( public )

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

    public String toString()

 [WriteClassStructure]
[INFO] interface CheckRegra ( public )

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

    public boolean check(Utente utente, Obra obra)

 [WriteClassStructure]
[INFO] class Regra2 ( public )
  extends Regra

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

    private int _idRegra

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

    public boolean check(Utente utente, Obra obra)
    public int getId()

 [WriteClassStructure]
[INFO] class Regra1 ( public )
  extends Regra

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

    private int _idRegra

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

    public boolean check(Utente utente, Obra obra)
    public int getId()

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

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

    private int _id
    private boolean _estaAtivo
    private String _nome
    private String _email
    private int _multaPassada
    private ClassificacaoUtente _classificacaoUtente
    private List<String> _notificacoesAtuais
    private Map<Integer, Set<Notificacao>> _mapNotificacoes
    private Set<Requisicao> _requisicoes
    private int _devolucoesSeguidas
    private int _devolucoesFaltosas

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

    public int getId()
    public boolean isActive()
    public String getNome()
    String getEmail()
    public int getDevolucoesSeguidas()
    public int getDevolucoesFaltosas()
    public ClassificacaoUtente getClassificacaoUtente()
    public String toString()
    public void suspenderUtente()
    public void ativarUtente()
    public void incrementaDevolucoesSeguidas(int num)
    public void zeraDevolucoesSeguidas()
    public void incrementaFaltosas(int num)
    public void zeraFaltosas()
    public void adicionaMultaPassada(int num)
    public void setClassificacaoUtente(ClassificacaoUtente classificacaoUtente)
    public Set<Requisicao> requisicoesForaPrazo(int diaAtual)
    public void pagarMulta(int diaAtual)
    public List<String> getNotificacaoPopup()
    public void adicionaNotificacaoPopup(String toString)
    public void limparNotificacaoPopup()
    public Map<Integer, Set<Notificacao>> getInteresses()
    public void adicionaInteresse(int idObra, Notificacao notificacao)
    public void removeInteresse(int idObra, Notificacao notificacao)
    public Set<Requisicao> getRequisicoes()
    public int getMultaPassada()
    public void zeraMultaPassada()
    public void removeRequisicao(Requisicao requisicao)
    public void adicionaRequisicao(Requisicao requisicao)

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

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

    private int _id
    private int _preco
    private int _numeroExemplares
    private int _numeroTotalExemplares
    private String _titulo
    private CategoriaObra _categoria

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

    public int getId()
    public int getPreco()
    public int getNumeroExemplares()
    public int getNumeroTotalExemplares()
    public String getTitulo()
    public CategoriaObra getCategoria()
    public boolean hasExemplares()
    public void alteraInventario(int quantidadeAlterar)
    public void alteraExemplaresDisponiveis(int quantidadeAlterar)
    public abstract boolean hasCriadores()
    abstract String getTipo()
    abstract void adicionaCriador(Criador criador)
    public abstract Set<Criador> getCriador()
    String getDescription()
    public abstract String toString()

  ###### Subclasses  ###### 
    Livro   Dvd   

   Method hasCriadores() overriden in subclass(es) Livro Dvd 
   Method getTipo() overriden in subclass(es) Livro Dvd 
   Method adicionaCriador(Criador) overriden in subclass(es) Livro Dvd 
   Method getCriador() overriden in subclass(es) Livro Dvd 
   Method toString() overriden in subclass(es) Livro Dvd 
 [WriteClassStructure]
[INFO] class WorkNotBorrowedByUserException ( public )
  extends CommandException

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

    private final int _userId
    private final int _workId

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

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

 [WriteClassStructure]
[INFO]  abstract class Regra ( public implements CheckRegra )

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

    int _idRegra

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

    public abstract boolean check(Utente utente, Obra obra)
    public abstract int getId()

  ###### Subclasses  ###### 
    Regra2   Regra1   Regra4   Regra3   Regra6   Regra5   

   Method check(Utente, Obra) overriden in subclass(es) Regra2 Regra1 Regra4 Regra3 Regra6 Regra5 
   Method getId() overriden in subclass(es) Regra2 Regra1 Regra4 Regra3 Regra6 Regra5 
 [WriteClassStructure]
[INFO] class Livro ( public )
  extends Obra

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

    private String _isbn
    private Set<Criador> _criador

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

    String getIsbn()
    public Set<Criador> getCriador()
    void adicionaCriador(Criador criador)
    void removeCriador(Criador criador)
    public boolean hasCriadores()
    String getTipo()
    public String toString()

 [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] class Notificacao ( public implements Serializable )

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

    private TipoNotificacao _tipoNotificacao

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

    public String toString()
    public TipoNotificacao getTipoNotificacao()
    public void setTipoNotificacao(TipoNotificacao tipoNotificacao)

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

 [WriteClassStructure]
[INFO] class Regra4 ( public )
  extends Regra

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

    private int _idRegra

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

    public boolean check(Utente utente, Obra obra)
    public int getId()

 [WriteClassStructure]
[INFO] class Regra3 ( public )
  extends Regra

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

    private int _idRegra

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

    public boolean check(Utente utente, Obra obra)
    public int getId()

 [WriteClassStructure]
[INFO] class Regra6 ( public )
  extends Regra

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

    private int _idRegra

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

    public boolean check(Utente utente, Obra obra)
    public int getId()

 [WriteClassStructure]
[INFO] class Regra5 ( public )
  extends Regra

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

    private int _idRegra

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

    public boolean check(Utente utente, Obra obra)
    public int getId()

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

 [WriteClassStructure]
[INFO] class TempoRequisicao ( public )

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

    private final static Map<ClassificacaoUtente, int[]> regras

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

    public static int calcularTempo(ClassificacaoUtente classificacao, int numExemplares)

 [WriteClassStructure]
[INFO] class AvaliadorRegras ( public )

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

    private List<Regra> _regras

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

    public void adicionaRegra(Regra regra)
    public List<Regra> getRegras()

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

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

    private int _currentDate

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

    public int getCurrentDate()
    void advanceDays(int dias)

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

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

    private String _igac
    private Criador _criador

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

    String getIgac()
    public Set<Criador> getCriador()
    void adicionaCriador(Criador criador)
    void removeCriador(Criador criador)
    public boolean hasCriadores()
    String getTipo()
    public String toString()

 [WriteClassStructure]
[INFO] class LibraryManager ( public )

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

    private Library _library
    private String _filename

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

    public Library getLibrary()
    public String getFileName()
    public void save()
    public void saveAs(String filename)
    public void load(String filename)
    public void importFile(String datafile)
    public void advanceDays(int numero)
    public Utente registerUser(String nome, String email)
    public Criador getCriadorByNome(String nome)
    public Obra getObra(int idObra)
    public Utente getUtente(int idUtente)
    public boolean getAlteracao()
    public Data getCurrentDate()
    public int getIdObra()
    public int getIdUtente()
    public boolean changeWorkInventory(int idObra, int quantidadeAlterar)
    public List<Obra> getAllObrasSortedById()
    public List<Obra> efetuarPesquisa(String termo)
    public Requisicao requisitarObra(int idUtente, int idObra)
    public Requisicao devolverRequisicao(int idUtente, int idObra)
    public void pagarMulta(int idUtente)

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

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

    private int _idUtente
    private int _idObra
    private Data _dia
    private Map<Integer, Utente> _mapUtentes
    private Map<Integer, Obra> _mapObras
    private Map<String, Criador> _mapCriadores
    private boolean _alteracao
    private final Map<ClassificacaoUtente, int[]> REGRAS_TEMPO

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

    void importFile(String filename)
    int getIdUtente()
    int getIdObra()
    Data getCurrentDate()
    boolean getAlteracao()
    Utente getUtente(int idUtente)
    Obra getObra(int idObra)
    Criador getCriadorByNome(String nome)
    void setAlteracao(boolean alteracao)
    void advanceDays(int numero)
    Utente registerUser(String nome, String email)
    Criador registerCreator(String nome)
    Dvd registerDvd(String titulo, Criador criador, int preco, CategoriaObra categoria, String igac, int nCopies)
    Livro registerBook(String titulo, Collection criador, int preco, CategoriaObra categoria, String isbn, int nCopies)
    List<Obra> getAllObrasSortedById()
    void removeObra(Obra obra)
    boolean changeWorkInventory(int idObra, int quantidadeAlterar)
    List<Obra> efetuarPesquisa(String termo)
    public int calcularTempo(ClassificacaoUtente classificacao, int numExemplares)
    public void notificaTipoNotificacaoObra(int idObra, TipoNotificacao tipoNotificacao)
    public Requisicao requisitarObra(int idUtente, int idObra)
    public int calcularMulta(int diaLimite)
    public ClassificacaoUtente checkSupposedCategory(Utente utente)
    public Requisicao devolverRequisicao(int idUtente, int idObra)
    public void pagarMulta(int idUtente)

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

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

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

    private String _nome
    private Set<Obra> _obras

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

    public String getNome()
    public Set<Obra> getObras()
    public void adicionaObra(Obra obra)
    public void removeObra(Obra obra)
    public boolean hasObras()

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

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

    private int _diaLimite
    private Obra _obra
    private Utente _utente

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

    public int getDiaLimite()
    public Obra getObra()
    public Utente getUtente()

 [WriteClassStructure]
Auditoria completa.
