diff --git a/Album/.idea/vcs.xml b/Album/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/Album/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Album/Album.iml b/Album/Album.iml
new file mode 100644
index 0000000..bb6b39c
--- /dev/null
+++ b/Album/Album.iml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Album/src/Album.java b/Album/src/Album.java
new file mode 100644
index 0000000..7f7fc52
--- /dev/null
+++ b/Album/src/Album.java
@@ -0,0 +1,78 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Album {
+
+ public static final int PERCENTUAL_MINIMO_PARA_AUTO_COMPLETAR = 90;
+
+ private final Repositorio repositorio;
+ private final int quantItensPorPacotinho;
+
+ private List figurinhasColadas; // direct addressing
+
+ public Album(Repositorio repositorio, int quantItensPorPacotinho) {
+ this.repositorio = repositorio;
+ this.quantItensPorPacotinho = quantItensPorPacotinho;
+
+ int tamanhoFisicoDaLista = getTamanho() + 1;
+ this.figurinhasColadas = new ArrayList<>();
+ // inicializa as posições com nulls, para poder acessá-las diretamente
+ for (int i = 0; i < tamanhoFisicoDaLista; i++) {
+ this.figurinhasColadas.add(null);
+ }
+ }
+
+ public void receberNovoPacotinho(Pacotinho pacotinho) {
+ Figurinha[] figurinhasDoPacotinho = pacotinho.getFigurinhas();
+ if (figurinhasDoPacotinho.length != this.quantItensPorPacotinho) {
+ return; // melhor ainda: lançaria uma checked exception
+ }
+
+
+ }
+
+ public Figurinha getItemColado(int posicao) {
+ return null; // ToDo IMPLEMENT ME!!!
+ }
+
+ public boolean possuiItemColado(int posicao) {
+ return false; // ToDo IMPLEMENT ME!!!
+ }
+
+ public boolean possuiItemRepetido(int posicao) {
+ return false; // ToDo IMPLEMENT ME!!!
+ }
+
+ public int getTamanho() {
+ return this.repositorio.getTotalFigurinhas();
+ }
+
+ public int getQuantItensColados() {
+ return 0; // ToDo IMPLEMENT ME!!!
+ }
+
+ public int getQuantItensFaltantes() {
+ return getTamanho() - getQuantItensColados();
+ }
+
+ public void autoCompletar() {
+ // ToDo IMPLEMENT ME!!!
+ }
+
+// public static void main(String[] args) {
+// ArrayList meuArrayList = new ArrayList<>(200);
+//
+// // inicializa as posi'c~oes com nulls, para poder acess-las diretamente
+// for (int i = 0; i < 200; i++) {
+// meuArrayList.add(null);
+// }
+//
+//// System.out.println(meuArrayList.get(3));
+//
+// meuArrayList.add(3, 300000); // insert com shift right
+//
+// for (int numero : meuArrayList) {
+// System.out.println(numero);
+// }
+// }
+}
diff --git a/Album/src/AlbumTest.java b/Album/src/AlbumTest.java
new file mode 100644
index 0000000..a8e653d
--- /dev/null
+++ b/Album/src/AlbumTest.java
@@ -0,0 +1,127 @@
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class AlbumTest {
+
+ private Album albumFigurinhas;
+ private Repositorio repositorioFigurinhas;
+
+ private static final int TAMANHO_DO_ALBUM = 200;
+ private static final int ITENS_POR_PACOTE = 3;
+
+ @Before // roda antes de cada teste
+ public void setUp() {
+ this.repositorioFigurinhas = new Repositorio("album_copa2014", TAMANHO_DO_ALBUM);
+ this.albumFigurinhas = new Album(repositorioFigurinhas, ITENS_POR_PACOTE);
+ }
+
+ private void popularAlbum(int[] posicoesDesejadas) {
+ Pacotinho pacote = new Pacotinho(this.repositorioFigurinhas, posicoesDesejadas);
+ this.albumFigurinhas.receberNovoPacotinho(pacote);
+ }
+
+ @Test
+ public void testarPossuiFigurinhaParaFigurinhasExistentes() {
+ popularAlbum(new int[] {1, 2, 3});
+
+ for (int i = 1; i <= 3; i++) {
+ assertTrue("Figurinhas já inseridas devem ser encontradas",
+ this.albumFigurinhas.possuiItemColado(i));
+ }
+ }
+
+ @Test
+ public void testarPossuiFigurinhaParaFigurinhasAusentes() {
+ popularAlbum(new int[] {1, 2, 3});
+
+ assertFalse("Não devemos encontrar no álbum figurinhas nunca inseridas",
+ this.albumFigurinhas.possuiItemColado(4));
+ assertFalse("Não devemos encontrar figurinhas de posições não-positivas",
+ this.albumFigurinhas.possuiItemColado(-390));
+ assertFalse("Não devemos encontrar figurinhas maiores do que o tamanho",
+ this.albumFigurinhas.possuiItemColado(TAMANHO_DO_ALBUM + 1));
+ }
+
+ @Test
+ public void testarPossuiRepetidaParaFigurinhaRepetida() {
+ popularAlbum(new int[] {1, 2, 3});
+ assertFalse(this.albumFigurinhas.possuiItemRepetido(2)); // sanity check
+
+ popularAlbum(new int[] {2, 8, 9});
+ assertTrue(this.albumFigurinhas.possuiItemRepetido(2));
+ }
+
+ @Test
+ public void testarGetTamanhoAlbum() {
+ assertEquals(TAMANHO_DO_ALBUM, this.albumFigurinhas.getTamanho());
+ }
+
+ @Test
+ public void testarGetContFigurinhas() {
+ popularAlbum(new int[] {1, 2, 3});
+ assertEquals(3, this.albumFigurinhas.getQuantItensColados());
+
+ // vou agora abrir outro pacotinho com as mesmas figurinhas
+ // e verificar que o álbum terá ainda 3 figurinhas
+
+ popularAlbum(new int[] {1, 2, 3});
+ assertEquals(3, this.albumFigurinhas.getQuantItensColados());
+ }
+
+ @Test
+ public void testarGetQuantasFaltam() {
+ popularAlbum(new int[] {1, 2, 3});
+ assertEquals(TAMANHO_DO_ALBUM - 3,
+ this.albumFigurinhas.getQuantItensFaltantes());
+ }
+
+ @Test
+ public void testarAutoCompletar() {
+ albumFigurinhas.autoCompletar();
+ assertEquals("Não deve ser possível auto-completar um álbum que esteja vazio",
+ TAMANHO_DO_ALBUM, albumFigurinhas.getQuantItensFaltantes());
+
+ // agora vamos adicionar pacotinhos aleatórios até o álbum ficar quase cheio
+
+ int minimoFigurinhasColadasParaAutoCompletar =
+ (int) (TAMANHO_DO_ALBUM * Album.PERCENTUAL_MINIMO_PARA_AUTO_COMPLETAR / 100f);
+
+ while (albumFigurinhas.getQuantItensColados() < minimoFigurinhasColadasParaAutoCompletar) {
+ Pacotinho novoPacotinho = new Pacotinho(
+ this.repositorioFigurinhas, ITENS_POR_PACOTE); // aleatório
+ albumFigurinhas.receberNovoPacotinho(novoPacotinho);
+ }
+
+ // sanity check
+ assertTrue(albumFigurinhas.getQuantItensFaltantes() > 0);
+
+ albumFigurinhas.autoCompletar();
+
+ assertEquals("O álbum deve estar completo após uma chamada válida ao auto-completar",
+ 0, albumFigurinhas.getQuantItensFaltantes()); // álbum completo!
+ }
+
+ @Test
+ public void testarGetItemColado() {
+ popularAlbum(new int[] {1, 2, 3});
+ Figurinha figurinha = albumFigurinhas.getItemColado(2);
+
+ assertNotNull(figurinha);
+
+ assertEquals(2, figurinha.getPosicao());
+
+ assertNull(albumFigurinhas.getItemColado(4));
+ }
+
+ @Test
+ public void testarRejeicaoPacotinhosDeTamanhoErrado() {
+ popularAlbum(new int[] {1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 8});
+
+ assertEquals("Pacotes de tamanho distinto do informado na construção " +
+ "do álbum devem ser rejeitados",
+ 0, albumFigurinhas.getQuantItensColados());
+ }
+
+}
\ No newline at end of file
diff --git a/Album/src/Figurinha.java b/Album/src/Figurinha.java
new file mode 100644
index 0000000..a97ca20
--- /dev/null
+++ b/Album/src/Figurinha.java
@@ -0,0 +1,25 @@
+import java.awt.*;
+
+public class Figurinha {
+
+ private final Image imagem;
+ private final int posicao;
+
+ public Figurinha(int posicao, String urlDaImagem) {
+ this.imagem = obterImagem(urlDaImagem);
+ this.posicao = posicao;
+ }
+
+ private Image obterImagem(String url) {
+ // ToDo baixaria da Internet...
+ return null;
+ }
+
+ public Image getImagem() {
+ return imagem;
+ }
+
+ public int getPosicao() {
+ return posicao;
+ }
+}
diff --git a/Album/src/Pacotinho.java b/Album/src/Pacotinho.java
new file mode 100644
index 0000000..1211655
--- /dev/null
+++ b/Album/src/Pacotinho.java
@@ -0,0 +1,23 @@
+public class Pacotinho {
+
+
+
+ public Pacotinho(Repositorio repo, int[] posicoesDesejadas) {
+ // ToDo IMPLEMENT ME!!!
+ }
+
+ /**
+ * Produz um pacotinho com quantFigurinhas sorteadas aleatoriamente
+ * dentre aqueles presentes no repositório informado.
+ *
+ * @param repo o repositório desejado
+ * @param quantFigurinhas a quantidade de figurinhas a constar no pacotinho
+ */
+ public Pacotinho(Repositorio repo, int quantFigurinhas) {
+ // ToDo IMPLEMENT ME!!!
+ }
+
+ public Figurinha[] getFigurinhas() {
+ return null; // ToDo IMPLEMENT ME!!!
+ }
+}
diff --git a/Album/src/Repositorio.java b/Album/src/Repositorio.java
new file mode 100644
index 0000000..f1a4a4e
--- /dev/null
+++ b/Album/src/Repositorio.java
@@ -0,0 +1,21 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Repositorio {
+
+ private static final String PREFIXO_URL_IMAGENS = "http://www.nossoalbum.com.br/imagens/";
+
+ private List todasAsFigurinhas;
+
+ public Repositorio(String sufixoUrlImagens, int quantFigurinhas) {
+ todasAsFigurinhas = new ArrayList<>(quantFigurinhas);
+ for (int i = 1; i <= quantFigurinhas; i++) {
+ Figurinha fig = new Figurinha(i, PREFIXO_URL_IMAGENS + sufixoUrlImagens);
+ todasAsFigurinhas.add(fig);
+ }
+ }
+
+ public int getTotalFigurinhas() {
+ return this.todasAsFigurinhas.size();
+ }
+}