Package net.sf.fmj.ui.application

Source Code of net.sf.fmj.ui.application.PlayerPanelPrefs

package net.sf.fmj.ui.application;

import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;

import javax.media.protocol.ContentDescriptor;

import net.sf.fmj.ui.wizards.ProcessorWizardConfig;
import net.sf.fmj.ui.wizards.RTPTransmitWizardConfig;
import net.sf.fmj.ui.wizards.TrackConfig;
import net.sf.fmj.ui.wizards.TranscodeWizardConfig;
import net.sf.fmj.utility.LoggerSingleton;
import net.sf.fmj.utility.SerializationUtils;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/**
*
* @author Ken Larson
*
*/
public class PlayerPanelPrefs
{
  private static final Logger logger = LoggerSingleton.logger;

  /** versio of the xml file format */
  private static final String version = "0.1";

 
  public List recentUrls = new ArrayList();
  public boolean autoPlay = true;
  public boolean autoLoop = false;
 
  public RTPTransmitWizardConfig rtpTransmitWizardConfig = new RTPTransmitWizardConfig();
  public TranscodeWizardConfig transcodeWizardConfig = new TranscodeWizardConfig();
 
  public static File getFile()
  {
    /** the name of the file used to store the prefs */
    final String filename = ".fmjstudio.prefs.xml";

    String home = System.getProperty("user.home");
    return new File(home + File.separator + filename);
  }
 
  /* ---------------------- XML operations --------------------- */

  private static final String ELEMENT_REGISTRY = "fmj-studio-prefs";
  private static final String ATTR_VERSION = "version";
 
  private static final String ELEMENT_RECENT_URLS = "recent-urls"
  private static final String ELEMENT_RECENT_URL = "url";

  private static final String ELEMENT_RTP_TRANSMIT_WIZARD_CONFIG = "rtp-transmit-wizard-config"
  private static final String ELEMENT_TRANSCODE_WIZARD_CONFIG = "transcode-wizard-config";
 
  /**
   * Load the Registry data from a Reader/
   */
  public void load(Reader reader) throws IOException
  {
   
    // read the registry
    try
    {
      SAXBuilder saxBuilder = new SAXBuilder();
      Document document = saxBuilder.build(reader);
     
      // read all the data from the document and place into data structures.
      loadDocument(document);
    }
    catch (JDOMException e)
    {
      // problem parsing XML.
      throw new IOException(e.getMessage());
    }
  }
 
  /**
   * Write the registry data to the Writer.
   *
   * @param writer destination for the registry data.
   * @throws IOException
   */
  public void write(Writer writer) throws IOException
  {
    // build document from registry data structures
    Document document = buildDocument();
   
    XMLOutputter xmlOutputter = new XMLOutputter();
    xmlOutputter.setFormat(Format.getPrettyFormat());

    xmlOutputter.output(document, writer);
  }
 

  private void loadDocument(Document document) throws IOException
  {
   
    Element rootElement = document.getRootElement();
    String versionString = rootElement.getAttributeValue(ATTR_VERSION);
   
    // TODO use version String
    logger.info("FMJStudio preferences document version " + versionString);
   
    Element element_RecentUrls = rootElement.getChild(ELEMENT_RECENT_URLS);
    parseElement_RecentUrls(element_RecentUrls);
   
    // auto-start
    {
      Element e = rootElement.getChild("auto-play");
      if (e != null)
        autoPlay = e.getTextTrim().equals("" + true);
    }
   
    // auto-loop
    {
      Element e = rootElement.getChild("auto-loop");
      if (e != null)
        autoLoop = e.getTextTrim().equals("" + true);
    }
   
    parseElement_RTPTransmitWizardConfig(rootElement.getChild(ELEMENT_RTP_TRANSMIT_WIZARD_CONFIG));
    parseElement_TranscodeWizardConfig(rootElement.getChild(ELEMENT_TRANSCODE_WIZARD_CONFIG));
  }

  /**
   * Builds a Document from the registry data structures.
   *
   * @return the Document.
   * @throws IOException
   */
  private Document buildDocument() throws IOException
  {
    Document document = new Document();
   
    Element rootElement = new Element(ELEMENT_REGISTRY);
    rootElement.setAttribute(ATTR_VERSION, version);
   
    document.setRootElement(rootElement);

    rootElement.addContent(buildElement_RecentUrls());
   
    // auto-start
    {
      Element e = new Element("auto-play");
      e.setText("" + autoPlay);
      rootElement.addContent(e);
    }
    // auto-loop
    {
      Element e = new Element("auto-loop");
      e.setText("" + autoLoop);
      rootElement.addContent(e);
    }
   
    rootElement.addContent(buildElement_RTPTransmitWizardConfig());
    rootElement.addContent(buildElement_TranscodeWizardConfig());
   
   
    return document;
  }
 

  private void parseElement_RecentUrls(Element element) {
    recentUrls.clear();
    List list = element.getChildren(ELEMENT_RECENT_URL);
    for (int i=0; i<list.size(); i++)
    {
      Element stringElement = (Element) list.get(i);
      recentUrls.add(stringElement.getTextTrim());
    }
  }
 
