builddocstructviewtag.java

来自「Java的框架」· Java 代码 · 共 328 行

JAVA
328
字号
package mcaps.core.docman.webapp.taglib;

import java.util.List;
import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import org.springframework.web.util.ExpressionEvaluationUtils;

import mcap.core.docman.model.FileObject;
import mcap.core.docman.model.FolderObject;

/**
 * Tag for building a document structure view
 *
 * @author Chan Chin Wei
 * @date May 4, 2006
 * @version 1.0.1.0
 */
public class BuildDocStructViewTag extends TagSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6101480289391067419L;
	private String folder;
	private FolderObject folderObj;
	private boolean showFile = false;
	private boolean expandAll = false;
	private String anyOnClickFn;
	private String folderOnClickFn;
	private String fileOnClickFn;
	
	private String cImg = "/images/dm_dsv_collapse.gif";
	private String eImg = "/images/dm_dsv_expand.gif";
	private String foImg = "/images/dm_dsv_folderOpen.gif";
	private String fcImg = "/images/dm_dsv_folderClose.gif";
	
	public void setFolder(Object folder) {
		if (folder instanceof FolderObject)
			this.folderObj = (FolderObject) folder;
		else
			this.folder = (String) folder;
	}
	
	public void setShowFile(String showFile) {
		if (showFile != null && showFile.equalsIgnoreCase("true"))
			this.showFile = true;
	}
	
	public void setExpandAll(boolean expandAll) {
		this.expandAll = expandAll;
	}

	public void setAnyOnClickFn(String anyOnClickFn) {
		this.anyOnClickFn = anyOnClickFn;
	}

	public void setFileOnClickFn(String fileOnClickFn) {
		this.fileOnClickFn = fileOnClickFn;
	}

	public void setFolderOnClickFn(String folderOnClickFn) {
		this.folderOnClickFn = folderOnClickFn;
	}

	/**
	 * Process the start of this tag.
	 * @return
	 * @exception JspException if a JSP exception has occurred
	 * @see javax.servlet.jsp.tagext.Tag#doStartTag()
	 */
	public int doStartTag () throws JspException {
		JspWriter out = pageContext.getOut ();
		//get folder object from EL expressions
		if (folderObj == null && folder != null && !folder.equals("")) {
			folderObj = (FolderObject) ExpressionEvaluationUtils
									.evaluate ("folder", folder, FolderObject.class, pageContext);
			
		}
		
		if (folderObj != null) {
			try  {
				out.println(constructView ());
			}
			catch (java.io.IOException e)  {
				throw new JspException ("Unable to output result.");
			}
		}
		return (SKIP_BODY);
	}
	
	public int doEndTag () {
		release();
		return (SKIP_BODY);
	}
	
	public void release () {
		folder = null;
		folderObj = null;;
		showFile = false;
		expandAll = false;
		anyOnClickFn = null;
		folderOnClickFn = null;
		fileOnClickFn = null;
	}
	
	private StringBuffer constructView () {
		HttpServletRequest req = (HttpServletRequest) pageContext.getRequest(); 
		String contextPath = req.getContextPath();
		ResourceBundle resource = ResourceBundle.getBundle("ApplicationResources", req.getLocale());
		
		//preparing javascript
		StringBuffer buf = new StringBuffer ("<script language=\"JavaScript\">");
		buf.append("\nvar docman_docPathSelected = \"\";");
		buf.append("\nvar docman_docTypeSelected = \"\";");
		buf.append("\nvar docman_elemSelected = \"\";");
		buf.append("\nfunction collapseExpand(idNo) {");
		buf.append("\nvar imgElem = document.getElementById(\"img\" + idNo);");
		buf.append("\nvar imgFElem = document.getElementById(\"imgF\" + idNo);");
		buf.append("\nvar divElem = document.getElementById(\"div\" + idNo);");
		buf.append("\nif (divElem.style.display == \"none\") {");
		buf.append("\nimgElem.src=\"").append(contextPath).append(eImg).append("\";");
		buf.append("\nimgFElem.src=\"").append(contextPath).append(foImg).append("\";");
		buf.append("\ndivElem.style.display='';");
		buf.append("\n}");
		buf.append("\nelse{");
		buf.append("\nimgElem.src=\"").append(contextPath).append(cImg).append("\";");
		buf.append("\nimgFElem.src=\"").append(contextPath).append(fcImg).append("\";");
		buf.append("\ndivElem.style.display=\"none\";");
		buf.append("\n}");
		buf.append("\n}");
		buf.append("\n");
		buf.append("\nfunction docman_hasSelection() {");
		buf.append("\nif (docman_elemSelected == null || docman_elemSelected == '')");
		buf.append("\nreturn false;");
		buf.append("\nreturn true;");
		buf.append("\n}");
		buf.append("\n");
		buf.append("\nfunction docman_getSelected() {");
		buf.append("\nreturn docman_docPathSelected;");
		buf.append("\n}");
		buf.append("\n");
		buf.append("\nfunction docman_getSelectedType() {");
		buf.append("\nreturn docman_docTypeSelected;");
		buf.append("\n}");
		buf.append("\n");
		buf.append("\nfunction docman_anyOnClickFn (idNo) {");
		buf.append("\nvar spanElem = document.getElementById(\"span\" + docman_elemSelected);");
		buf.append("\nif (spanElem != null && spanElem != '')");
		buf.append("\nspanElem.style.backgroundColor='';");
		buf.append("\ndocman_elemSelected = idNo;");
		buf.append("\nspanElem = document.getElementById(\"span\" + idNo);");
		buf.append("\nspanElem.style.backgroundColor='#E1FFFF';");
		buf.append("\n");
		if (anyOnClickFn != null && ! anyOnClickFn.equals(""))
			buf.append("\n").append(anyOnClickFn);
		buf.append("\n}");
		buf.append("\n");
		buf.append("\nfunction docman_folderOnClickFn (idNo) {");
		if (folderOnClickFn != null && ! folderOnClickFn.equals(""))
			buf.append("\n").append(folderOnClickFn);
		buf.append("\ndocman_anyOnClickFn(idNo);");
		buf.append("\ndocman_docTypeSelected = \"Folder\";");
		buf.append("\n}");
		buf.append("\n");
		buf.append("\nfunction docman_fileOnClickFn (idNo) {");
		if (fileOnClickFn != null && ! fileOnClickFn.equals(""))
			buf.append("\n").append(fileOnClickFn);
		buf.append("\ndocman_anyOnClickFn(idNo);");
		buf.append("\ndocman_docTypeSelected = \"File\";");
		buf.append("\n}");
		buf.append("\n");
		buf.append("\nfunction docman_highlightFile (path) {");
		buf.append("\nvar pathId = document.getElementById (\"dFP_\" + path);");
		buf.append("\nif (pathId != null) {");
		buf.append("\nidNo=pathId.value;");
		buf.append("\ndocman_anyOnClickFn(idNo);");
		buf.append("\nvar divPId = document.getElementById (\"PF_\" + path);");
		buf.append("\nwhile (divPId != null) {");
		buf.append("\nvar pIdNo=divPId.value;");
		buf.append("\nvar imgElem = document.getElementById(\"img\" + pIdNo);");
		buf.append("\nvar imgFElem = document.getElementById(\"imgF\" + pIdNo);");
		buf.append("\nvar divElem = document.getElementById(\"div\" + pIdNo);");
		buf.append("\nif (divElem.style.display == \"none\") {");
		buf.append("\nimgElem.src=\"").append(contextPath).append(eImg).append("\";");
		buf.append("\nimgFElem.src=\"").append(contextPath).append(foImg).append("\";");
		buf.append("\ndivElem.style.display='';");
		buf.append("\n}");
		buf.append("\ndivPId = document.getElementById (\"PF_\" + pIdNo);");
		buf.append("\n}");
		buf.append("\n}");
		buf.append("\nelse");
		buf.append("\nalert (\"Unable to locate the file.\");");
		buf.append("\n}");
		buf.append("\n");
		buf.append("\n</script>");
		
		//printing root folder.
		buf.append("\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\" width=\"100%\" align=\"center\">");
		buf.append("\n<tr>");
		buf.append("\n<td align=\"left\">");
		buf.append("\n<img id=\"imgRoot\" src=\"").append(contextPath);
		if (expandAll)
			buf.append(eImg);
		else
			buf.append(cImg);
		buf.append("\" onClick=\"javascript:collapseExpand('Root')\">");
		buf.append("\n<span id=\"spanRoot\" onClick=\"javascript:docman_docPathSelected='").append(folderObj.getFolderPath());
		buf.append("';docman_folderOnClickFn('Root');\" style=\"cursor:hand\">");
		buf.append("<img id=\"imgFRoot\" src=\"").append(contextPath);
		if (expandAll)
			buf.append(foImg);
		else
			buf.append(fcImg);
		buf.append("\">root</span>");
		buf.append("\n<div id=\"divRoot\"");
		if (!expandAll)
			buf.append(" style=\"display:none\"");
		buf.append(">");
		
		//printing subfolder(s)
		genFolderContents (buf, folderObj, contextPath, resource, "Root", 1);
		
		buf.append("\n</div>");
		buf.append("\n</td>");
		buf.append("\n</tr>");
		
		buf.append("</table>");
		
		return buf;
	}
	
	private void genFolderContents (StringBuffer buf, FolderObject folderObj, String contextPath, ResourceBundle resource, String parentId, int level) {
		List folderList = folderObj.getFolderList();
		buf.append("\n<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\" width=\"100%\" align=\"center\">");
		if (folderList != null) {
			for (int i = 0; i < folderList.size(); i++) {
				String thisFolderId = "L" + parentId + level + "N" + i;
				FolderObject subFolder = (FolderObject) folderList.get(i);
				buf.append("\n<tr>");
				buf.append("\n<td align=\"left\">");
				genSpaces (buf, level);
				buf.append("\n<img id=\"img").append(thisFolderId);
				buf.append("\" src=\"").append(contextPath);
				if (expandAll)
					buf.append(eImg);
				else
					buf.append(cImg);
				buf.append("\" onClick=\"javascript:collapseExpand('");
				buf.append(thisFolderId).append("')\">");
				buf.append("\n<span id=\"span").append(thisFolderId);
				buf.append("\" onClick=\"javascript:docman_docPathSelected='").append(subFolder.getFolderPath());
				buf.append("';docman_folderOnClickFn('").append(thisFolderId);
				buf.append("');\" style=\"cursor:hand\">");
				buf.append("<img id=\"imgF").append(thisFolderId);
				buf.append("\" src=\"").append(contextPath);
				if (expandAll)
					buf.append(foImg);
				else
					buf.append(fcImg);
				buf.append("\">").append(subFolder.getName());
				//for jameleon test tools
				buf.append("<span id=\"").append(subFolder.getFolderPath().replaceAll("/", "_")).append("\">").append("</span>");
				buf.append("</span>");
				buf.append("\n<div id=\"div").append(thisFolderId);
				buf.append("\"");
				if (!expandAll)
					buf.append(" style=\"display:none\"");
				buf.append(">");
				buf.append("\n<input type=\"hidden\" id=\"PF_").append(thisFolderId);
				buf.append("\" value=\"").append(parentId).append("\">");
				
				//printing subfolder(s)
				genFolderContents (buf, subFolder, contextPath, resource, thisFolderId, level+1);
				buf.append("\n</div>");
				buf.append("\n</td>");
				buf.append("\n</tr>");
				
			}
		}
		//printing file(s)
		if (showFile)
			genFiles (buf, folderObj.getFileList(), contextPath, resource, parentId, level);
		
		buf.append("</table>");
	}

	private void genFiles (StringBuffer buf, List fileList, String contextPath, ResourceBundle resource, String parentId, int level) {
		if (fileList != null) {
			for (int i = 0; i < fileList.size(); i++) {
				FileObject file = (FileObject) fileList.get(i);
				buf.append("\n<tr>");
				buf.append("\n<td align=\"left\">");
				genSpaces (buf, level);
				buf.append("&nbsp;&nbsp;&nbsp;&nbsp;");
				String thisFileId = "L" + parentId + level + "F" + i;
				buf.append("\n<span id=\"span").append(thisFileId);
				buf.append("\" onClick=\"javascript:docman_docPathSelected='").append(file.getFilePath());
				buf.append("';docman_fileOnClickFn('").append(thisFileId);
				buf.append("');\" style=\"cursor:hand\">");
				buf.append("<img src=\"").append(contextPath);
				buf.append("/images/").append(resource.getString(file.getType()));
				buf.append("\">").append(file.getName());
				//for jameleon test tools
				buf.append("<span id=\"").append(file.getFilePath().replaceAll("/", "_")).append("\">").append("</span>");
				buf.append("</span>");
				buf.append("\n<input type=\"hidden\" id=\"dFP_").append(file.getFilePath());
				buf.append("\" value=\"").append(thisFileId).append("\">");
				buf.append("\n<input type=\"hidden\" id=\"PF_").append(file.getFilePath());
				buf.append("\" value=\"").append(parentId).append("\">");
				buf.append("\n</td>");
				buf.append("\n</tr>");
			}
		}
	}
	
	private void genSpaces (StringBuffer buf, int level) {
		for (int i = 0; i < (level * 5); i++) {
			buf.append("&nbsp;");
		}
	}

}

⌨️ 快捷键说明

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