Package view

Source Code of view.VideoPublisherGUI

/************************************************************************
* Copyright (C) 2010-2011  Ben Tagger                                  *
* All rights reserved.                                                 *
*                                                                      *
* This program is free software; you can redistribute it and/or        *
* modify it under the terms of the GNU General Public License version  *
* 2 as published by the Free Software Foundation.                      *
*                                                                      *
* Alternatively, this software may be distributed under the terms of   *
* the BSD license.                                                     *
*                                                                      *
* See LICENSE and COPYING for more details.                            *
************************************************************************/

package view;

import java.awt.EventQueue;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.List;

import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

import javax.swing.filechooser.FileNameExtensionFilter;

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

import pubsub.PublisherEventHandler;
import pubsub.VideoPublisher;

import util.IDGenerator;
import util.ProjectPropertiesSingleton;
import util.IDGenerator.IDStrategy;

import eu.pursuit.client.BlackAdderClient;
import eu.pursuit.client.BlackadderWrapper;
import eu.pursuit.core.ByteIdentifier;
import eu.pursuit.core.ScopeID;
import eu.pursuit.core.Strategy;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.UnsupportedEncodingException;

/**
* The main class for the publisher interface
* @author Ben Tagger
* @version Started - 13/11/2011
*/
public class VideoPublisherGUI implements PublisherView{

  private JFrame frmBlackvidPubsubber;
 
  private ByteIdentifier rootScopeId;
  private BlackAdderClient client;
  private IDGenerator rootGenerator;
  private ScopeID rootScope;
  private Strategy strategy = Strategy.DOMAIN_LOCAL;
  private VideoPublisher videoPublisher;

  private List list;
 
  private Map<String, String> ridMappings;

 

  /**
   * Launch the application.
   */
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        try {
          VideoPublisherGUI window = new VideoPublisherGUI();
          window.frmBlackvidPubsubber.setVisible(true);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }

  /**
   * Create the application.
   * @throws DecoderException
   */
  public VideoPublisherGUI() throws DecoderException {
    initialize();   
   
    // Setup the Blackadder environment.
    String sharedObjPath = ProjectPropertiesSingleton.getInstance().getProperty("BAWrapperPath");   
    BlackadderWrapper.configureObjectFile(sharedObjPath);   
    client = BlackAdderClient.getInstance();

   
    // publish the root scope where all videos will be published
    String rootScopeStr = "1111111111111111";
        ByteIdentifier rootId = new ByteIdentifier(Hex.decodeHex(rootScopeStr.toCharArray()));
        rootScope = new ScopeID(rootId);
        client.publishRootScope(rootId, strategy, null);
        rootGenerator = new IDGenerator();
        videoPublisher = new VideoPublisher(client, rootScope, strategy);
        // publish the catalog.
    videoPublisher.publishCatalog();
    ridMappings = new HashMap<String, String>();

    // Start the event handler
    PublisherEventHandler handler = new PublisherEventHandler(this, strategy);
    handler.start();
  }

