📄 filemanager.java
字号:
//// ____.// __/\ ______| |__/\. _______// __ .____| | \ | +----+ \// _______| /--| | | - \ _ | : - \_________// \\______: :---| : : | : | \________>// |__\---\_____________:______: :____|____:_____\// /_____|//// . . . i n j a h i a w e t r u s t . . .//package org.jahia.services.filemanager;import java.io.*;import java.util.*;import java.sql.*;import org.jahia.tools.files.*;import org.jahia.utils.*; // JahiaConsoleimport org.jahia.exceptions.*; // JahiaInitializationExceptionimport org.jahia.services.sites.*;import org.jahia.services.*;import org.jahia.registries.*;import org.jahia.data.files.*;/** * Class Filemanager.<br> * The Filemanager core object * * @author Khue ng * @version 1.0 */public class Filemanager { /** the filemanager identifier **/ private int m_FilemanagerID = -1; // by default does not exists in db /** the owner of this filemanager **/ private int m_OwnerID; // the ownerID /** the Path to the File Repository folder on disk **/ private String m_StoragePath = ""; /** the folders tree for this filemanager **/ private Vector m_FolderTree; /** parents **/ private Hashtable parents; // if size > 0, getFolderTree() only return children for // those folders otherwise return children of all folders // of this filemanager /** excludeBranchFolder **/ private Folder m_ExcludeBranchFolder; // a folder and all its children to exclude // by getFolderTree() /** if the folderTree is already loaded or not **/ private boolean m_FolderTreeLoaded = false; /** a reference to an instance of FilemanagerDB class **/ private FilemanagerDB m_FmngDB; /** a reference to an instance of FolderDB class **/ private FolderDB m_FolderDB; /** * Constructor * */ public Filemanager() { } /** * Method create<br> * Create a new filemanager in database * * @param the owner ID * @return true if done correctly */ public boolean create(int ownerID){ boolean success = true; // Check if a filemanager already exist for this owner Filemanager tmpFilemanager = m_FmngDB.getInstance().getFilemanagerByOwner(ownerID); if ( tmpFilemanager == null ){ this.setOwnerID(ownerID); JahiaSite site = null; try { // Create a new one site = ServicesRegistry.getInstance() .getJahiaSitesService() .getSite(ownerID); } catch ( JahiaException je ){ return false; } if ( site == null ){ return false; } File storageFolder = ServicesRegistry.getInstance().getJahiaFilemanagerService().createDirectory(site); this.setStoragePath(storageFolder.getName()); toConsole(" Insert new Filemanager "); if ( !m_FmngDB.getInstance().insert(this) ) { success = false; } else { // create Root Folder for this filemanager Folder folder = new Folder ( this.getFilemanagerID(), -1, // no parent "root" ); if (!m_FolderDB.getInstance().insert(folder)){ // success m_FmngDB.getInstance().delete(this.getFilemanagerID()); success = false; } } } else { File tmpFile = new File(ServicesRegistry.getInstance().getJahiaFilemanagerService().getFileRepositoryRootPath() + File.separator + tmpFilemanager.getStoragePath() ); if ( tmpFile == null || !tmpFile.isDirectory() ){ tmpFile.mkdirs(); } } return success; } /** * Method initializeWithOwner<br> * Initialize filemanager's data by owner id.<br> * Load filemanager's data : filemanager id, owner id<br> * * * @param ownerID the id of the owner * @return true if done correctly */ public boolean initializeWithOwner(int ownerID) { this.setOwnerID(ownerID); // get filemanager data Filemanager tmpFilemanager = m_FmngDB.getInstance().getFilemanagerByOwner(this.getOwnerID()); if ( tmpFilemanager != null ) { this.setStoragePath(tmpFilemanager.getStoragePath()); this.setFilemanagerID(tmpFilemanager.getFilemanagerID()); return true; } else { // try to create a new one if (this.create(ownerID)){ tmpFilemanager = m_FmngDB.getInstance().getFilemanagerByOwner(this.getOwnerID()); if ( tmpFilemanager != null ) { this.setStoragePath(tmpFilemanager.getStoragePath()); this.setFilemanagerID(tmpFilemanager.getFilemanagerID()); return true; } else { return false; } } return false; } } /** * Method initialize<br> * Initialize filemanager's data with filemanager id.<br> * Load filemanager's data : filemanager id, owner id<br> * * The default active folder is the root folder * * @param filemanagerID the filemanager id * @return true if done correctly */ public boolean initialize(int filemanagerID) { this.setFilemanagerID(filemanagerID); // get filemanager data Filemanager tmpFilemanager = m_FmngDB.getInstance().getFilemanager(this.getFilemanagerID()); if ( tmpFilemanager != null ) { this.setStoragePath(tmpFilemanager.getStoragePath()); this.setOwnerID(tmpFilemanager.getOwnerID()); return true; } else { return false; } } /** * Method getFolderTree * Get the Folder tree for this filemanager, deploy all branch * return a tree starting at the filemanager's folder root * * @return a Vector of Folder objects or null */ public Vector getFolderTree() { if ( !m_FolderTreeLoaded ) { // reset parents this.parents = null; // get Folder list String whereSql = " where filemanagerid_jahia_fld=" + this.getFilemanagerID() ; String orderSql = " order by parent_jahia_fld, fldname_jahia_fld "; Vector foldersTree = m_FolderDB.getInstance().getFolders(whereSql,orderSql); Vector orderedFolders = new Vector(); if (foldersTree != null) { Folder rootFolder = (Folder)foldersTree.firstElement(); rootFolder.setDepth(0); orderedFolders.add(rootFolder); foldersTree.removeElementAt(0); this.sortFolders(foldersTree,orderedFolders,rootFolder.getFolderID(),rootFolder.getDepth()); foldersTree = orderedFolders; } toConsole(" buildFolderTree, ordered folders :" + foldersTree.size() ); // Remove the branch m_ExcludeBranchFolder and all it's children if ( this.m_ExcludeBranchFolder != null ) { foldersTree = removeBranch(this.m_ExcludeBranchFolder,orderedFolders); } m_FolderTree = foldersTree; m_FolderTreeLoaded = true; } return m_FolderTree; } /** * Method getFolderTree * Get the Folder tree for this filemanager, deploy only one branch * * @param activeFolder the active folder for which to deploy branch * @return a Vector of Folder objects or null */ public Vector getFolderTree(Folder activeFolder) { if ( !m_FolderTreeLoaded ) { // get active folder's parent Hashtable parents = new Hashtable(); activeFolder.getParents(parents); this.setParents(parents); // get Folder list String whereSql = " where filemanagerid_jahia_fld=" + this.getFilemanagerID() ; String orderSql = " order by parent_jahia_fld, fldname_jahia_fld "; Vector foldersTree = m_FolderDB.getInstance().getFolders(whereSql,orderSql); Vector orderedFolders = new Vector(); if (foldersTree != null) { Folder rootFolder = (Folder)foldersTree.firstElement(); rootFolder.setDepth(0); orderedFolders.add(rootFolder); foldersTree.removeElementAt(0); this.sortFolders(foldersTree,orderedFolders,rootFolder.getFolderID(),rootFolder.getDepth()); foldersTree = orderedFolders; } toConsole(" buildFolderTree, ordered folders :" + foldersTree.size() ); m_FolderTree = foldersTree; m_FolderTreeLoaded = true; } return m_FolderTree; } /** * Method void loadFolderTree<br> * Force to reload folder tree * */ public void loadFolderTree(){ m_FolderTreeLoaded = false; getFolderTree(); } /** * Method void loadFolderTree<br> * Force to reload folder tree * * @param activerFolder the active folder for which to deploy all branch */ public void loadFolderTree(Folder activeFolder){ m_FolderTreeLoaded = false; getFolderTree(activeFolder); } /** * Method getBranch(Folder folder)<br> * Return a branch starting from a gived folder * * @param the folder from where to get the Tree * @return a Vector of Folder objects or null */ public Vector getBranch(Folder folder) { // get Folder list String whereSql = " where filemanagerid_jahia_fld=" + this.getFilemanagerID() ; String orderSql = " order by parent_jahia_fld, fldname_jahia_fld "; Vector foldersTree = m_FolderDB.getInstance().getFolders(whereSql,orderSql); Vector orderedFolders = new Vector(); if (foldersTree != null) { folder.setDepth(0); orderedFolders.add(folder); this.sortFolders(foldersTree,orderedFolders,folder.getFolderID(),folder.getDepth()); foldersTree = orderedFolders; } toConsole(" buildFolderTree(folder), ordered folders :" + foldersTree.size() ); return foldersTree; } /** * Recursively build the folder tree * * @param folders a vector of folders ordered by parentid * @param orderedFolders the vector to store ordered folders * @param parentID the parent folder's id to get children * @param the current tree depth */ protected void sortFolders(Vector folders, Vector orderedFolders, int parentID, int currentDepth){ for ( int i=0 ; i<folders.size() ; i++ ){ Folder tmpFolder = null; tmpFolder = (Folder)folders.get(i); toConsole( " parent id is: " + parentID + "\n"); toConsole( " sorted folder is : " + tmpFolder.getFolderName() + "\n"); if ( tmpFolder.getParentID() == parentID ) { toConsole( " folder " + tmpFolder.getFolderName() + " is added \n"); tmpFolder.setDepth(currentDepth+1); if ( this.parents != null && (parents.size()>0) ){ if ( parents.get(new Integer(tmpFolder.getFolderID())) != null ){ orderedFolders.add(tmpFolder); //folders.removeElementAt(i); //i-=1; sortFolders(folders,orderedFolders,tmpFolder.getFolderID(),currentDepth + 1); } else { orderedFolders.add(tmpFolder); //folders.removeElementAt(i); //i-=1; } } else { orderedFolders.add(tmpFolder); //folders.removeElementAt(i); //i-=1; sortFolders(folders,orderedFolders,tmpFolder.getFolderID(),currentDepth + 1); } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -