Advertisement
Guest User

oh yeah

a guest
Nov 27th, 2018
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 41.99 KB | None | 0 0
  1. import com.sun.corba.se.spi.orbutil.fsm.Guard;
  2.  
  3. import javax.swing.plaf.metal.MetalToolBarUI;
  4. import java.sql.*;
  5. import java.util.zip.CheckedInputStream;
  6.  
  7. import java.util.Scanner;
  8.  
  9. class Menu {
  10.  
  11.     void imprime_menu_opcoes (){
  12.  
  13.         System.out.println("1. Criar playlist");
  14.         System.out.println("2. Adicionar musicas a playlist");
  15.         System.out.println("3. Ver playlist");
  16.         System.out.println("4. Adicionar musicas, albuns e artistas");
  17.         System.out.println("5. Ver a info de um album"); //MENU INFO
  18.         System.out.println("6. Ver a info de um artista"); //MENU INFO
  19.         System.out.println("7. Ver a info de uma musica"); //MENU INFO
  20.         System.out.println("8. Ver a info de um concerto"); //MENU INFO
  21.         System.out.println("9. Partilha de musica");
  22.         System.out.println("10. Upload de musica");
  23.         System.out.println("11. Criar concerto");
  24.         System.out.println("12. Associar artista a um concerto");
  25.         System.out.println("13. Criar setlist de um concerto");
  26.         System.out.println("14. Alterar ordem da setlist de um concerto");
  27.     }
  28.  
  29.  
  30.     void imprime_menu_inicial (){
  31.         System.out.println("1. Registo do user");
  32.         System.out.println("2. Login do user");
  33.     }
  34.  
  35.  
  36.  
  37.  
  38. }
  39.  
  40.  
  41.  
  42.  
  43.  
  44. class Metodos {
  45.  
  46.     void executa_login(String user, String pass, Connection connection) throws SQLException {
  47.  
  48.         String SQL = "select username, password from utilizador where username = ?";
  49.         PreparedStatement pstmt = connection.prepareStatement(SQL);
  50.         pstmt.setString(1, user);
  51.         ResultSet rs = pstmt.executeQuery();
  52.  
  53.         if (rs.next()) {
  54.             System.out.println("Esse mano ja existe na base de dados");
  55.  
  56.             if (pass.equals(rs.getString(2))) {
  57.                 System.out.println("Password correta, welcome to DropMusic");
  58.             } else {
  59.                 System.out.println("Password errada, try again!");
  60.             }
  61.         } else {
  62.             System.out.println("Tens que te registar mano");
  63.         }
  64.  
  65.         rs.close();
  66.         pstmt.close();
  67.     }
  68.  
  69.     void executa_registo(String user, String pass, Connection connection) throws SQLException {
  70.  
  71.         String SQL = "select username, password from utilizador where username = ?";
  72.         PreparedStatement pstmt = connection.prepareStatement(SQL);
  73.         pstmt.setString(1, user);
  74.         ResultSet rs = pstmt.executeQuery();
  75.  
  76.         if (rs.next()) {
  77.             System.out.println("Esse mano ja se encontra registado");
  78.         } else {
  79.             //Verificar se é o primeiro elemento a ser introduzido, para o nomear como editor ou admin, logo pergunto
  80.             String SQLCONTA = "SELECT COUNT (*) FROM utilizador"; //Para verificar se a tabela está vazia ou não
  81.             PreparedStatement ps = connection.prepareStatement(SQLCONTA);
  82.             ResultSet r = ps.executeQuery();
  83.  
  84.             if (r.next()) {
  85.                 if (Integer.parseInt(r.getString(1)) == 0) {
  86.                     String SQLRegAdmin = "insert into utilizador values (?, ?, ?)";
  87.                     PreparedStatement pp = connection.prepareStatement(SQLRegAdmin);
  88.                     pp.setString(1, user);
  89.                     pp.setString(2, pass);
  90.                     pp.setString(3, "admin");
  91.                     pp.executeUpdate();
  92.                     System.out.println("Utilizador registado como admin, welcome to DropMusic");
  93.                     pp.close();
  94.                 } else {
  95.                     String SQLRegNormal = "insert into utilizador values (?, ?, ?)";
  96.                     PreparedStatement p = connection.prepareStatement(SQLRegNormal);
  97.                     p.setString(1, user);
  98.                     p.setString(2, pass);
  99.                     p.setString(3, "normal");
  100.                     p.executeUpdate();
  101.                     System.out.println("Utilizador registado como normal, welcome to DropMusic");
  102.                     p.close();
  103.                 }
  104.             }
  105.  
  106.             ps.close();
  107.             r.close();
  108.             //Verificar se e necessario inicializar a null o ResultSet
  109.         }
  110.  
  111.         rs.close();
  112.         pstmt.close();
  113.     }
  114.  
  115.     void executa_search_music(String search_type, String word, Connection connection) throws SQLException {
  116.  
  117.         if (search_type.equals("all")) {
  118.             String ALLSQL = "SELECT music_name FROM public.musica WHERE id_musica =" +
  119.                     "(SELECT id_musica FROM public.musicas_de_album WHERE id_album = " +
  120.                     "(SELECT id_album FROM public.album WHERE album_name = ?))\n" +
  121.                     "UNION\n" +
  122.  
  123.                     "SELECT music_name FROM public.musica WHERE music_name = ?\n" +
  124.                     "UNION\n" +
  125.  
  126.                     "SELECT music_name FROM public.musica WHERE genre = ?\n" +
  127.                     "UNION\n" +
  128.  
  129.                     "SELECT music_name FROM public.musica WHERE id_musica = " +
  130.                     "(SELECT id_musica FROM public.musicas_de_artista WHERE id_artista = " +
  131.                     "(SELECT id_artista FROM public.artista WHERE artist_name = ?))";
  132.  
  133.             PreparedStatement pstmt = connection.prepareStatement(ALLSQL);
  134.             pstmt.setString(1, word);
  135.             pstmt.setString(2, word);
  136.             pstmt.setString(3, word);
  137.             pstmt.setString(4, word);
  138.             ResultSet rs = pstmt.executeQuery();
  139.  
  140.             //TRATAR DA INFORMAÇÃO RECEBIDA NO RESULT SET
  141.             while (rs.next()) {
  142.                 System.out.println("Nome da musica: " + rs.getString(1));
  143.             }
  144.  
  145.  
  146.         } else if (search_type.equals("music")) {
  147.             String MUSICSQL = "SELECT music_name FROM public.musica WHERE music_name = ?";
  148.             PreparedStatement pstmt = connection.prepareStatement(MUSICSQL);
  149.             pstmt.setString(1, word);
  150.             ResultSet rs = pstmt.executeQuery();
  151.  
  152.             //TRATAR DA INFORMAÇÃO RECEBIDA NO RESULT SET
  153.             while (rs.next()) {
  154.                 System.out.println("Nome da musica: " + rs.getString(1));
  155.             }
  156.  
  157.         } else if (search_type.equals("artist")) {
  158.             String ARTISTSQL = "SELECT music_name FROM public.musica WHERE id_musica = " +
  159.                     "(SELECT id_musica FROM public.musicas_de_artista WHERE id_artista = " +
  160.                     "(SELECT id_artista FROM public.artista WHERE artist_name = ?))";
  161.             PreparedStatement pstmt = connection.prepareStatement(ARTISTSQL);
  162.             pstmt.setString(1, word);
  163.             ResultSet rs = pstmt.executeQuery();
  164.  
  165.             //TRATAR DA INFORMAÇÃO RECEBIDA NO RESULT SET
  166.             while (rs.next()) {
  167.                 System.out.println("Nome da musica: " + rs.getString(1));
  168.             }
  169.  
  170.         } else if (search_type.equals("album")) {
  171.             String ALBUMSQL = "SELECT music_name FROM public.musica WHERE id_musica = " +
  172.                     "(SELECT id_musica FROM public.musicas_de_album WHERE id_album = " +
  173.                     "(SELECT id_album FROM public.album WHERE album_name = ?))";
  174.             PreparedStatement pstmt = connection.prepareStatement(ALBUMSQL);
  175.             pstmt.setString(1, word);
  176.             ResultSet rs = pstmt.executeQuery();
  177.  
  178.             //TRATAR DA INFORMAÇÃO RECEBIDA NO RESULT SET
  179.             while (rs.next()) {
  180.                 System.out.println("Nome da musica: " + rs.getString(1));
  181.             }
  182.  
  183.         } else if (search_type.equals("genre")) {
  184.             String GENRESQL = "SELECT music_name FROM public.musica WHERE genre = ?";
  185.             PreparedStatement pstmt = connection.prepareStatement(GENRESQL);
  186.             pstmt.setString(1, word);
  187.             ResultSet rs = pstmt.executeQuery();
  188.  
  189.             //TRATAR DA INFORMAÇÃO RECEBIDA NO RESULT SET
  190.             while (rs.next()) {
  191.                 System.out.println("Nome da musica: " + rs.getString(1));
  192.             }
  193.  
  194.         }
  195.  
  196.  
  197.     }
  198.  
  199.     void executa_search_info(String search_type, String word, Connection connection) throws SQLException {
  200.         //Mostra detalhes sobre o album, artista e musica
  201.  
  202.         //Musica
  203.         if (search_type.equals("music")) {
  204.             //Info da musica
  205.             String InfoMusicSQL = "SELECT music_name, artist_name, album_name, genre, duration FROM musica WHERE music_name = ?";
  206.             PreparedStatement p = connection.prepareStatement(InfoMusicSQL);
  207.             p.setString(1, word);
  208.             ResultSet rst = p.executeQuery();
  209.  
  210.             //Lista de criticas da musica
  211.             //TESTAR e VERIFICAR se e necessario inserir o atributo rating na musica tal como existe no album
  212.             String MusicReviewList = "SELECT username, pontuacao, text FROM critica WHERE id_musica = " +
  213.                     "(SELECT id_musica FROM musica WHERE music_name = ?)";
  214.             PreparedStatement ps = connection.prepareStatement(MusicReviewList);
  215.             ps.setString(1, word);
  216.             ResultSet rs = ps.executeQuery();
  217.  
  218.             while (rst.next()) {
  219.                 System.out.println("Nome da musica: " + rst.getString(1));
  220.                 System.out.println("Nome do artista: " + rst.getString(2));
  221.                 System.out.println("Nome do album: " + rst.getString(3));
  222.                 System.out.println("Genero msuical: " + rst.getString(4));
  223.                 System.out.println("Duracao da musica: " + rst.getString(5));
  224.             }
  225.  
  226.             System.out.println("Lista de criticas da musica: ");
  227.             while (rs.next()) {
  228.                 System.out.println("Username: " + rs.getString(1) + "Pontuacao: " + rs.getString(2) +
  229.                         "Text: " + rs.getString(3));
  230.             }
  231.  
  232.             rst.close();
  233.             rs.close();
  234.             ps.close();
  235.             p.close();
  236.         }
  237.  
  238.         //Artista
  239.         else if (search_type.equals("artist")) {
  240.             //Info do artista
  241.             String InfoArtistSQL = "SELECT artist_name, birth_date, biography, genre FROM artista WHERE artist_name = ?";
  242.             PreparedStatement ps = connection.prepareStatement(InfoArtistSQL);
  243.             ps.setString(1, word);
  244.             ResultSet rs = ps.executeQuery();
  245.  
  246.             while (rs.next()) {
  247.                 System.out.println("Nome do artista: " + rs.getString(1));
  248.                 System.out.println("Data de aniversario: " + rs.getString(2));
  249.                 System.out.println("Biografia: " + rs.getString(3));
  250.                 System.out.println("Genero musical:  " + rs.getString(4));
  251.             }
  252.  
  253.             //Lista de musicas do artista
  254.             String ArtistMusicList = "SELECT music_name, artist_name, album_name, genre, duration FROM musica WHERE id_musica = " +
  255.                     "(SELECT id_musica FROM musicas_de_artista WHERE id_artista = " +
  256.                     "(SELECT id_artista FROM artista  WHERE musica.artist_name = ?))";
  257.             PreparedStatement p = connection.prepareStatement(ArtistMusicList);
  258.             p.setString(1, word);
  259.             ResultSet r = p.executeQuery();
  260.  
  261.             System.out.println("Lista de Musicas: ");
  262.             while (r.next()) {
  263.                 System.out.println("Nome da musica: " + r.getString(1));
  264.                 System.out.println("Nome do artista: " + r.getString(2));
  265.                 System.out.println("Nome do album: " + r.getString(3));
  266.                 System.out.println("Genero musical: " + r.getString(4));
  267.                 System.out.println("Duracao da musica: " + r.getString(5));
  268.             }
  269.  
  270.             //Lista de albuns do artista //TESTAR
  271.             String ArtistAlbumList = "SELECT album_name, artist_name, description, release_date, genre, rating FROM album WHERE artist_name = ? AND rating = " +
  272.                     "(SELECT AVG(sum_pontuacao) FROM " +
  273.                     "(SELECT SUM(pontuacao) as sum_pontuacao FROM critica  WHERE id_album = " +
  274.                     "(SELECT id_album FROM album WHERE artist_name = ?)) as inner_query)";
  275.             PreparedStatement pst = connection.prepareStatement(ArtistAlbumList);
  276.             pst.setString(1, word);
  277.             pst.setString(2, word);
  278.             ResultSet rst = pst.executeQuery();
  279.  
  280.             System.out.println("Lista de Albuns: ");
  281.             while (rst.next()) {
  282.                 System.out.println("Nome do album: " + r.getString(1));
  283.                 System.out.println("Nome do artista: " + r.getString(2));
  284.                 System.out.println("Descricao " + r.getString(3));
  285.                 System.out.println("Data de lancamento: " + r.getString(4));
  286.                 System.out.println("Genero musical: " + r.getString(5));
  287.                 System.out.println("Rating: " + r.getString(6));
  288.             }
  289.  
  290.             p.close();
  291.             ps.close();
  292.             pst.close();
  293.             r.close();
  294.             rs.close();
  295.             rst.close();
  296.         }
  297.  
  298.         //Album
  299.         else if (search_type.equals("album")) {
  300.             //Info do album
  301.             String InfoAlbumSQL = "SELECT album_name, artist_name, description, release_date, genre, rating FROM album WHERE album_name = ? AND rating = " +
  302.                     "(SELECT AVG(sum_pontuacao) FROM " +
  303.                     "(SELECT SUM(pontuacao) as sum_pontuacao FROM critica  WHERE id_album = " +
  304.                     "(SELECT id_album FROM album WHERE album_name = ?)) as inner_query)";
  305.             PreparedStatement p = connection.prepareStatement(InfoAlbumSQL);
  306.             p.setString(1, word);
  307.             p.setString(2, word);
  308.             ResultSet r = p.executeQuery();
  309.  
  310.             while (r.next()) {
  311.                 System.out.println("Nome do album: " + r.getString(1));
  312.                 System.out.println("Nome do artista: " + r.getString(2));
  313.                 System.out.println("Descricao " + r.getString(3));
  314.                 System.out.println("Data de lancamento: " + r.getString(4));
  315.                 System.out.println("Genero musical: " + r.getString(5));
  316.                 System.out.println("Rating : " + r.getString(6));
  317.             }
  318.  
  319.             //Lista de musicas do album
  320.             String AlbumMusicList = "SELECT music_name, artist_name, album_name, genre, duration FROM musica WHERE id_musica = " +
  321.                     "(SELECT  id_musica FROM musicas_de_album WHERE id_album = " +
  322.                     "(SELECT id_album FROM album WHERE album_name = ?))";
  323.             PreparedStatement ps = connection.prepareStatement(AlbumMusicList);
  324.             ps.setString(1, word);
  325.             ResultSet rs = ps.executeQuery();
  326.  
  327.             while (rs.next()) {
  328.                 System.out.println("Nome da musica: " + r.getString(1));
  329.                 System.out.println("Nome do artista: " + r.getString(2));
  330.                 System.out.println("Nome do album: " + r.getString(3));
  331.                 System.out.println("Genero musical: " + r.getString(4));
  332.                 System.out.println("Duracao da musica : " + r.getString(5));
  333.             }
  334.  
  335.             //Lista de reviews do album
  336.             String AlbumReviewList = "SELECT username, pontuacao, text FROM critica WHERE id_album = " +
  337.                     "(SELECT id_album FROM album WHERE album_name = ?)";
  338.             PreparedStatement pst = connection.prepareStatement(AlbumReviewList);
  339.             pst.setString(1, word);
  340.             ResultSet rst = pst.executeQuery();
  341.  
  342.             while (rst.next()) {
  343.                 System.out.println("Username: " + rst.getString(1));
  344.                 System.out.println("Pontuacao: " + rst.getString(2));
  345.                 System.out.println("Texto: " + rst.getString(3));
  346.             }
  347.             p.close();
  348.             ps.close();
  349.             pst.close();
  350.             r.close();
  351.             rs.close();
  352.             rst.close();
  353.         }
  354.  
  355.     }
  356.  
  357.     void executa_album_review(String user, String album_title, String pontuacao, String text, Connection connection) throws SQLException {
  358.         String AlbumReviewSQL = "INSERT INTO critica\n" +
  359.                 "VALUES (DEFAULT, null, (SELECT id_album FROM album WHERE album_name = ?), ?, ?, ?)";
  360.         PreparedStatement ps = connection.prepareStatement(AlbumReviewSQL);
  361.         ps.setString(1, album_title);
  362.         ps.setString(2, user);
  363.         ps.setString(3, text);
  364.         ps.setInt(4, Integer.parseInt(pontuacao));
  365.         ps.executeUpdate();
  366.  
  367.         System.out.println("Review do album submetida com sucesso");
  368.         ps.close();
  369.     }
  370.  
  371.     void executa_music_review(String user, String music_title, String pontuacao, String text, Connection connection) throws SQLException {
  372.         String MusicReviewSQL = "INSERT INTO critica " +
  373.                                 "VALUES (DEFAULT,  (SELECT id_musica FROM musica WHERE music_name = ?), NULL , ?, ?, ?)";
  374.         PreparedStatement p = connection.prepareStatement(MusicReviewSQL);
  375.         p.setString(1, music_title);
  376.         p.setString(2, user);
  377.         p.setString(3, text);
  378.         p.setInt(4, Integer.parseInt(pontuacao));
  379.         p.executeUpdate();
  380.  
  381.         System.out.println("Review da musica submetida com sucesso");
  382.         p.close();
  383.     }
  384.  
  385.     void executa_make_editor(String user, String novo_user, Connection connection) throws SQLException {
  386.         //Verificar se o utilizador que está a querer tornar o outro num editor é também um editor
  387.         String CheckPermissaoSQL = "SELECT user_type FROM utilizador WHERE username = ?";
  388.         PreparedStatement p = connection.prepareStatement(CheckPermissaoSQL);
  389.         p.setString(1, user);
  390.         ResultSet r = p.executeQuery();
  391.  
  392.         //SE TEM PERMISSAO -> CONDICAO 1
  393.         while (r.next()) {
  394.             if (r.getString(1).equals("editor") || r.getString(1).equals("admin")) {
  395.                 System.out.println("Pode tornar editor");
  396.  
  397.                 //Verificar se o novo_user existe na base de dados
  398.                 String NovoUserExisteSQL = "SELECT username FROM utilizador WHERE username = ?";
  399.                 PreparedStatement pstt = connection.prepareStatement(NovoUserExisteSQL);
  400.                 pstt.setString(1, novo_user);
  401.                 ResultSet rrst = pstt.executeQuery();
  402.  
  403.                 if (rrst.next()) {
  404.                     System.out.println("Utilizador existe");
  405.  
  406.                     //Fazer verificacao intermedia para ver se a pessoa ja e editora ou admin //TO DOOOOOOOOOOOOOO
  407.                     String CheckIfEditSQL = "SELECT user_type FROM utilizador WHERE username = ?";
  408.                     PreparedStatement pst = connection.prepareStatement(CheckIfEditSQL);
  409.                     pst.setString(1, novo_user);
  410.                     ResultSet rs = pst.executeQuery();
  411.  
  412.                     while (rs.next()) {
  413.                         if (rs.getString(1).equals("normal")) {
  414.                             String MakeEditorSQL = "UPDATE utilizador SET user_type = 'editor' WHERE username = ?";
  415.                             PreparedStatement ps = connection.prepareStatement(MakeEditorSQL);
  416.                             ps.setString(1, novo_user);
  417.                             ps.executeUpdate();
  418.                         } else {
  419.                             System.out.println("Esse mano ja tem permissoes de editor");
  420.                         }
  421.                     }
  422.                 }
  423.                 else {
  424.                     System.out.println("Esse mano nao existe na nossa base de dados");
  425.                 }
  426.             }
  427.          //SE NAO TEM PERMISSAO -> CONDICAO 2
  428.             else {
  429.                 System.out.println("Nao tem autorizacao");
  430.                 }
  431.  
  432.  
  433.         }
  434.     }
  435.  
  436.     void executa_cria_playlist(String user, String playlist_name, String privacy_type, Connection connection) throws SQLException {
  437.         //Cria playlist, com playlist_name e privacy_type
  438.         String CriaPlaySQL = "INSERT INTO playlist VALUES (DEFAULT, ?, ?)";
  439.         PreparedStatement p = connection.prepareStatement(CriaPlaySQL);
  440.         p.setString(1, playlist_name);
  441.         p.setString(2, privacy_type);
  442.         p.executeUpdate();
  443.  
  444.         //Associa a playlist ao utilizador que a criou (Visto que este pode ter várias)
  445.         String AssociaPlaySQL = "INSERT INTO cria_playlist VALUES (?, (SELECT id_playlist FROM playlist WHERE playlist_name = ?))";
  446.         PreparedStatement ps = connection.prepareStatement(AssociaPlaySQL);
  447.         ps.setString(1, user);
  448.         ps.setString(2, playlist_name);
  449.         ps.executeUpdate();
  450.  
  451.         System.out.println("Playlist " + playlist_name + " do user " + user + " criada com sucesso");
  452.     }
  453.  
  454.     void executa_opmusic_playlist(String user, String playlist_name, String op_type, String subop_type, String nome_musica, String nome_artista, String nome_album, Connection connection) throws SQLException {
  455.  
  456.         String CheckaPrivacySQL = "SELECT privacy_type FROM playlist WHERE playlist_name = ?";
  457.         PreparedStatement p = connection.prepareStatement(CheckaPrivacySQL);
  458.         p.setString(1, playlist_name);
  459.         ResultSet r = p.executeQuery();
  460.  
  461.         //1. Se for private, só o owner pode ver e alterar
  462.         if (r.getString(1).equals("private")){
  463.             //vai checkar se esse user é o dono
  464.             String checkaOwnerSQL = "SELECT username FROM cria_playlist WHERE id_playlist = " +
  465.                     "(SELECT id_playlist FROM playlist WHERE playlist_name = ?)";
  466.             PreparedStatement ps = connection.prepareStatement(checkaOwnerSQL);
  467.             ps.setString(1, playlist_name);
  468.             ResultSet rs = ps.executeQuery();
  469.  
  470.             if (rs.getString(1).equals(user)){
  471.                 System.out.println("Pode adicionar ou remover musicas a playlist");
  472.                 //QUERY PARA ADICIONAR OU REMOVER MUSICAS
  473.                 if (op_type.equals("inserir")){
  474.                     if (subop_type.equals("single")) {
  475.                         String insereMusicSQL = "INSERT INTO adiciona_musica VALUES ((SELECT id_playlist FROM playlist WHERE playlist_name = ?), " +
  476.                                 "(SELECT id_musica FROM musica WHERE music_name = ? AND artist_name = ? AND album_name = ?))";
  477.                         PreparedStatement ppst = connection.prepareStatement(insereMusicSQL);
  478.                         ppst.setString(1, playlist_name);
  479.                         ppst.setString(2, nome_musica);
  480.                         ppst.setString(3, nome_artista);
  481.                         ppst.setString(4, nome_album);
  482.  
  483.                         ppst.executeUpdate();
  484.                     }
  485.                 }
  486.                 else if (op_type.equals("remove")){
  487.                     //ASK TOINO
  488.                 }
  489.  
  490.             }
  491.             else{
  492.                 System.out.println("Grupo privado");
  493.             }
  494.         }
  495.  
  496.         //2. Se for publica, qualquer user pode ver, mas só o owner pode alterar
  497.         else if (r.getString(1).equals("public")){
  498.             System.out.println("ESTOU SO A BERE");
  499.             //QUERY PARA VER SE E O OWNER
  500.             String checkOwnerSQL = "SELECT username FROM cria_playlist WHERE id_playlist = " +
  501.                     "(SELECT id_playlist FROM playlist WHERE playlist_name = ?)";
  502.             PreparedStatement ppps = connection.prepareStatement(checkOwnerSQL);
  503.             ppps.setString(1, playlist_name);
  504.             ResultSet rrrs = ppps.executeQuery();
  505.  
  506.             if (rrrs.getString(1).equals(user)){
  507.                 System.out.println("Tem autorizacao para adicionar ou remover musicas a playlist");
  508.                 //QUERY PARA ADICIONAR OU REMOVER MUSICAS
  509.                 if (op_type.equals("inserir")){
  510.                     if (subop_type.equals("single")) {
  511.                         String insereMusicSQL = "INSERT INTO adiciona_musica VALUES ((SELECT id_playlist FROM playlist WHERE playlist_name = ?)," +
  512.                                 " (SELECT id_musica FROM musica WHERE music_name = ? AND artist_name = ? AND album_name = ?))";
  513.                         PreparedStatement ppst = connection.prepareStatement(insereMusicSQL);
  514.                         ppst.setString(1, playlist_name);
  515.                         ppst.setString(2, nome_musica);
  516.                         ppst.setString(3, nome_artista);
  517.                         ppst.setString(4, nome_album);
  518.  
  519.                         ppst.executeUpdate();
  520.                     }
  521.                 }
  522.                 else if (op_type.equals("remove")){
  523.                     //ASK TOINO
  524.                 }
  525.  
  526.             }
  527.             else{
  528.                 System.out.println("Pode ver, mas nao pode editar");
  529.             }
  530.  
  531.  
  532.  
  533.  
  534.  
  535.             //QUERY PARA ADICIONAR OU REMOVER MUSICAS
  536.         }
  537.  
  538.         //3. Se for collaborative, qualquer user pode ver e editar
  539.         else if (r.getString(1).equals("collaborative")){
  540.             //QUERY PARA ADICIONAR OU REMOVER MUSICAS
  541.             if (op_type.equals("inserir")){
  542.                 if (subop_type.equals("single")) {
  543.                     String insereMusicSQL = "INSERT INTO adiciona_musica VALUES ((SELECT id_playlist FROM playlist WHERE playlist_name = ?)," +
  544.                             "(SELECT id_musica FROM musica WHERE music_name = ? AND artist_name = ? AND album_name = ?))";
  545.                     PreparedStatement psttt = connection.prepareStatement(insereMusicSQL);
  546.                     psttt.setString(1, playlist_name);
  547.                     psttt.setString(2, nome_musica);
  548.                     psttt.setString(3, nome_artista);
  549.                     psttt.setString(4, nome_album);
  550.  
  551.                     psttt.executeUpdate();
  552.                 }
  553.             }
  554.             else if (op_type.equals("remove")){
  555.                 //ASK TOINO
  556.             }
  557.         }
  558.     }
  559.  
  560.     void executa_ver_playlist(String user, String playlist_name, Connection connection) throws SQLException {
  561.         //1. Ver qual e o tipo de privacidade da playlist
  562.         String CheckaPrivacySQL = "SELECT privacy_type FROM playlist WHERE playlist_name = ?";
  563.         PreparedStatement p = connection.prepareStatement(CheckaPrivacySQL);
  564.         p.setString(1, playlist_name);
  565.         ResultSet r = p.executeQuery();
  566.  
  567.         //1. Se for private, só o owner pode ver
  568.         while (r.next()) {
  569.             if (r.getString(1).equals("private")) {
  570.                 String checkaOwnerSQL = "SELECT username FROM cria_playlist WHERE id_playlist = " +
  571.                         "(SELECT id_playlist FROM playlist WHERE playlist_name = ?)";
  572.                 PreparedStatement ps = connection.prepareStatement(checkaOwnerSQL);
  573.                 ps.setString(1, playlist_name);
  574.                 ResultSet rs = ps.executeQuery();
  575.  
  576.                 while (rs.next()) {
  577.                     if (rs.getString(1).equals(user)) {
  578.                         System.out.println("Pode ver a playlist");
  579.                         //QUERY PARA VER AS MUSICAS DA PLAYLIST //EM FALTA
  580.                         String MusicasPlaySQL = "SELECT music_name, artist_name, album_name, genre, duration, filename FROM musica WHERE id_musica = " +
  581.                                 "(SELECT id_musica FROM adiciona_musica WHERE id_playlist = " +
  582.                                 "(SELECT id_playlist FROM playlist WHERE playlist_name = ?))";
  583.                         PreparedStatement pst = connection.prepareStatement(MusicasPlaySQL);
  584.                         pst.setString(1, playlist_name);
  585.                         ResultSet rst = pst.executeQuery();
  586.  
  587.                         while (rst.next()) {
  588.                             System.out.println("Nome da musica: " + rst.getString(1));
  589.                             System.out.println("Nome do artista: " + rst.getString(2));
  590.                             System.out.println("Nome do album: " + rst.getString(3));
  591.                             System.out.println("Genero msuical: " + rst.getString(4));
  592.                             System.out.println("Duracao da musica: " + rst.getString(5));
  593.                             System.out.println("Nome do ficheiro: " + rst.getString(6));
  594.                         }
  595.  
  596.                     } else {
  597.                         System.out.println("Grupo privado");
  598.                     }
  599.                 }
  600.             } else if ((r.getString(1).equals("public")) || (r.getString(1).equals("collaborative"))) {
  601.                 //QUERY PARA VER AS MUSICAS DA PLAYLIST
  602.                 String MusicasPlaySQL = "SELECT music_name, artist_name, album_name, genre, duration, filename FROM musica WHERE id_musica = " +
  603.                         "(SELECT id_musica FROM adiciona_musica WHERE id_playlist = " +
  604.                         "(SELECT id_playlist FROM playlist WHERE playlist_name = ?))";
  605.                 PreparedStatement pstt = connection.prepareStatement(MusicasPlaySQL);
  606.                 pstt.setString(1, playlist_name);
  607.                 ResultSet rstt = pstt.executeQuery();
  608.                 System.out.println("Podes ver mano");
  609.  
  610.                 while (rstt.next()) {
  611.                     System.out.println("Nome da musica: " + rstt.getString(1));
  612.                     System.out.println("Nome do artista: " + rstt.getString(2));
  613.                     System.out.println("Nome do album: " + rstt.getString(3));
  614.                     System.out.println("Genero msuical: " + rstt.getString(4));
  615.                     System.out.println("Duracao da musica: " + rstt.getString(5));
  616.                     System.out.println("Nome do ficheiro:  " + rstt.getString(6));
  617.                 }
  618.  
  619.             }
  620.         }
  621.     }
  622.  
  623.     void executa_cria_concerto(String user, String local, String data, String lotacao, Connection connection) throws SQLException {
  624.         String CriaConcertoSQL = "INSERT INTO concerto VALUES (DEFAULT, ?, to_date(?, 'DD/MM/YYYY'), ?)";
  625.         PreparedStatement p = connection.prepareStatement(CriaConcertoSQL);
  626.         p.setString(1, local);
  627.         p.setString(2, data); //TESTAR (DEVE DAR ERRO)
  628.         p.setInt(3, Integer.parseInt(lotacao));
  629.         p.executeUpdate();
  630.         System.out.println("Concerto criado");
  631.         p.close();
  632.     }
  633.  
  634.     void executa_addartist_concerto (String user, String artist_name, String local, String data, Connection connection) throws SQLException {
  635.  
  636.         //1.Verificar se o concerto existe
  637.         String CheckConcertoSQL = "SELECT * FROM concerto WHERE local = ? AND data = ?";
  638.         PreparedStatement p = connection.prepareStatement(CheckConcertoSQL);
  639.         p.setString(1,local);
  640.         p.setDate(2,java.sql.Date.valueOf(data)); //Tem que ser inserida no formato "2017-07-11"
  641.         ResultSet r = p.executeQuery();
  642.  
  643.         if (r.next()){
  644.             System.out.println("Esse concerto existe");
  645.         }
  646.         else{
  647.             System.out.println("Mano tens que escolher um concerto que ja exista");
  648.         }
  649.  
  650.         //2.Verificar se o artista existe
  651.         String CheckArtistSQL = "SELECT * FROM artista WHERE artist_name = ?";
  652.         PreparedStatement ps = connection.prepareStatement(CheckArtistSQL);
  653.         ps.setString(1,artist_name);
  654.         ResultSet rs = ps.executeQuery();
  655.  
  656.         if (rs.next()){
  657.             System.out.println("Essa artista existe");
  658.         }
  659.         else{
  660.             System.out.println("Mano essa artista nao existe, TA MAL");
  661.         }
  662.  
  663.         if (r.next() && rs.next()) {
  664.             String AddArtistSQL = "INSERT INTO dar_um_concerto\n" +
  665.                     "VALUES ((SELECT id_artista FROM artista WHERE artist_name = ?), (SELECT id_concerto FROM concerto WHERE local = ? AND data = ?))";
  666.             PreparedStatement pst = connection.prepareStatement(AddArtistSQL);
  667.             pst.setString(1, artist_name);
  668.             pst.setString(2, local);
  669.             pst.setString(3, data);
  670.             pst.executeUpdate();
  671.  
  672.             System.out.println("Artista adicionado");
  673.             pst.close();
  674.         }
  675.     }
  676.  
  677.     void executa_alinhaconcerto (String user, String local, String data, String music_name, String ordem, Connection connection) throws SQLException{
  678.  
  679.         //1.Verificar se o concerto existe
  680.         String CheckConcertoSQL = "SELECT * FROM concerto WHERE local = ? AND data = ?";
  681.         PreparedStatement p = connection.prepareStatement(CheckConcertoSQL);
  682.         p.setString(1,local);
  683.         p.setDate(2,java.sql.Date.valueOf(data)); //Tem que ser inserida no formato "2017-07-11"
  684.         ResultSet r = p.executeQuery();
  685.  
  686.         if (r.next()){
  687.             System.out.println("Esse concerto existe");
  688.         }
  689.         else{
  690.             System.out.println("Mano tens que escolher um concerto que ja exista");
  691.         }
  692.  
  693.         //2.Verificar se a musica existe
  694.         String CheckMusicSQL = "SELECT * FROM musica WHERE music_name = ?";
  695.         PreparedStatement ps = connection.prepareStatement(CheckMusicSQL);
  696.         ps.setString(1,music_name);
  697.         ResultSet rs = ps.executeQuery();
  698.  
  699.         if (rs.next()){
  700.             System.out.println("Essa musica existe");
  701.         }
  702.         else{
  703.             System.out.println("Mano essa musica nao existe, TA MAL");
  704.         }
  705.  
  706.         //3. Inserir a musica na setlist do concerto
  707.         if (r.next() && rs.next()) {
  708.             String InsereMusicSetlistSQL = "INSERT INTO alinhamento VALUES ((SELECT id_concerto FROM concerto WHERE local = ? and data = ?)," +
  709.                     "(SELECT id_musica FROM musica WHERE music_name = ?), ?)";
  710.             PreparedStatement pst = connection.prepareStatement(InsereMusicSetlistSQL);
  711.             pst.setString(1, local);
  712.             pst.setDate(2, java.sql.Date.valueOf(data));
  713.             pst.setString(3, music_name);
  714.             pst.setInt(4, Integer.parseInt(ordem));
  715.             pst.executeUpdate();
  716.  
  717.             System.out.println("Musica inserida com sucesso na setlist do concerto");
  718.         }
  719.     }
  720.  
  721. }
  722.  
  723.  
  724. public class Main {
  725.     public static void main(String[] args) {
  726.         Connection connection = null;
  727.         //Statement stmt = null;
  728.         ResultSet rs = null;
  729.         try {
  730.             Class.forName("org.postgresql.Driver"); // the postgresql driver string
  731.             String url = "jdbc:postgresql://localhost:5432/dropmusic"; // the postgresql url
  732.             connection = DriverManager.getConnection(url, "postgres", "postgresadmin1"); // get the postgresql database connection
  733.  
  734.             Menu menu = new Menu();
  735.             Metodos m = new Metodos();
  736.  
  737.             Scanner scan = new Scanner(System.in);
  738.  
  739.             String username = null;
  740.  
  741.             /************************************************** MENU INICIAL **************************************************************/
  742.             menu.imprime_menu_inicial();
  743.             System.out.println("Operacao pretendida: ");
  744.             int num = scan.nextInt();
  745.             if (num == 1){
  746.                 //REGISTO (Podemos adicionar um confirma password,se o tempo permitir)
  747.                 System.out.println("Nome pretendido: ");
  748.                 username = scan.next();
  749.  
  750.                 System.out.println("Password pretendida: ");
  751.                 String password = scan.next();
  752.  
  753.                 m.executa_registo(username, password, connection);
  754.                 menu.imprime_menu_inicial();
  755.             }
  756.             else if (num == 2){
  757.                 //LOGIN
  758.                 System.out.println("Username: ");
  759.                 username = scan.next();
  760.  
  761.                 System.out.println("Password: ");
  762.                 String password = scan.next();
  763.                 m.executa_login(username, password, connection);
  764.                 menu.imprime_menu_opcoes();
  765.             }
  766.  
  767.  
  768.             /************************************************* MENU OPCOES **************************************************************/
  769.  
  770.             int opcao = scan.nextInt();
  771.  
  772.             if (opcao == 1){
  773.                 //Cria playlist
  774.                 System.out.println("Nome da playlist: ");
  775.                 String playlist_name = scan.next();
  776.  
  777.                 System.out.println("Tipo de privacidade: ");
  778.                 String privacy_type = scan.next();
  779.  
  780.                 m.executa_cria_playlist(username, playlist_name, privacy_type, connection);
  781.             }
  782.  
  783.             else if (opcao == 2){
  784.                 //Adicionar musicas a playlist
  785.                 //É com a funcao do opmusic_list, mas ainda falta o DELETE a funfar
  786.             }
  787.  
  788.             else if (opcao == 3){
  789.                 //Ver playlist
  790.                 System.out.println("Nome da playlist que pretende ver: ");
  791.                 String playslist_name = scan.next();
  792.  
  793.                 m.executa_ver_playlist(username, playslist_name, connection);
  794.             }
  795.  
  796.             else if (opcao == 4){
  797.                 //Editar tudo e mais alguma coisa
  798.                 //ESTA É TUA TOINO, É O MANAGE DATA
  799.             }
  800.  
  801.             else if (opcao == 5){
  802.                 //Ver a info de um album
  803.                 //Vou precisar do nome do album, mas secalhar tambem vou previsar do nome do artista
  804.                 String search_type = "album";
  805.  
  806.                 System.out.println("Nome do album: ");
  807.                 String album_name = scan.next();
  808.  
  809.                 m.executa_search_info(search_type, album_name, connection);
  810.             }
  811.  
  812.             else if (opcao == 6){
  813.                 //Ver a info de um artista
  814.                 //Ver se faltam argumentos por causa de ser uma artista unico
  815.                 String search_type = "artist";
  816.  
  817.                 System.out.println("Nome do artista: ");
  818.                 String artist_name = scan.next();
  819.  
  820.                 m.executa_search_info(search_type, artist_name, connection);
  821.             }
  822.  
  823.             else if (opcao == 7){
  824.                 //Ver info de uma musica
  825.                 //Ver se faltam argumentos por causa de ser uma musica unica
  826.                 String search_type = "music";
  827.  
  828.                 System.out.println("Nome da musica: ");
  829.                 String music_name = scan.next();
  830.  
  831.                 m.executa_search_info(search_type, music_name, connection);
  832.             }
  833.  
  834.             else if (opcao == 8){
  835.                 //Ver info de um concerto
  836.                 //Ver se faltam argumentos por causa de ser uma musica unica
  837.                 String search_type = "concert";
  838.  
  839.                 System.out.println("Local do concerto: ");
  840.                 String local = scan.next();
  841.  
  842.                 System.out.println("Data do concerto: "); //Especificar qual o formato obrigatorio
  843.                 String data = scan.next();
  844.  
  845.                 //m.executa_search_info_concerto(local, data, connection); //FALTA IMPLEMENTAR
  846.             }
  847.  
  848.             else if (opcao == 9){
  849.                 //Share music
  850.                 //ESTA É TUA TOINO
  851.  
  852.             }
  853.  
  854.             else if (opcao == 10){
  855.                 //Upload de musica
  856.                 //ESTA É TUA TOINO
  857.  
  858.             }
  859.  
  860.             else if (opcao == 11){
  861.                 //Criar concerto
  862.  
  863.                 System.out.println("Local do concerto: "); //"Passeio Maritimo de Alges"
  864.                 String local = scan.next();
  865.  
  866.                 System.out.println("Data (DD/MM/YYYY): "); //"11/07/2017"
  867.                 String data = scan.next();
  868.  
  869.                 System.out.println("Lotacao: "); //"100"
  870.                 String lotacao = scan.next();
  871.  
  872.                 m.executa_cria_concerto(username, local, data, lotacao, connection);
  873.             }
  874.  
  875.             else if (opcao == 12){
  876.                 //Associar artista a um concerto
  877.                 //Ver se falta algum atributo, de forma a considerar o artista como unico
  878.  
  879.                 System.out.println("Nome do artista: ");
  880.                 String nome_artista = scan.next();
  881.  
  882.                 System.out.println("Local: ");
  883.                 String local = scan.next();
  884.  
  885.                 System.out.println("Data: ");
  886.                 String data = scan.next();
  887.  
  888.                 m.executa_addartist_concerto(username, nome_artista, local, data, connection); //FALTA CORRIGIR AS KEYS, PÔR AMBAS A FK
  889.             }
  890.  
  891.             else if (opcao == 13){
  892.                 //Criar setlist de um concerto
  893.  
  894.                 System.out.println("Local: ");
  895.                 String local = scan.next();
  896.  
  897.                 System.out.println("Data: ");
  898.                 String data = scan.next();
  899.  
  900.                 System.out.println("Nome da musica: ");
  901.                 String music_name = scan.next();
  902.  
  903.                 System.out.println("Nome do artista: ");
  904.                 String artist_name = scan.next();
  905.  
  906.                 System.out.println("Nome do album: ");
  907.                 String album_name = scan.next();
  908.  
  909.                 System.out.println("Posicao: ");
  910.                 String posicao_alinha = scan.next();
  911.  
  912.                 //FALTA ADICIONAR O NOME DO ALBUM E DO ARTISTA
  913.                 //m.executa_alinhaconcerto("joao","Passeio Maritimo de Alges", "2017-07-11", "Summertime Magic", "3", connection);
  914.             }
  915.  
  916.             else if (opcao == 14){
  917.                 //Alterar a ordem da setlist de um concerto
  918.                 //FALTA IMPLEMENTAR
  919.  
  920.  
  921.             }
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.             //m.executa_login("toni", "fifa", connection); //CHECK
  933.             //m.executa_registo("toni", "fifa", connection); //CHECK
  934.             //m.executa_make_editor("joao", "toni", connection); //CHECK
  935.             //m.executa_music_review("toni", "Summertime Magic", "9", "ja ouvi pior e a pagar", connection); //CHECK
  936.             //m.executa_album_review("toni", "Views", "8", "epa nao sei nao", connection); //CHECK
  937.             //m.executa_cria_playlist("toni", "funk do bom", "public", connection); //CHECK
  938.             //m.executa_ver_playlist("joao", "funk do bom", connection); //CHECK //VER DE NOVO QUANDO TIVER MÚSICAS NA PLAYLIST
  939.             //m.executa_cria_concerto("joao", "Passeio Maritimo de Alges", "11/07/2017", "100", connection); //CHECK
  940.  
  941.  
  942.             //m.executa_search_music("all", "Cenas", connection); //Esta a funcionar, falta testar a maior parte //music funciona
  943.             //m.executa_search_info("album", "Views", connection); //Esta a funcionar, falta testar a maior parte //music funciona
  944.  
  945.             //FALTA TESTAR
  946.             //m.executa_alinhaconcerto("joao","Passeio Maritimo de Alges", "2017-07-11", "Summertime Magic", "3", connection);
  947.             //m.executa_addartist_concerto("joao", "Childish Gambino", "Passeio Maritimo de Alges", "2017-07-11", connection); //FALTA CORRIGIR AS KEYS, PÔR AMBAS A FK
  948.  
  949.             //FALTA TERMINAR
  950.             //m.executa_opmusic_playlist
  951.  
  952.         } catch (SQLException e) {
  953.             e.printStackTrace();
  954.             System.exit(2);
  955.         } catch (ClassNotFoundException e) {
  956.             e.printStackTrace();
  957.         }
  958.     }
  959. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement