com.eryansky.modules.disk.service.DiskManager.java Source code

Java tutorial

Introduction

Here is the source code for com.eryansky.modules.disk.service.DiskManager.java

Source

/**
 * Copyright (c) 2012-2014 http://www.eryansky.com
 * <p/>
 * Licensed under the Apache License, Version 2.0 (the "License");
 */
package com.eryansky.modules.disk.service;

import com.eryansky.common.exception.ServiceException;
import com.eryansky.common.orm.entity.StatusState;
import com.eryansky.common.orm.hibernate.Parameter;
import com.eryansky.common.utils.collections.Collections3;
import com.eryansky.modules.disk.extend.IFileManager;
import com.eryansky.common.utils.io.FileUtils;
import com.eryansky.core.security.SessionInfo;
import com.eryansky.core.web.upload.FileUploadUtils;
import com.eryansky.modules.disk.entity.File;
import com.eryansky.modules.disk.entity.Folder;
import com.eryansky.modules.disk.entity._enum.FolderAuthorize;
import com.eryansky.modules.disk.utils.DiskUtils;
import com.eryansky.utils.AppConstants;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.Validate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileOutputStream;
import java.util.List;

/**
 * @author &Eryan eryanwcp@gmail.com
 * @date 2014-12-10
 */
@Service
public class DiskManager {

    @Autowired
    private FolderManager folderManager;
    @Autowired
    private FileManager fileManager;
    @Autowired
    private IFileManager iFileManager;

    /**
     * ??? ?
     * <br/>?
     * @param code ?
     * @return
     */
    public Folder checkSystemFolderByCode(String code) {
        Validate.notBlank(code, "?[code]?null.");
        Parameter parameter = new Parameter(StatusState.NORMAL.getValue(), FolderAuthorize.SysTem.getValue(), code);
        StringBuffer hql = new StringBuffer();
        hql.append("from Folder f where f.status = :p1 and f.folderAuthorize = :p2 and f.code = :p3");
        List<Folder> list = folderManager.getEntityDao().find(hql.toString(), parameter);
        Folder folder = list.isEmpty() ? null : list.get(0);
        if (folder == null) {
            folder = new Folder();
            folder.setFolderAuthorize(FolderAuthorize.SysTem.getValue());
            folder.setCode(code);
            folderManager.saveOrUpdate(folder);
        }
        return folder;
    }

    /**
     * ??? ?
     * <br/>?
     * @param code ?
     * @param userId ID
     * @return
     */
    public Folder checkSystemFolderByCode(String code, String userId) {
        Validate.notBlank(code, "?[code]?null.");
        Validate.notNull(userId, "?[userId]?null.");
        Parameter parameter = new Parameter(StatusState.NORMAL.getValue(), FolderAuthorize.SysTem.getValue(), code,
                userId);
        StringBuffer hql = new StringBuffer();
        hql.append(
                "from Folder f where f.status = :p1 and f.folderAuthorize = :p2 and f.code = :p3 and f.userId = :p4");
        List<Folder> list = folderManager.getEntityDao().find(hql.toString(), parameter);
        Folder folder = list.isEmpty() ? null : list.get(0);
        if (folder == null) {
            folder = new Folder();
            folder.setFolderAuthorize(FolderAuthorize.SysTem.getValue());
            folder.setCode(code);
            folder.setUserId(userId);
            folderManager.saveOrUpdate(folder);
        }
        return folder;
    }

    /**
     * ?
     * @param folderCode
     * @param file
     * @return
     */
    public File saveSystemFile(String folderCode, File file) {
        Validate.notBlank(folderCode, "?[folderCode]?null.");
        Validate.notNull(file, "?[file]?null.");
        Folder folder = checkSystemFolderByCode(folderCode);
        file.setFolder(folder);
        fileManager.save(file);
        return file;
    }

    /**
     * ?
     * @param fileId ID
     * @return
     */
    public File getFileById(String fileId) {
        Validate.notNull(fileId, "?[fileId]?null.");
        return fileManager.loadById(fileId);
    }

    /**
     * ?
     * @param file
     * @return
     */
    public File saveFile(File file) {
        Validate.notNull(file, "?[file]?null.");
        fileManager.save(file);
        return file;
    }

    /**
     * 
     * @param file
     * @return
     */
    public File updateFile(File file) {
        Validate.notNull(file, "?[file]?null.");
        fileManager.update(file);
        return file;
    }

    /**
     * 
     * @param file
     * @return
     */
    public void deleteFile(File file) {
        Validate.notNull(file, "?[file]?null.");
        fileManager.deleteFile(file.getId());
    }

    /**
     * 
     * @param fileId
     */
    public void deleteFile(String fileId) {
        Validate.notNull(fileId, "?[fileId]?null.");
        fileManager.deleteFile(fileId);
    }

    /**
     * ?ID
     * @param fileIds ID?
     * @return
     */
    public List<File> findFilesByIds(List<String> fileIds) {
        Validate.notEmpty(fileIds, "?[fileIds]?null.");
        if (Collections3.isNotEmpty(fileIds)) {
            return fileManager.findFilesByIds(fileIds);
        } else {
            return null;
        }
    }

    /**
     * 
     * @param sessionInfo
     * @param folder
     * @param uploadFile
     * @throws Exception
     */
    public File fileUpload(SessionInfo sessionInfo, Folder folder, MultipartFile uploadFile) throws Exception {
        File file = null;
        /*      Exception exception = null;
        */
        java.io.File tempFile = null;
        try {
            String relativeDir = DiskUtils.getRelativePath(folder, sessionInfo.getUserId());
            String fullName = uploadFile.getOriginalFilename();
            String code = FileUploadUtils.encodingFilenamePrefix(sessionInfo.getUserId().toString(), fullName);
            String storePath = iFileManager.getStorePath(folder, sessionInfo.getUserId(),
                    uploadFile.getOriginalFilename());

            String fileTemp = AppConstants.getDiskTempDir() + java.io.File.separator + code;
            tempFile = new java.io.File(fileTemp);
            FileOutputStream fos = FileUtils.openOutputStream(tempFile);
            IOUtils.copy(uploadFile.getInputStream(), fos);

            iFileManager.saveFile(storePath, fileTemp, false);
            file = new File();
            file.setFolder(folder);
            file.setCode(code);
            file.setUserId(sessionInfo.getUserId());
            file.setName(fullName);
            file.setFilePath(storePath);
            file.setFileSize(uploadFile.getSize());
            file.setFileSuffix(FilenameUtils.getExtension(fullName));
            fileManager.save(file);
        } catch (Exception e) {
            // exception = e;
            throw new ServiceException(DiskUtils.UPLOAD_FAIL_MSG + e.getMessage(), e);
        } finally {
            //         if (exception != null && file != null) {
            //            DiskUtils.deleteFile(null, file.getId());
            //         }
            if (tempFile != null && tempFile.exists()) {
                tempFile.delete();
            }

        }
        return file;

    }

}