📄 cmsxmlnav.java
字号:
// determines the parent folder level starting from current folder and
// positive number determines the level starting ftom root folder.
currentFolder=extractFolder(cms,((-1)*level));
}
// 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);
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 root folder or parent folder starting from 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 getNavRoot(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 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);
}
// 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, it means all files and folders.
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 folders recursive.
*
* @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 getNavTree(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 depth=0;
int[] count={0};
// if there is not any depth then it must not be tested in a if condition
boolean depthIsNull=true;
// 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 {
// comma shows that there is two parameters: level,depth
// otherwise there is one parameter: level
if (tagcontent.indexOf(",")!=-1) {
level=Integer.parseInt(tagcontent.substring(0,tagcontent.indexOf(",")));
depth=Integer.parseInt(tagcontent.substring(tagcontent.indexOf(",")+1));
} else {
level=Integer.parseInt(tagcontent);
}
} catch(NumberFormatException e) {
throw new CmsException(e.getMessage());
}
}
// if level is not entered or it is less than zero then folder is the root folder
// otherwise the folder must be extracted accordeing to the entered level.
String folder="";
if (level<=0) {
folder=cms.rootFolder().getAbsolutePath();
} else {
folder=extractFolder(cms,level);
}
if (depth>0) {
depthIsNull=false;
}
// 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 folders in specified folder
Vector resources=cms.getSubFolders(folder);
// get all files in specified folder
Vector allFile=cms.getFilesInFolder(folder);
// get a vector of all files und folders
resources.ensureCapacity(resources.size() + allFile.size());
Enumeration e = allFile.elements();
while (e.hasMoreElements()) {
resources.addElement(e.nextElement());
}
// get the uri,servletpath and current folder
String requestedUri = cms.getRequestContext().getUri();
String currentFolder=cms.getRequestContext().currentFolder().getAbsolutePath();
String servletPath = cms.getRequestContext().getRequest().getServletUrl();
String result="";
// check whether xml data blocks are defined.
// The main datablock is entry, it must be defined, the others will get
// the same datablock if they don't exist.
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=buildNavTree(cms,template,userObject,resources,requestedUri,currentFolder,servletPath,level,depth,depthIsNull,count);
return result.getBytes();
}
/**
* gets a specified property of current folder.
*
* @param cms A_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 getPropertyCurrent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
throws CmsException {
String property="";
// tagcontent must contain the property definition name.
if (!tagcontent.equals("")) {
String currentFolder=cms.getRequestContext().currentFolder().getAbsolutePath();
property=cms.readProperty(currentFolder, tagcontent);
property=(property!=null?property:"");
// 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);
}
return (property.getBytes());
}
/**
* gets a specified property of specified folder starting from current folder.
*
* @param cms A_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 getPropertyParent(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
throws CmsException {
int level=0;
String property="";
// tagcontent determines the parent folder starting from current folder and
// the property definition name sparated by a comma.
if (!tagcontent.equals("")) {
try {
level=Integer.parseInt(tagcontent.substring(0,tagcontent.indexOf(",")));
} 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));
}
property=cms.readProperty(currentFolder, tagcontent.substring(tagcontent.indexOf(",")+1));
property=(property!=null?property:"");
// 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);
}
return (property.getBytes());
}
/**
* gets a specified property of specified folder starting from root.
*
* @param cms A_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 getPropertyRoot(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
throws CmsException {
int level=0;
String property="";
// tagcontent determines the folder starting from root folder and
// the property definition name sparated by a comma.
if (!tagcontent.equals("")) {
try {
level=Integer.parseInt(tagcontent.substring(0,tagcontent.indexOf(",")));
} catch(NumberFormatException e) {
throw new CmsException(e.getMessage());
}
String currentFolder="";
if (level<=0) {
currentFolder=currentFolder=cms.rootFolder().getAbsolutePath();
} else {
currentFolder=extractFolder(cms,level);
}
property=cms.readProperty(currentFolder, tagcontent.substring(tagcontent.indexOf(",")+1));
property=(property!=null?property:"");
// 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);
}
return (property.getBytes());
}
/**
* gets a specified property of uri.
*
* @param cms A_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 getPropertyUri(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject)
throws CmsException {
String property="";
String requestedUri = cms.getRequestContext().getUri();
property=cms.readProperty(requestedUri, tagcontent);
property=(property!=null?property:"");
// register this folder for changes
Vector vfsDeps = new Vector();
vfsDeps.add(cms.readFileHeader(requestedUri));
registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null,
(Hashtable)userObject, vfsDeps, null, null);
return (property.getBytes());
}
/**
* gets the caching information from the current template class.
*
* @param cms CmsObject Object for accessing system resources
* @param templateFile Filename of the template file
* @param elementName Element name of this template in our parent template.
* @param parameters Hashtable with all template class parameters.
* @param templateSelector template section that should be processed.
* @return <EM>true</EM> if this class may stream it's results, <EM>false</EM> otherwise.
*/
public CmsCacheDirectives getCacheDirectives(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) {
// First build our own cache directives.
CmsCacheDirectives result = new CmsCacheDirectives(true);
result.setCacheUri(true);
// we don't need the renewAfterPublish function becource we use the new dependencies feature.
result.noAutoRenewAfterPublish();
return result;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -