PlaylistPanel.java :  » Media » jammed » com » jammed » ui » Java Open Source

Java Open Source » Media » jammed 
jammed » com » jammed » ui » PlaylistPanel.java
package com.jammed.ui;

import com.jammed.app.Cloud;
import com.jammed.app.RequestPool;
import com.jammed.app.GUI;
import com.jammed.app.Librarian;
import com.jammed.gen.MediaProtos.Media;
import com.jammed.gen.MediaProtos.Playlist;
import com.jammed.gen.MessageProtos.Directive;
import com.jammed.gen.ProtoBuffer.Request;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JOptionPane;
import javax.swing.JFileChooser;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 *
 * @author nmaludy
 */
public class PlaylistPanel extends JPanel implements ActionListener, KeyListener, MouseListener, TableModelListener {

  private static final long serialVersionUID = 1L;
  private static PlaylistPanel INSTANCE;
  private final JTable table;
  private final JScrollPane scrollPane;
  private final MediaTableModel model;
  private int playlistIndex;
  
  private final JButton sendButton;
  private final JButton importButton;
  private int selectedModelIndex;

  public PlaylistPanel() {
    super();
    playlistIndex = Librarian.getInstance().addEmptyPlaylist();
    model = MediaTableModel.createModel(Librarian.getInstance().getPlaylist(playlistIndex));
    Librarian.getInstance().addPlaylistListener(model, playlistIndex);
    model.addTableModelListener(this);
    table = new JTable(model);
    table.addKeyListener(this);
    scrollPane = new JScrollPane(table);
    //setColumnHeaderView(table.getTableHeader());
    //setViewportView(table);
    //table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    table.setAutoCreateRowSorter(true);
    table.addMouseListener(this);
    
    sendButton   = new JButton("Send Playlist");
    importButton = new JButton("Import Playlist");
    
    sendButton.addActionListener(this);
    importButton.addActionListener(this);
    
    GroupLayout layout = new GroupLayout(this);
    setLayout(layout);
    layout.setAutoCreateGaps(true);
    layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
      .addGroup(layout.createSequentialGroup()
        .addComponent(scrollPane))
      .addGroup(layout.createSequentialGroup()
        .addComponent(sendButton)
        .addComponent(importButton)));

    layout.setVerticalGroup(layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
        .addComponent(scrollPane))
      .addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER)
        .addComponent(sendButton)
        .addComponent(importButton)));

    normalizeTable();
  }

  public static PlaylistPanel getInstance() {
    if (INSTANCE == null) {
      INSTANCE = new PlaylistPanel();
    }
    return INSTANCE;
  }
  
  protected void send() {
    final Playlist playlist = model.getPlaylist();
    final String host = (String)JOptionPane.showInputDialog(
      this,
      "Enter a destination hostname:",
      "Send Playlist",
      JOptionPane.PLAIN_MESSAGE,
      null,
      null, // Allow user to type text
      ""); // Initial text
    
    if (host == null) return;
    
    System.out.println("HOST: " + host);
    final Directive.Builder builder = Directive.newBuilder();
    final Request request = RequestPool.getInstance().lease();
    
    builder.setType(builder.getType());
    builder.setDestination(host);
    builder.setRequest(request);
    builder.setPlaylist(playlist);
    
    Cloud.getInstance().send(builder.build(), request.getId());
  }
  
  protected void importPlaylist() {
    final JFileChooser fc = new JFileChooser();
    fc.showOpenDialog(this);
    
    final File selection = fc.getSelectedFile();
    if (selection == null) return;
    
    System.out.println("Import");
    
    final Librarian library = Librarian.getInstance();
    final Playlist  p       = library.open(selection);
    final int       index   = getCurrentPlaylistIndex();
    
    library.addMediaToPlaylist(p.getMediaList(), index);
    normalizeTable();
    
    System.out.println(p.getMediaCount());
    
  }

  private void normalizeTable() {
    TableUtils.normalizeColumnWidths(table);
    revalidate();
  }

  public int getCurrentPlaylistIndex() {
    return playlistIndex;
  }

  public Media getSelectedMedia() {
    int row = table.getSelectedRow();
    if (row == -1) {
      return null;
    }
    row = table.convertRowIndexToModel(row);
    selectedModelIndex = row;
    return model.getMedia(row);
  }

  public Media getNextSelectedMedia() {
    int row = selectedModelIndex;
    if (row == -1) {
      return null;
    }
    int rowCount = model.getRowCount();
    row = table.convertRowIndexToView(row);
    if ((row + 1) < rowCount){
      row++;
      table.getSelectionModel().setSelectionInterval(row, row);
      row = table.convertRowIndexToModel(row);
      selectedModelIndex = row;
      return model.getMedia(row);
    } else {
      return null;
    }
  }

  public Media getPreviousSelectedMedia() {
    //int row = table.getSelectedRow();
    int row = selectedModelIndex;
    if (row == -1) {
      return null;
    }
    row = table.convertRowIndexToView(row);
    if ((row - 1) >= 0){
      row--;
      table.getSelectionModel().setSelectionInterval(row, row);
      row = table.convertRowIndexToModel(row);
      selectedModelIndex = row;
      return model.getMedia(row);
    } else {
      return null;
    }
  }
  
  public void keyReleased(final KeyEvent ke) {
  }
  
  public void keyPressed(final KeyEvent ke) {
    if (ke.getKeyCode() == KeyEvent.VK_DELETE) {
      final int row = table.getSelectedRow();
      
      if (row > 0) {
        model.deleteRow(row);
      }
    }
  }
  
  public void keyTyped(final KeyEvent ke) {
  }
  
  @Override
  public void actionPerformed(ActionEvent e) {
    final Object source = e.getSource();
    if (source == sendButton) {
      send();
    } else if (source == importButton) {
      importPlaylist();
    } else {
      assert false : "A button was pressed that does not exist";
    }
  }

  public void mouseClicked(MouseEvent me) {
    if (me.getClickCount() > 1) {
      Media m = getSelectedMedia();
      GUI.getInstance().play(m);
    }
  }

  public void mousePressed(MouseEvent me) {
  }

  public void mouseReleased(MouseEvent me) {
  }

  public void mouseEntered(MouseEvent me) {
  }

  public void mouseExited(MouseEvent me) {
  }

  public void tableChanged(TableModelEvent tme) {
    normalizeTable();
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.