Package org.onesocialweb.openfire.web

Source Code of org.onesocialweb.openfire.web.UploadManager

/*
*  Copyright 2010 Vodafone Group Services Ltd.
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*   
*/
package org.onesocialweb.openfire.web;

import java.io.File;
import java.util.Collection;
import java.util.Iterator;

import javax.persistence.EntityManager;

import org.dom4j.Element;
import org.jivesoftware.openfire.XMPPServer;
import org.onesocialweb.openfire.OswPlugin;
import org.onesocialweb.openfire.model.FileEntry;
import org.onesocialweb.openfire.model.PersistentFileEntry;
import org.xmpp.packet.JID;
import org.xmpp.packet.Message;

import eu.medsea.mimeutil.MimeType;
import eu.medsea.mimeutil.MimeUtil;

public class UploadManager {

  private static UploadManager instance;

  public static UploadManager getInstance() {
    if (instance == null) {
      instance = new UploadManager();
    }
    return instance;
  }

  public void updateProgress(JID user, long pBytesRead, long pContentLength, String requestId) {
    Message message = new Message();
    message.setTo(user);
    Element payload = message.addChildElement("upload", "http://onesocialweb.org/spec/1.0/upload");
    payload.addElement("request-id").setText(requestId);
    payload.addElement("status").setText("progress");
    payload.addElement("bytes-read").setText(Long.toString(pBytesRead));
    payload.addElement("size").setText(Long.toString(pContentLength));
    XMPPServer.getInstance().getMessageRouter().route(message);
  }

  public void commitFile(JID user, File file, String name, String requestId) {
    FileEntry entry = new PersistentFileEntry();
    entry.setId(file.getName());
    entry.setOwner(user.toBareJID());
    entry.setName(name);
    entry.setSize(file.length());
    entry.setType("unknown/unknown");
   
    // Attemtp to detect the mime type
    MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector");
    try {
      Collection<?> mimeTypes = MimeUtil.getMimeTypes(file);
      if (!mimeTypes.isEmpty()) {
        Iterator<?> i = mimeTypes.iterator();
        if (i.hasNext()) {
          MimeType mimeType = (MimeType) i.next();
          entry.setType(mimeType.toString());
        }
      }
    } catch (Exception e) {};
   
    // Store the file in the database
   
    // Initialize then entity manager
    EntityManager em  = OswPlugin.getEmFactory().createEntityManager();
    em.getTransaction().begin();
    em.persist(entry);
    em.getTransaction().commit();
    em.close();
   
    Message message = new Message();
    message.setTo(user);
    Element payload = message.addChildElement("upload", "http://onesocialweb.org/spec/1.0/upload");
    payload.addElement("request-id").setText(requestId);
    payload.addElement("status").setText("completed");
    payload.addElement("file-id").setText(file.getName());
    payload.addElement("size").setText(Long.toString(entry.getSize()));
    payload.addElement("mime-type").setText(entry.getType());
    XMPPServer.getInstance().getMessageRouter().route(message);
  }
 
  public FileEntry getFile(String id) {
    EntityManager em  = OswPlugin.getEmFactory().createEntityManager();
    FileEntry entry = em.find(PersistentFileEntry.class, id);
    em.close();
    return entry;
  }

  /*
   * Private constructor to enforce the singleton
   */
  private UploadManager() {
    //
  }

}
TOP

Related Classes of org.onesocialweb.openfire.web.UploadManager

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.