O trabalho consiste em implementar um diretório de músicas para streaming simplificado, como os aplicativos Spotify ou Deezer.

O trabalho deverá conter as seguintes características:

A implementação da execução das ações deverá utilizar os padrões Singleton, Composite e Visitor. A descrição abaixo é uma visão geral dos componentes dos padrões e suas relações com o trabalho. O aluno deverá interpretá-lo e fazer as adaptações que julgar necessárias para o bom funcionamento da aplicação.

1 – Padrões e especificação

Singleton https://en.wikipedia.org/wiki/Singleton_pattern

O padrão Singleton deve ser usado para criação do serviço de streaming, que será único para uma dada aplicação. O serviço deverá armazenar informações referentes ao login do usuário, senha, plano escolhido (premium, normal, free), e armazenar o diretório com as músicas que poderão ser tocadas. O diretório deverá seguir o padrão Composite, conforme descrito abaixo.

Composite https://en.wikipedia.org/wiki/Composite_pattern

O diretório de músicas terá Playlists, sendo que as Playlists poderão ter 1 ou vários álbuns, e os álbuns poderão ter várias músicas.

As PlayLists terão um nome, o estilo principal e um estilo secundário. Os álbuns terão nome, nome da banda e estilo. As músicas terão estilo, nome e duração.

Visitor https://en.wikipedia.org/wiki/Visitor_pattern

A estrutura do diretório de músicas deverá ser integrada com o padrão visitor, sendo que cada um dos elementos do diretório descritos acima poderá ser visitado por uma classe Visitor específica.

O diretório deverá ter 3 tipos de visitors diferentes: 1 visitor para listar todos os elementos; 1 visitor para listar todas as músicas de um determinado estilo; 1 visitor para todas as playlists e músicas de um determinado estilo e com duração de mais de 3 minutos. A listagem deverá imprimir o nome do elemento e o estilo musical.

2 – Uso : Programa

Criar uma classe Programa que :

  • Instancie um serviço de streaming.
  • No serviço de streaming, incluir no mínimo 5 playlists (p1..p5), sendo que p3 deverá pertencer à p1 e p5 à p2. Cada playlist deverá conter 4 álbuns, e cada álbum conter até 5 músicas.
  • Após a inclusão dos elementos, deverão ser executados as três possibilidades de listagem de elementos, através do padrão Visitor.

Nota IMPORTANTE.: não deverá ser criado entrada de dados via console ou interface gráfica;

ENTREGA

Todas as classes (fontes) devem estar em uma mesma pasta e compactadas em um arquivo trabalho062.jar ou em um arquivo trabalho062.zip. O comando para criar um jar é jar cvf trabalho062.jar ./*. Trabalhos sem os fontes não serão considerados. Os trabalhos deverão compilar e rodar facilmente nos servidores do Departamento de Informática.

DATA DE ENTREGA : 09.novembro.2017. Cada dia de atraso será descontado 10 pontos da nota.

MODO DE ENTREGA : enviar o arquivo trabalho062.jar por email para marcos.ddf _at_ inf.ufpr.br (até as 24h da data final).
No corpo do email, colocar o nome e GRR dos integrantes da equipe (no máximo 2 integrantes). No assunto, preencher com “Entrega trabalho 062”.