Package view

Source Code of view.VideoSubscriberGUI

/************************************************************************
* 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.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 org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

import pubsub.SubscriberEventHandler;
import pubsub.VideoSubscriber;

import util.ProjectPropertiesSingleton;

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.ActionListener;
import java.awt.event.ActionEvent;
import java.net.SocketException;
import java.util.HashMap;
import java.util.Map;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
* The main class for the subscriber interface
* @author Ben Tagger
* @version Started - 13/11/2011
*/
public class VideoSubscriberGUI{

  private JFrame frmBlackvidPubsubber;
 
  private ByteIdentifier rootScopeId;
  private BlackAdderClient client;
  private ScopeID rootScope;
  private VideoSubscriber videoSubscriber;
  private long channelID;
  private List list;
  private Map<String, String> ridMappings;
  private Strategy strategy = Strategy.DOMAIN_LOCAL;
 

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

  /**
   * Create the application.
   * @throws DecoderException
   * @throws SocketException
   */
  public VideoSubscriberGUI() throws DecoderException, SocketException {
    initialize();   
   
    // Setup the Blackadder environment.
    String sharedObjPath = ProjectPropertiesSingleton.getInstance().getProperty("BAWrapperPath");   
    BlackadderWrapper.configureObjectFile(sharedObjPath);   
    client = BlackAdderClient.getInstance();
    channelID = 1;
   
    // Initialise the rootscope
    // 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);
   
    // immediately subscribe to the catalog
    videoSubscriber = new VideoSubscriber(client, rootScope, strategy);
   
    // initialise ridMappings
    ridMappings = new HashMap<String, String>();
   
    // Start the event handler
    SubscriberEventHandler handler = new SubscriberEventHandler(this);
    handler.start();
   
  }

  /**
   * Initialize the contents of the frame.
   */
  private void initialize() {
    frmBlackvidPubsubber = new JFrame();
    frmBlackvidPubsubber.addWindowListener(new WindowAdapter() {
      @Override
      public void windowClosing(WindowEvent e) {
        // unsubscribe from catalog - just in case
        videoSubscriber.cleanup();
        // and then disconnect.
        client.disconnect();
      }
    });
    frmBlackvidPubsubber.setTitle("BlackVid Subscriber");
    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 subscribeButton = new JButton("subscribe");
    subscribeButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {       
        // check something was selected.
        String selected = list.getSelectedItem();
        if (selected != null){
          // get the rid of the video clicked.
          String rid = ridMappings.get(selected);
          if(!videoSubscriber.subscribeVideo(rid))
            JOptionPane.showMessageDialog(frmBlackvidPubsubber, "Something went wrong with the subscription.");
        }else{
          // error
          JOptionPane.showMessageDialog(frmBlackvidPubsubber, "You must select a video from the list.");
        }
      }
    });
    panel.add(subscribeButton);
   
    JButton unsubscribeButton = new JButton("unsubscribe");
    unsubscribeButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        // check something was selected.
        String selected = list.getSelectedItem();
        if (selected != null){
          // get the rid of the video clicked.
          String rid = ridMappings.get(selected);
          if(!videoSubscriber.unsubscribeVideo(rid))
            JOptionPane.showMessageDialog(frmBlackvidPubsubber, "Something went wrong with the subscription.\nPerhaps you had not subscribed to that video?");
        }else{
          // error
          JOptionPane.showMessageDialog(frmBlackvidPubsubber, "You must select a video from the list.");
        }
      }
    });
    panel.add(unsubscribeButton);
   
    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));
   
    JButton refreshButton = new JButton("Refresh Catalogue");
    refreshButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        // unsubscribe and then subscribe again.
//        videoSubscriber.unsubscribeCatalog();
        videoSubscriber.subscribeCatalog();
      }
    });
    panel_1.add(refreshButton);
  }
 
  private String getChannelID(){
    return "" + channelID++;
  }

  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 ScopeID getRootScope() {
    return rootScope;
  }

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

  public void setChannelID(long channelID) {
    this.channelID = channelID;
  }
 
  public VideoSubscriber getVideoSubscriber() {
    return videoSubscriber;
  }

  public void setVideoSubscriber(VideoSubscriber videoSubscriber) {
    this.videoSubscriber = videoSubscriber;
  }
 
  public void populateCatalogList(String content){
    // Get data in rows
    String [] rows = content.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.VideoSubscriberGUI

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.