📄 cmsxmlnav.java
字号:
// 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 {
if (tagcontent.indexOf(",")!=-1) {
level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(",")));
exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase();
} else {
level=Integer.parseInt(tagcontent);
}
} catch (NumberFormatException e) {
level=1;
exact=tagcontent.toLowerCase();
if (!exact.equals("true")) {
exact="false";
}
}
}
String currentFolder=extractFolder(cms, level, exact);
if (currentFolder.equals(""))
return "".getBytes();
String rootFolder=CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + currentFolder;
return rootFolder.getBytes();
}
/**
* gets the navigation of current folder.<p>
*
* @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 userObject Hashtable with parameters
* @return byte[] with the content of this subelement
* @throws CmsException if something goes wrong
*/
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();
}
String currentFolder=CmsResource.getFolderPath(cms.getRequestContext().getUri());
int level=extractLevel(cms, currentFolder)+1;
String exact="false";
// 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 {
if (tagcontent.indexOf(",")!=-1) {
level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(",")));
exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase();
} else {
level=Integer.parseInt(tagcontent);
}
} catch (NumberFormatException e) {
level=extractLevel(cms, currentFolder)+1;
exact=tagcontent.toLowerCase();
if (!exact.equals("true")) {
exact="false";
}
}
}
// get the folder of level
currentFolder="/";
StringTokenizer st = new StringTokenizer(CmsResource.getFolderPath(cms.getRequestContext().getUri()), "/");
int count=st.countTokens()+1;
if (exact.equals("true") && level!=count) {
return "".getBytes();
}
while (st.hasMoreTokens()) {
if (level>1) {
currentFolder=currentFolder+st.nextToken()+"/";
level--;
} else {
break;
}
}
// 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
List resources=cms.getSubFolders(currentFolder);
List allFile=cms.getFilesInFolder(currentFolder);
((ArrayList)resources).ensureCapacity(resources.size() + allFile.size());
Iterator e = allFile.iterator();
while (e.hasNext()) {
resources.add(e.next());
}
// 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.<p>
*
* @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 userObject Hashtable with parameters
* @return byte[] with the content of this subelement
* @throws CmsException if something goes wrong
*/
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=1;
int[] count={0};
String exact="false";
// 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 {
if (tagcontent.indexOf(",")!=-1) {
level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(",")));
exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase();
} else {
level=Integer.parseInt(tagcontent);
}
} catch (NumberFormatException e) {
level=1;
exact=tagcontent.toLowerCase();
if (!exact.equals("true")) {
exact="false";
}
}
}
// extract the folder
String folder=extractFolder(cms, level, exact);
if (folder.equals(""))
return "".getBytes();
//}
// get uri, current folder, servletpath
String requestedUri = cms.getRequestContext().getUri();
String currentFolder=CmsResource.getFolderPath(cms.getRequestContext().getUri());
String servletPath = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).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
List resources=cms.getSubFolders(folder);
List allFile=cms.getFilesInFolder(folder);
((ArrayList)resources).ensureCapacity(resources.size() + allFile.size());
Iterator e = allFile.iterator();
while (e.hasNext()) {
resources.add(e.next());
}
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.<p>
*
* @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 userObject Hashtable with parameters
* @return byte[] with the content of this subelement
* @throws CmsException if something goes wrong
*/
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=1;
String exact="";
// 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 {
if (tagcontent.indexOf(",")!=-1) {
level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(",")));
exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase();
} else {
level=Integer.parseInt(tagcontent);
}
} catch (NumberFormatException e) {
level=1;
exact=tagcontent.toLowerCase();
if (!exact.equals("true")) {
exact="false";
}
}
}
// 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.
String currentFolder=extractFolder(cms, ((-1)*level), exact);
if (currentFolder.equals(""))
return "".getBytes();
// 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);
List resources=cms.getSubFolders(currentFolder);
List allFile=cms.getFilesInFolder(currentFolder);
((ArrayList)resources).ensureCapacity(resources.size() + allFile.size());
Iterator e = allFile.iterator();
while (e.hasNext()) {
resources.add(e.next());
}
// 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.<p>
*
* @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 userObject Hashtable with parameters
* @return byte[] with the content of this subelement
* @throws CmsException if something goes wrong
*/
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=1;
String exact="false";
// 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 {
if (tagcontent.indexOf(",")!=-1) {
level=Integer.parseInt(tagcontent.substring(0, tagcontent.indexOf(",")));
exact=tagcontent.substring(tagcontent.indexOf(",")+1).toLowerCase();
} else {
level=Integer.parseInt(tagcontent);
}
} catch (NumberFormatException e) {
level=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -