⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmsxmlnav.java

📁 java 编写的程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                        result.append(buildNavTree(cms,template,userObject,all,requestedUri,currentFolder,servletPath,level,depth,depthIsNull,count));
                    }
                }
            }
            result.append(template.getProcessedDataValue("navend", this, userObject));
        }
        return result.toString();
    }
    /**
     * Builds the link to folder determined by level.
     *
     * @param cms CmsObject Object for accessing system resources.
     * @param level The level of folder.
     * @return String that contains the path of folder determind by level.
     */
    protected String extractFolder(CmsObject cms, int level)
        throws CmsException {

        String currentFolder="/";
        StringTokenizer st = new StringTokenizer(cms.getRequestContext().currentFolder().getAbsolutePath(),"/");
        int count=st.countTokens();
        // if the level is negative then take the folder starting from
        // current folder otherwise take the folder starting from root
        if (level<0) {
            level=(-1)*level;
            level=count-level;
        }
        while (st.hasMoreTokens()) {
            if (level>1) {
                currentFolder=currentFolder+st.nextToken()+"/";
                level--;
            } else {
                break;
            }
        }
        return currentFolder;
    }
    /**
     * extract the level of navigation.
     *
     * @param cms CmsObject Object for accessing system resources.
     * @return int that contains the level.
     */
    protected int extractLevel(CmsObject cms, String folder)
        throws CmsException {
        StringTokenizer st = new StringTokenizer(folder,"/");
        return (st.countTokens());
    }
    /**
     * Extracts the navbar.
     *
     * @param cms CmsObject Object for accessing system resources.
     * @param resources a vector that contains the elements of navigation.
     * @param navLink an array of navigation's link.
     * @param navText an array of navigation's Text.
     * @param navPos an array of position of navbar.
     * @return The maximum number of navbars in navigation.
     */
    protected int extractNav(CmsObject cms, Vector resources, String[] navLink, String[] navText, float[] navPos)
        throws CmsException {

        String requestedUri = cms.getRequestContext().getUri();

        int size = resources.size();
        int max = 0;

        // First scan all subfolders of the root folder
        // for any navigation metainformations and store
        // the maximum position found
        for(int i=0; i<size; i++) {
            CmsResource currentResource = (CmsResource)resources.elementAt(i);
            String path = currentResource.getAbsolutePath();
            String pos = cms.readProperty(path, C_PROPERTY_NAVPOS);
            String text = cms.readProperty(path, C_PROPERTY_NAVTEXT);
            // Only list folders in the nav bar if they are not deleted!
            if (currentResource.getState() != C_STATE_DELETED) {
                // don't list the temporary folders in the nav bar!
                if (pos != null && text != null && (!"".equals(pos)) && (!"".equals(text))
                     && ((!currentResource.getName().startsWith(C_TEMP_PREFIX)) || path.equals(requestedUri))) {
                    navLink[max] = path;
                    navText[max] = text;
                    navPos[max] = new Float(pos).floatValue();
                    max++;
                }
            }
        }

        // Sort the navigation
        sortNav(max, navLink, navText, navPos);

        return max;
    }
    /**
     * gets the current folder.
     *
     * @param cms CmsObject Object for accessing system resources.
     * @param tagcontent Unused in this special case of a user method. Can be ignored.
     * @param doc Reference to the A_CmsXmlContent object of the initiating XLM document.
     * @param userObj Hashtable with parameters.
     * @return byte[] with the content of this subelement.
     * @exception CmsException
     */
    public Object getFolderCurrent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
            throws CmsException {

        String currentFolder=cms.getRequestContext().currentFolder().getAbsolutePath();
        currentFolder=cms.getRequestContext().getRequest().getServletUrl() + currentFolder;
        return currentFolder.getBytes();
    }
    /**
     * gets the parent folder.
     *
     * @param cms CmsObject Object for accessing system resources.
     * @param tagcontent Unused in this special case of a user method. Can be ignored.
     * @param doc Reference to the A_CmsXmlContent object of the initiating XLM document.
     * @param userObj Hashtable with parameters.
     * @return byte[] with the content of this subelement.
     * @exception CmsException
     */
    public Object getFolderParent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
            throws CmsException {

        int level=0;
        // tagcontent determines the folder starting from parent folder.
        // if tagcontent is null, zero or negative, then the navigation of current
        // folder must be showed.
        if (!tagcontent.equals("")) {
            try {
                level=Integer.parseInt(tagcontent);
            } catch(NumberFormatException e) {
                throw new CmsException(e.getMessage());
            }
        }
        String currentFolder="";
        if (level<=0) {
            currentFolder=cms.getRequestContext().currentFolder().getAbsolutePath();
        } else {
            // level is converted to negative number, so I can use the method
            // "extractFolder" for positive and negative numbers. Negative number
            // determines the parent folder level starting from current folder and
            // positive number determines the level starting ftom root folder.
            currentFolder=extractFolder(cms,((-1)*level));
        }
        String parentFolder=cms.getRequestContext().getRequest().getServletUrl() + currentFolder;
        return parentFolder.getBytes();
    }
    /**
     * gets the root folder.
     *
     * @param cms CmsObject Object for accessing system resources.
     * @param tagcontent Unused in this special case of a user method. Can be ignored.
     * @param doc Reference to the A_CmsXmlContent object of the initiating XLM document.
     * @param userObj Hashtable with parameters.
     * @return byte[] with the content of this subelement.
     * @exception CmsException
     */
    public Object getFolderRoot(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
            throws CmsException {

        int level=0;
        // tagcontent determines the folder starting from root folder.
        // if tagcontent is null, then the navigation of root folder must be showed.
        if (!tagcontent.equals("")) {
            try {
                level=Integer.parseInt(tagcontent);
            } catch(NumberFormatException e) {
                throw new CmsException(e.getMessage());
            }
        }
        String currentFolder="";
        if (level<=0) {
            currentFolder=cms.rootFolder().getAbsolutePath();
        } else {
            currentFolder=extractFolder(cms,level);
        }
        String rootFolder=cms.getRequestContext().getRequest().getServletUrl() + currentFolder;
        return rootFolder.getBytes();
    }
    /**
     * gets the navigation of current folder.
     *
     * @param cms CmsObject Object for accessing system resources.
     * @param tagcontent Unused in this special case of a user method. Can be ignored.
     * @param doc Reference to the A_CmsXmlContent object of the initiating XLM document.
     * @param userObj Hashtable with parameters.
     * @return byte[] with the content of this subelement.
     * @exception CmsException
     */
    public Object getNavCurrent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
            throws CmsException {
        // template file
        CmsXmlTemplateFile template=(CmsXmlTemplateFile)doc;
        // check whether there exist entry datablock
        if (!template.hasData("naventry")) {
            return "".getBytes();
        }
        // current folder
        String currentFolder=cms.getRequestContext().currentFolder().getAbsolutePath();
        // register this folder for changes
        Vector vfsDeps = new Vector();
        vfsDeps.add(cms.readFolder(currentFolder));
        registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null,
                        (Hashtable)userObject, vfsDeps, null, null);
        // get all resources in current folder
        Vector resources=cms.getSubFolders(currentFolder);
        Vector allFile=cms.getFilesInFolder(currentFolder);
        resources.ensureCapacity(resources.size() + allFile.size());
        Enumeration e = allFile.elements();
        while (e.hasMoreElements()) {
            resources.addElement(e.nextElement());
        }
        // if there is not exist current datablock then take the entry datablock
        if (!template.hasData("navcurrent")) {
            template.setData("navcurrent", template.getData("naventry"));
        }
        return buildNav(cms,doc,userObject,resources).getBytes();
    }
    /**
     * gets the navigation of files and folders,
     * by folders it is showed closed, if the folder is clicked then it is opened.
     *
     * @param cms CmsObject Object for accessing system resources.
     * @param tagcontent used in this special case of a user method. Can't be ignored.
     * @param doc Reference to the A_CmsXmlContent object of the initiating XLM document.
     * @param userObj Hashtable with parameters.
     * @return byte[] with the content of this subelement.
     * @exception CmsException
     */
    public Object getNavFold(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
            throws CmsException {
        // template file
        CmsXmlTemplateFile template=(CmsXmlTemplateFile)doc;
        // check whether there exist entry datablock
        if (!template.hasData("naventry")) {
            return "".getBytes();
        }
        int level=0;
        int[] count={0};
        // if level is zero or null or negative then all folders recursive must
        // be showed starting from root folder unless all folders stating from
        // specified level of parent folder.
        if (!tagcontent.equals("")) {
            try {
                level=Integer.parseInt(tagcontent);
            } catch(NumberFormatException e) {
                throw new CmsException(e.getMessage());
            }
        }
        // extract the folder
        String folder="";
        if (level<=0) {
            folder=cms.rootFolder().getAbsolutePath();
        } else {
            folder=extractFolder(cms,level);
        }
        // get uri, current folder, servletpath
        String requestedUri = cms.getRequestContext().getUri();
        String currentFolder=cms.getRequestContext().currentFolder().getAbsolutePath();
        String servletPath = cms.getRequestContext().getRequest().getServletUrl();
        // register this folder for changes
        Vector vfsDeps = new Vector();
        vfsDeps.add(cms.readFolder(folder));
        registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null,
                        (Hashtable)userObject, vfsDeps, null, null);
        // get all resources
        Vector resources=cms.getSubFolders(folder);
        Vector allFile=cms.getFilesInFolder(folder);
        resources.ensureCapacity(resources.size() + allFile.size());
        Enumeration e = allFile.elements();
        while (e.hasMoreElements()) {
            resources.addElement(e.nextElement());
        }

        String result="";
        // check wheather xml data blocks are defined.
        if (!template.hasData("navcurrent")) {
            template.setData("navcurrent", template.getData("naventry"));
        }
        if (!template.hasData("navstart")) {
            template.setData("navstart", "");
        }
        if (!template.hasData("navend")) {
            template.setData("navend", "");
        }
        result=buildNavFold(cms,template,userObject,resources,requestedUri,currentFolder,servletPath,level,count);

        return result.getBytes();
    }
    /**
     * gets the navigation of specified level of parent folder.
     *
     * @param cms CmsObject Object for accessing system resources.
     * @param tagcontent used in this special case of a user method. Can't be ignored.
     * @param doc Reference to the A_CmsXmlContent object of the initiating XLM document.
     * @param userObj Hashtable with parameters.
     * @return byte[] with the content of this subelement.
     * @exception CmsException
     */
    public Object getNavParent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
            throws CmsException {

        // template file
        CmsXmlTemplateFile template=(CmsXmlTemplateFile)doc;
        // check whether there exist entry datablock
        if (!template.hasData("naventry")) {
            return "".getBytes();
        }
        int level=0;
        // tagcontent determines the folder starting from parent folder.
        // if tagcontent is null, zero or negative, then the navigation of current
        // folder must be showed.
        if (!tagcontent.equals("")) {
            try {
                level=Integer.parseInt(tagcontent);
            } catch(NumberFormatException e) {
                throw new CmsException(e.getMessage());
            }
        }
        String currentFolder="";
        if (level<=0) {
            currentFolder=cms.getRequestContext().currentFolder().getAbsolutePath();
        } else {
            // level is converted to negative number, so I can use the method
            // "extractFolder" for positive and negative numbers. Negative number

⌨️ 快捷键说明

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