package com.agilecontrol.nea.core.control.web.binhandler; import com.agilecontrol.nea.core.control.web.AttachmentManager; import com.agilecontrol.nea.core.control.web.UserWebImpl; import com.agilecontrol.nea.core.control.web.WebUtils; import com.agilecontrol.nea.core.control.web.binhandler.BinaryHandler; import com.agilecontrol.nea.core.schema.Column; import com.agilecontrol.nea.core.schema.Table; import com.agilecontrol.nea.core.schema.TableManager; import com.agilecontrol.nea.core.util.ConfigValues; import com.agilecontrol.nea.core.util.ParamUtils; import com.agilecontrol.nea.util.Attachment; import com.agilecontrol.nea.util.Tools; import com.agilecontrol.nea.util.Validator; import java.io.InputStream; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Attach2 implements BinaryHandler { private static final String NO_ATTACH = "Attachment

File not found!"; public void init(ServletContext context) { } public void process(HttpServletRequest request, HttpServletResponse response) throws Exception { UserWebImpl userWeb = null; userWeb = (UserWebImpl)WebUtils.getSessionContextManager(request.getSession(true)).getActor("nea.web.authorization"); String schema = ParamUtils.getAttributeOrParameter(request, "schemaName"); if(Validator.isNull(schema)) { schema = ParamUtils.getAttributeOrParameter(request, "schema"); } if(schema != null) { if(ConfigValues.get("portal.attach.lowercase", false)) { schema = schema.toLowerCase(); } userWeb.setDataSource(schema); } TableManager tableManager = TableManager.getInstance(); int tableId = ParamUtils.getIntAttributeOrParameter(request, "table", -1); int columnId = ParamUtils.getIntAttributeOrParameter(request, "column", -1); int objectId = ParamUtils.getIntAttributeOrParameter(request, "objectid", -1); int version = ParamUtils.getIntAttributeOrParameter(request, "version", -1); if(tableId == -1) { throw new IllegalArgumentException("object type not set"); } else { Table table = tableManager.getTable(tableId); Column col = tableManager.getColumn(columnId); AttachmentManager attm = (AttachmentManager)WebUtils.getServletContextManager().getActor("nea.web.AttachmentManager"); Attachment att = attm.getAttachmentInfo("burgeon/" + AttachmentManager.getSchemaPath(userWeb.getDataSource()) + table.getRealTableName() + "/" + col.getName(), objectId + "", version); if(att == null) { PrintWriter writer1 = response.getWriter(); writer1.print("Attachment

File not found!"); writer1.close(); } else { String writer = table.getName() + "_" + tableManager.getColumn(columnId).getName() + "_" + objectId + "_" + att.getVersion() + "." + att.getExtension(); String ct = Tools.getContentType(att.getExtension(), "application/octetstream"); response.setContentType(ct + "; charset=GBK"); response.setContentLength((int)att.getSize()); response.setHeader("Content-Disposition", "inline;filename=\"" + writer + "\""); InputStream is = attm.getAttachmentData(att); ServletOutputStream os = response.getOutputStream(); byte[] b = new byte[8192]; int bInt; while((bInt = is.read(b, 0, b.length)) != -1) { os.write(b, 0, bInt); } is.close(); os.flush(); os.close(); } } } }