  /**
   * Initialize the contents of the frame.
   */
  private void initialize() {
    frmBlackvidPubsubber = new JFrame();
    frmBlackvidPubsubber.addWindowListener(new WindowAdapter() {
      @Override
      public void windowClosing(WindowEvent e) {
        // unpublish everything
        videoPublisher.cleanup();
        // then disconnect...
        client.disconnect();
      }
    });
    frmBlackvidPubsubber.setTitle("BlackVid Publisher");
    frmBlackvidPubsubber.setBounds(100, 100, 450, 300);
    frmBlackvidPubsubber.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmBlackvidPubsubber.getContentPane().setLayout(new BorderLayout(0, 0));
   
    final JPanel panel = new JPanel();
    frmBlackvidPubsubber.getContentPane().add(panel, BorderLayout.SOUTH);
    panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
   
    JButton publishButton = new JButton("publish video");
    publishButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        // Open file dialog
        JFileChooser chooser = new JFileChooser();
          FileNameExtensionFilter filter = new FileNameExtensionFilter(
              "Video Files", "mov", "mpg", "mkv", "mp4", "avi", "mpeg");
          chooser.setFileFilter(filter);
          int returnVal = chooser.showOpenDialog(frmBlackvidPubsubber);
          if(returnVal == JFileChooser.APPROVE_OPTION) {
             System.out.println("You chose to open this file: " +
                  chooser.getSelectedFile().getAbsolutePath());
          }
       
        try {
          // publish the event. Under root for now...
            String newPubIDString = rootGenerator.getNextID(chooser.getSelectedFile().getAbsolutePath(), IDStrategy.RANDOM);
            videoPublisher.publishVideo(newPubIDString, chooser.getSelectedFile().getAbsolutePath());
          populatePublishList();
         
        } catch (DecoderException e) {
          // Report the failed event.
          JOptionPane.showConfirmDialog(panel, "Could Not Publish the Video...");
          e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        }
    });
    panel.add(publishButton);
   
    JButton unpublishButton = new JButton("unpublish");
    unpublishButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        // unpublish a video.
        // check something has been selected
        String selected = getList().getSelectedItem();
        if (selected != null){
          // get the rid
          String rid = ridMappings.get(selected);
          //unpublish by rid
          ByteIdentifier vidID;
          try {
            videoPublisher.unpublishVideo(rid);
          } catch (DecoderException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
          }         
         
          populatePublishList();
        }
      }
    });
   
    JButton btnPublishStream = new JButton("publish stream");
    btnPublishStream.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        String httpStr = JOptionPane.showInputDialog("Please enter URL of media stream.");
        System.out.println(httpStr);
        try {
          // publish the event. Under root for now...
            String newPubIDString = rootGenerator.getNextID(httpStr, IDStrategy.RANDOM);
            videoPublisher.publishVideo(newPubIDString, httpStr);
          populatePublishList();
         
        } catch (DecoderException e2) {
          // Report the failed event.
          JOptionPane.showConfirmDialog(panel, "Could Not Publish the Media...");
          e2.printStackTrace();
        } catch (NoSuchAlgorithmException e3) {
          // TODO Auto-generated catch block
          e3.printStackTrace();
        } catch (UnsupportedEncodingException e4) {
          // TODO Auto-generated catch block
          e4.printStackTrace();
        }
      }
    });
    panel.add(btnPublishStream);
    panel.add(unpublishButton);
   
    list = new List();
    frmBlackvidPubsubber.getContentPane().add(list, BorderLayout.CENTER);
   
    JPanel panel_1 = new JPanel();
    frmBlackvidPubsubber.getContentPane().add(panel_1, BorderLayout.NORTH);
    panel_1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
   
  }
 


  public ByteIdentifier getRootScopeId() {
    return rootScopeId;
  }

  public void setRootScopeId(ByteIdentifier rootScopeId) {
    this.rootScopeId = rootScopeId;
  }

  public BlackAdderClient getClient() {
    return client;
  }

  public void setClient(BlackAdderClient client) {
    this.client = client;
  }

  public IDGenerator getRootGenerator() {
    return rootGenerator;
  }

  public void setRootGenerator(IDGenerator rootGenerator) {
    this.rootGenerator = rootGenerator;
  }

  public ScopeID getRootScope() {
    return rootScope;
  }

  public void setRootScope(ScopeID rootScope) {
    this.rootScope = rootScope;
  }

  public VideoPublisher getVideoPublisher() {
    return videoPublisher;
  }

  public void setVideoPublisher(VideoPublisher videoPublisher) {
    this.videoPublisher = videoPublisher;
  }
 
  public void populatePublishList(){
    String catData = getVideoPublisher().getCatalogNames();
   
    // Get data in rows
    String [] rows = catData.split("--");
    getList().removeAll();
    for (String item: rows){
      if (!item.equals("")) {
        // Get the RID
        String[] pre = item.split("@");
        String rid = pre[1];
        getList().add(pre[2]);
        // retain the rid mapping.
        ridMappings.put(pre[2], pre[1]);
      }
    }
  }
 
  public List getList() {
    return list;
  }
}
TOP

Related Classes of view.VideoPublisherGUI

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.