📄 cmsxmlnav.java
字号:
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 + -