Package org.jdesktop.wonderland.modules.portal.client

Source Code of org.jdesktop.wonderland.modules.portal.client.AudioCacheHandler

/**
* Project Wonderland
*
* Copyright (c) 2004-2010, Sun Microsystems, Inc., All Rights Reserved
*
* Redistributions in source code form must reproduce the above
* copyright and this condition.
*
* The contents of this file are subject to the GNU General Public
* License, Version 2 (the "License"); you may not use this file
* except in compliance with the License. A copy of the License is
* available at http://www.opensource.org/licenses/gpl-license.php.
*
* Sun designates this particular file as subject to the "Classpath"
* exception as provided by Sun in the License file that accompanied
* this code.
*/
package org.jdesktop.wonderland.modules.portal.client;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ResourceBundle;

import java.util.logging.Logger;
import org.jdesktop.wonderland.modules.contentrepo.client.ContentRepository;
import org.jdesktop.wonderland.modules.contentrepo.client.ContentRepositoryRegistry;
import org.jdesktop.wonderland.modules.contentrepo.common.ContentCollection;
import org.jdesktop.wonderland.modules.contentrepo.common.ContentNode;
import org.jdesktop.wonderland.modules.contentrepo.common.ContentNode.Type;
import org.jdesktop.wonderland.modules.contentrepo.common.ContentRepositoryException;
import org.jdesktop.wonderland.modules.contentrepo.common.ContentResource;

import org.jdesktop.wonderland.client.ClientContext;
import org.jdesktop.wonderland.client.login.LoginManager;

/**
* Cache audio files
*
* @author Joe Provino <jprovino@dev.java.net>
*/
public class AudioCacheHandler {
    private static final Logger logger = Logger.getLogger(AudioCacheHandler.class.getName());

    // The I18N resource bundle
    private static final ResourceBundle BUNDLE = ResourceBundle.getBundle(
            "org/jdesktop/wonderland/modules/portal/client/resources/Bundle");
   
    private File audioCacheDir;

    private static boolean resourcesCached;

    public AudioCacheHandler() {
    }

    public void initialize() throws AudioCacheHandlerException {
  audioCacheDir = new File(ClientContext.getUserDirectory().getAbsolutePath()
     + File.separator + "cache" + File.separator + "audio");

  logger.warning("Audio cache dir " + audioCacheDir.getAbsolutePath());

  if (audioCacheDir.isDirectory() == false) {
      if (audioCacheDir.exists()) {
    throw new AudioCacheHandlerException("Invalid audio cache directory "
        + audioCacheDir.getAbsolutePath());
      } else {
    if (audioCacheDir.mkdir() == false) {
        throw new AudioCacheHandlerException(
      "Unable to create audio cache directory");
    }
      }
  }
    }

    public String getAudioCacheDir() {
  return audioCacheDir.getAbsolutePath();
    }

    public File uploadFileAudioSource(String audioSource) throws AudioCacheHandlerException {
        // make sure specified file exists, create an
        // entry in the content repository and upload the file.
  String pattern = "file://";

  String s = audioSource;

  int ix = audioSource.indexOf(pattern);

  if (ix >= 0) {
      s = s.substring(ix + pattern.length());
  }

        File file = new File(s);

        if (file.exists() == false) {
      throw new AudioCacheHandlerException("Nonexistent file to upload " + s);
  }

  logger.warning("Upload File: " + s);

        ContentRepositoryRegistry registry = ContentRepositoryRegistry.getInstance();

        ContentRepository repo = registry.getRepository(LoginManager.getPrimary());
 
        ContentCollection audioCollection = null;

        try {
      ContentCollection c = repo.getUserRoot();

      audioCollection = (ContentCollection) c.getChild("audio");

      if (audioCollection == null) {
    audioCollection = (ContentCollection) c.createChild("audio", Type.COLLECTION);
        }
        } catch (ContentRepositoryException e) {
      throw new AudioCacheHandlerException("Content repository exception: "
    + e.getMessage());
        }

        try {
      /*
       * Remove file if it exists.
       */
            ContentResource r = (ContentResource) audioCollection.removeChild(file.getName());
  } catch (Exception e) {
  }

        try {
            ContentResource r = (ContentResource) audioCollection.createChild(
                file.getName(), ContentNode.Type.RESOURCE);

            r.put(file);
        } catch (Exception e) {
      throw new AudioCacheHandlerException("Failed to upload file:  " + e.getMessage());
  }

  return file;
    }

