Package view

Source Code of view.CLVideoPublisher

/************************************************************************
* Copyright (C) 2010-2012  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.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;


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.io.File;
import java.io.UnsupportedEncodingException;

/**
* The main class for the publisher interface
* Uses a Command-line Interface
* @author Ben Tagger
* @version Started - 12/01/2012
*/
public class CLVideoPublisher implements PublisherView{

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

  private String list; 
  private Map<String, String> ridMappings;
  private Map<Integer, String> listMappings;


  /**
   * Launch the application.
   * @throws DecoderException
   * @throws UnsupportedEncodingException
   * @throws NoSuchAlgorithmException
   */
  public static void main(String[] args) throws DecoderException, NoSuchAlgorithmException, UnsupportedEncodingException {
    CLVideoPublisher pub = new CLVideoPublisher();

    //    Implement the command line interface.
    while (true){
      // print out commands
      System.err.println(pub.commandList());
      // wait for input
      Scanner sc = new Scanner(System.in);
      int i = sc.nextInt();
      // deal with input
      switch (i){
      case 1: // Print the list
        // refresh the list.
        pub.populatePublishList();
        System.err.println("\n\n----------Publications----------");
        System.err.println(pub.getList());
        break;
      case 2: // Add a publication
        System.err.println("\nEnter location of publication in folder ("+ ProjectPropertiesSingleton.getInstance().getProperty("DefaultMovieFolder") +")");
        String pubPath = ProjectPropertiesSingleton.getInstance().getProperty("DefaultMovieFolder") + sc.next();
        // Check the file exists.
        File file = new File(pubPath);
        if (!file.exists()){
          System.err.println("File does not exist. Returning...");
          break;
        }
        // publish the event. Under root for now...
        String newPubIDString = pub.rootGenerator.getNextID(pubPath, IDStrategy.RANDOM);
        pub.videoPublisher.publishVideo(newPubIDString, pubPath);
        pub.populatePublishList();
        System.err.println("done...");
        break;
      case 3: // Remove a publication
        // refresh the list.
        pub.populatePublishList();
        System.err.println("\n\n----------Publications----------");
        System.err.println(pub.getList());
        System.err.println("Enter the number of the publication to remove...");
        // check something has been selected
        int selected = sc.nextInt();
        String selectedS = pub.listMappings.get(selected);
        if (selectedS == null){
          System.err.println("Not a valid selection. Returning...");
          break;
        }
        System.err.println("You have selected "+ selectedS +" for removal. Continue... (Y or N)");
        String response = sc.next();
        if (response.equalsIgnoreCase("n")){
          System.err.println("Returning...");
          break;
        }else if (response.equalsIgnoreCase("y")){
          // unpublish the item.
          String rid = pub.ridMappings.get(selectedS);
          try {
            pub.videoPublisher.unpublishVideo(rid);
          } catch (DecoderException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
          }
        }else{
          System.err.println("Did not understand. Returning...");
          break;
        }
        break;
      case 4: // Exit
        System.err.println("Exiting...");
        pub.getClient().disconnect();
        System.exit(0);
        break;
      }
    }
  }

  /**
   * Create the application.
   * @throws DecoderException
   */
  public CLVideoPublisher() throws DecoderException {   

    // 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>();
    listMappings = new HashMap<Integer, String>();

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

  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("--");
    list = "";
    int counter = 0;
    for (String item: rows){
      if (!item.equals("")) {
        // Get the RID
        String[] pre = item.split("@");
        String rid = pre[1];
        list += "\n" + pre[2];
        // retain the rid mapping.
        ridMappings.put(pre[2], rid);
        listMappings.put(++counter, pre[2]);
      }
    }
  }

  public String getList() {
    return list;
  }

  private String commandList(){
    String temp = "\n------------Commands------------";
    temp += "\n 1) Display publications...";
    temp += "\n 2) Publish a new publication...";
    temp += "\n 3) Unpublish a publication...";
    temp += "\n 4) Exit...";
    temp += "\n 0) Show options again...";
    temp += "\n Enter one number and press [enter]...\n";
    return temp;
  }
}
TOP

Related Classes of view.CLVideoPublisher

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.