  private Element buildElement_RecentUrls()
  {
    Element element = new Element(ELEMENT_RECENT_URLS);
   
    Iterator iterator = recentUrls.iterator();
    while (iterator.hasNext())
    {
      String s = (String) iterator.next();
      Element element_RecentUrl = new Element(ELEMENT_RECENT_URL);
      element_RecentUrl.setText(s);
      element.addContent(element_RecentUrl);
    }

    return element;
  }
 
  private static void parseElement_ProcessorWizardConfig(Element element, ProcessorWizardConfig processorWizardConfig)
  {
   
    {
      final Element e = element.getChild("source-url");
      if (e != null)
        processorWizardConfig.url = e.getTextTrim();
    }

    {
      final Element e = element.getChild("content-descriptor-encoding");
      if (e != null)
        processorWizardConfig.contentDescriptor = new ContentDescriptor(e.getTextTrim());
    }

   
   
    {
      final Element e = element.getChild("track-configs");
      if (e != null)
      {
        final List trackConfigElements = e.getChildren("track-config");
        final TrackConfig[] trackConfigs = new TrackConfig[trackConfigElements.size()];
        for (int j = 0; j < trackConfigElements.size(); ++j)
        {
          trackConfigs[j] = new TrackConfig();
         
          final Element e2 = (Element) trackConfigElements.get(j);
         
          // enabled
          {
            final Element e3 = e2.getChild("enabled");
            if (e3 != null)
            {
              trackConfigs[j].enabled = e3.getTextTrim().equals("" + true);
            }
          }
         
          // format:
          {
            final Element e3 = e2.getChild("format");
            if (e3 != null)
            {
              try
              {
                trackConfigs[j].format = SerializationUtils.deserialize(e3.getTextTrim());
              } catch (IOException e1)
              {
                logger.warning("Unable to deserialize format: " + e3.getTextTrim() + ": " + e1);
              } catch (ClassNotFoundException e1)
              {
                logger.warning("Unable to deserialize format: " + e3.getTextTrim() + ": " + e1);
              }
            }
          }
         
        }
      }
    }
   
    {
      final Element e = element.getChild("dest-url");
      if (e != null)
      {
        final String destUrlStr = e.getTextTrim();
        processorWizardConfig.destUrl = destUrlStr;
//        try
//        {
//         
//          rtpTransmitWizardConfig.destUrl = RTPUrlParser.parse(destUrlStr);
//        } catch (RTPUrlParserException ex)
//        {
//          logger.warning("Unable to parse RTP URL: " + destUrlStr + ": " + e);
//         
//        }
      }
    }
   
  }
 
  private void parseElement_RTPTransmitWizardConfig(Element element)
  {
    rtpTransmitWizardConfig = new RTPTransmitWizardConfig();
    if (element != null)
      parseElement_ProcessorWizardConfig(element, rtpTransmitWizardConfig);
  }
 
  private void parseElement_TranscodeWizardConfig(Element element)
  {
    transcodeWizardConfig = new TranscodeWizardConfig();
    if (element != null)
      parseElement_ProcessorWizardConfig(element, transcodeWizardConfig);
  }
 
  private static Element buildElement_ProcessorWizardConfig(ProcessorWizardConfig processorWizardConfig, String elementStr)
  {
    Element element = new Element(elementStr);
   
    if (processorWizardConfig.url != null)
    {
      final Element e = new Element("source-url");
      e.setText(processorWizardConfig.url);
      element.addContent(e);
    }

    if (processorWizardConfig.contentDescriptor != null)
    {
      final Element e = new Element("content-descriptor-encoding");
      e.setText(processorWizardConfig.contentDescriptor.getEncoding());
      element.addContent(e);
     
    }
   
    if (processorWizardConfig.trackConfigs != null)
    {
     
      final Element e = new Element("track-configs");
      element.addContent(e);
      for (int i = 0; i < processorWizardConfig.trackConfigs.length; ++i)
      {
        final TrackConfig trackConfig = processorWizardConfig.trackConfigs[i];
       
        final Element e2 = new Element("track-config");
        e.addContent(e2);
       
        // enabled:
        {
          final Element e3 = new Element("enabled");
          e2.addContent(e3);
          e3.setText("" + trackConfig.enabled);
        }
       
        // format:
        if (trackConfig.format != null)
        {
          final Element e3 = new Element("format-serialized");
          try
          {
            e3.setText(SerializationUtils.serialize(trackConfig.format));
            e2.addContent(e3);
          } catch (IOException e1)
          {
            logger.warning("Unable to serialize format: " + trackConfig.format + ": " + e);
          }
         
        }
       
      }
    }
   
    if (processorWizardConfig.destUrl != null)
    {
      final Element e = new Element("dest-url");
      e.setText(processorWizardConfig.destUrl.toString());
      element.addContent(e);
    }
   
    return element;
  }

  private Element buildElement_RTPTransmitWizardConfig()
  {
    return buildElement_ProcessorWizardConfig(rtpTransmitWizardConfig, ELEMENT_RTP_TRANSMIT_WIZARD_CONFIG);
  }
 
  private Element buildElement_TranscodeWizardConfig()
  {
    return buildElement_ProcessorWizardConfig(transcodeWizardConfig, ELEMENT_TRANSCODE_WIZARD_CONFIG);
  }
}
TOP

Related Classes of net.sf.fmj.ui.application.PlayerPanelPrefs

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.