    public String cacheFile(String audioSource) throws AudioCacheHandlerException {
  File file = new File(audioSource);

  InputStream is = null;

  try {
      is = new FileInputStream(file);
  } catch (IOException e) {
      throw new AudioCacheHandlerException("Unable to get input stream for "
    + file.getAbsolutePath());
  }

  File cacheFile = createCacheFile(file.getAbsolutePath());

  if (audioSource.equals(cacheFile.getAbsolutePath()) == false) {
            copyFile(is, cacheFile);
  }

        return cacheFile.getAbsolutePath();
    }

    public String cacheContent(String serverURLText, String audioSource)
      throws AudioCacheHandlerException {

  if (audioSource.startsWith("wlcontent://")) {
      URL url;

            String serverURL = serverURLText;

      try {
    url = new URL(new URL(serverURL), "webdav/content" + audioSource);
      } catch (MalformedURLException e) {
    throw new AudioCacheHandlerException("Bad URL: " + e.getMessage());
      }

      audioSource = url.toString();
  }

        int ix = audioSource.lastIndexOf(File.separator);

        if (ix >= 0) {
            audioSource = audioSource.substring(ix + 1);
        }

  audioSource = audioSource.replaceAll(" ", "%20");

  URL url;

  try {
      url = new URL(new URL(serverURLText), "webdav/content/users/"
                + LoginManager.getPrimary().getUsername() + "/audio/"
    + audioSource);
  } catch (MalformedURLException e) {
      throw new AudioCacheHandlerException("Bad URL: " + e.getMessage());
  }

  logger.warning("Cache content: " + url);
  return cacheURL(url);
    }

    public String cacheURL(URL url) throws AudioCacheHandlerException {
  // replace "/" with "_" in url.  Then create the cache file
  // get an input stream to the url and write to the file.
  // return the path to the local file.
  logger.warning("Cache URL: " + url);
  File file = createCacheFile(url.toString());

  copyFile(url, file);
  return file.getAbsolutePath();
    }

    private File createCacheFile(String resource) throws AudioCacheHandlerException {
        logger.warning("resource: " + resource);
  int ix = resource.lastIndexOf('/');//Not File.separator as we're dealing with URLs

  String s = resource;

  if (ix >= 0) {
      s = s.substring(ix + 1);
  }

  File file = new File(audioCacheDir, s);
        logger.warning("file: " + file);

  if (file.getAbsolutePath().equals(resource)) {
      return file;
  }

  logger.warning("Create cache file for: " + file.getAbsolutePath());

  file.delete();

  try {
      file.createNewFile();
  } catch (IOException e) {
      throw new AudioCacheHandlerException("Unable to create cache file: "
    + e.getMessage());
  }

  return file;
    }

    private void copyFile(URL source, File destination) throws AudioCacheHandlerException {
  InputStream is;

  try {
      is = source.openStream();
  } catch (IOException e) {
      throw new AudioCacheHandlerException("Unable to open stream: " + e.getMessage());
  }

  copyFile(is, destination);
    }

    private void copyFile(InputStream source, File destination) throws AudioCacheHandlerException {
  FileOutputStream fos;

  try {
      fos = new FileOutputStream(destination);
  } catch (FileNotFoundException e) {
      throw new AudioCacheHandlerException("Unable to read file: " + e.getMessage());
  }

  byte[] b = new byte[10000];

  int n;
  int total = 0;

  try {
      while ((n = source.read(b)) != -1) {
          fos.write(b, 0, n);
    total += n;
      }

      fos.close();
  } catch (IOException e) {
      throw new AudioCacheHandlerException("Unable to read/write cache file: "
    + e.getMessage());
  }
    }

}
TOP

Related Classes of org.jdesktop.wonderland.modules.portal.client.AudioCacheHandler

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.