// Last edited on 2014-12-16 00:42:35 by stolfilocal package quack; public interface Contact { // Cada instancia desta classe representa um relacionamento entre dois // usuarios, {A} (/origem/, {source}) e {B} (/alvo/, {target}). // Pode indicar que {A} segue {B}, bloqueia {B}, etc. // Em princípio, todo contato é criado por iniciativa do // usuário de origem. // Cada contato tem um /estado/ que pode ser "Follow", "Block" ou "Inactive". // Cada contato também lembra a última datahora em que o estado foi modificado // (ou o contato foi criado, se nunca foi modificado). // Um contato entre {A} e {B} com estado "Inactive" é equivalente à ausência // de contato, exceto pela data de última modificação. public Contact initialize(User source, User target, String status, long lastModTime); // Inicializa uma instância {this} da classe {Contact} com {source}, // {target}, estado {status} e datahora de modificação {lastModTime}. // Devolve o objeto inicializado. public User getSource(); // Usuario origem do contato. public User getTarget(); // Usuario alvo do contato. public String getStatus(); // Estado (natureza) do contato. Pode ser: // "Follow" se o usuário fonte /segue/ o alvo, isto é, quer ver na sua caixa de entrada // as mensagens postadas ou repostadas pelo usuário alvo. // "Block" se o usuário fonte /bloqueia/ o alvo, isto é, não quer ver // na sua caixa de entrada as mensagens postadas ou repostadas pelo alvo, // mesmo se elas mencionarem o usuário fonte. // ??{ E se forem repostadas por usuários seguidos pelo fonte? }??. // "Inactive" se um relacionamento anterior foi cancelado. public void setStatus(String newStatus, long modTime); // Muda o status do contato para {newStatus}, que deve ser // "Inactive", "Follow", ou "Block". Qualquer outro valor é // erro fatal. Atualiza a datahora de última modificação para // {modTime}. public long getLastModTime(); // Datahora da criação ou ultima modificacao no estado do relacionamento. }