webdiskbean.java

来自「OperaMasks是一种基于J2EE的Web开发技术」· Java 代码 · 共 245 行

JAVA
245
字号
package demo.webdisk;

import java.io.File;
import java.io.FileFilter;

import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;

import org.operamasks.faces.annotation.Action;
import org.operamasks.faces.annotation.BeforeRender;
import org.operamasks.faces.annotation.Bind;
import org.operamasks.faces.annotation.ManagedBean;
import org.operamasks.faces.annotation.ManagedBeanScope;
import org.operamasks.faces.component.grid.impl.UIDataGrid;
import org.operamasks.faces.component.layout.impl.UIWindow;
import org.operamasks.faces.component.tree.base.TreeDataProvider;
import org.operamasks.faces.component.tree.impl.UITree;
import org.operamasks.faces.component.tree.impl.UITreeNode;
import org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog;
import org.operamasks.faces.util.Browser;

@ManagedBean(name = "WebdiskBean", scope = ManagedBeanScope.SESSION)
public class WebDiskBean {
    @Bind
    private UITree tree;

    @Bind
    private UIFileUploadDialog fileUpload;

    @Bind
    private UIWindow directoryDetail;

    @Bind
    private UIDataGrid fileList;

    @Bind(id = "fileUpload", attribute = "savePath")
    private String savePath;

    @Bind(id = "fileList")
    private File[] fileListData = new File[] {};

    @Bind
    private String directoryName;
    
    @Bind
    private String response;

    private static final String ROOT_NAME = "网络硬盘";
    
    private FileFilter directoryFileter = new FileFilter() {
        public boolean accept(File pathname) {
            return pathname.isDirectory();
        }
    };

    private FileFilter fileFileter = new FileFilter() {
        public boolean accept(File pathname) {
            return pathname.isFile();
        }
    };

    @Bind(id = "tree")
    private TreeDataProvider treeData = new TreeDataProvider() {
        public Object[] getChildren(Object node) {
            if (node == null) {
                FacesContext context = FacesContext.getCurrentInstance();
                ServletContext servletContext = (ServletContext) context.getExternalContext().getContext();
                File file = new File(servletContext.getRealPath("webdisk/" + ROOT_NAME));
                if (!file.exists()) {
                    file.mkdirs();
                }
                return new Object[] { file };
            } else if (node instanceof java.io.File) {
                return ((java.io.File) node).listFiles(directoryFileter);
            }
            return null;
        }

        public Boolean isChecked(Object node) {
            return null;
        }

        public boolean isCascade(Object node) {
            return true;
        }

        public String getIcon(Object node) {
            return "images/folder.gif";
        }

        public String getText(Object node) {
            File file = (File) node;
            File[] files = file.listFiles(fileFileter);
            int length = files == null ? 0 : files.length;
            return String.format("%s(%s)", file.getName(), length);
        }

        public String getHref(Object node) {
            return null;
        }

        public String getHrefTarget(Object node) {
            return null;
        }

        public boolean isExpanded(Object node) {
            File file = (File) node;
            return ROOT_NAME.equals(file.getName());
        }
    };

    @Action
    public void tree_onselect() {
        UITreeNode node = tree.getSelectedNode();
        if (node != null && node.getUserData() != null) {
            File file = (File) node.getUserData();
            if (file.isDirectory()) {
                savePath = file.getPath();
                fileListData = file.listFiles(fileFileter);
            } else {
                savePath = "";
                fileListData = new File[] {};
            }
            fileList.reload();
        }
        response = "";
    }

    @Action
    public void addFile() {
        UITreeNode node = tree.getSelectedNode();
        if (node != null && node.getUserData() != null) {
            File file = (File) node.getUserData();
            long maxSize = 0;
            for(File f : file.listFiles(fileFileter)){
                maxSize += f.length();
            }
            if(maxSize < 100*1024*1024){
                fileUpload.show();
            }else{
                response = "<span style='color:red'>文件夹容量超出限制,请清除一些文件再上传!</span>";
            }
        }
        
    }

    @Action
    public void fileUpload_onclose() {
        updateList();
    }

    @Action
    public void delFile() {
        boolean needUpdate = false;
        Object[] selections = fileList.getSelectedValues();
        for (Object o : selections) {
            if (((File) o).delete()) {
                needUpdate = true;
            }
        }
        if (needUpdate) {
            updateList();
            fileList.reload();
        }
    }

    private void updateList() {
        UITreeNode node = tree.getSelectedNode();
        if (node != null && node.getUserData() != null) {
            File file = (File) node.getUserData();
            if (file != null) {
                fileListData = file.listFiles(fileFileter);
                if(fileListData.length == 1){
                	fileList.setSelectedRow(0);
                }
                fileList.reload();
            }
            node.reload();
        }
        response = "";
    }

    @Action
    public void addDirectory() {
        UITreeNode node = tree.getSelectedNode();
        if (node != null) {
            directoryDetail.show();
        }
        response = "";
    }
    
    @Action
    public void delDirectory() {
        UITreeNode node = tree.getSelectedNode();
        if (node != null && node.getUserData() != null) {
            File file = (File) node.getUserData();
            if (file != null && !ROOT_NAME.equals(file.getName())) {
                deleteDir(file);
                node.remove();
                fileListData = new File[]{};
                fileList.reload();
            }
        }
        response = "";
    }
    
    private void deleteDir(File dir) {
        if (dir == null || !dir.exists() || !dir.isDirectory())
            return; 
        for (File file : dir.listFiles()) {
            if (file.isFile())
                file.delete(); 
            else if (file.isDirectory())
                deleteDir(file); 
        }
        dir.delete();
    } 

    @Action
    public void sure() {
        if (directoryName != null) {
            UITreeNode node = tree.getSelectedNode();
            if (node != null && node.getUserData() != null) {
                File file = (File) node.getUserData();
                if (file != null) {
                    File newFile = new File(file.getPath() + "/" + directoryName);
                    if(newFile.mkdir()){
                        node.setExpanded(true);
                        node.reloadChildren();
                        directoryDetail.close();
                    }
                }
            }
        }
        response = "";
    }
    
    @BeforeRender
    public void beforeRender(boolean isPostback){
    	if(!isPostback){
    		Browser.execClientScript("clientTree.getRootNode().select();");
    	}
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?