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.Attach; 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.ParamUtils; import com.agilecontrol.nea.util.Attachment; import com.agilecontrol.nea.util.NDSException; import com.agilecontrol.nea.util.Tools; import java.io.File; import java.io.FileInputStream; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SWF extends Attach { private static final String NO_ATTACH = "
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"); 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); boolean isObjectExists = this.objectExists(table, objectId, userWeb); if(isObjectExists) { if(!userWeb.hasObjectPermission(table.getName(), objectId, 1) && !this.hasExtendReadPermission(table, objectId, userWeb)) { throw new NDSException("@no-permission@"); } } else if((userWeb.getPermission(table.getSecurityDirectory()) & 1) != 1) { throw new NDSException("@no-permission@"); } AttachmentManager attm = (AttachmentManager)WebUtils.getServletContextManager().getActor("nea.web.AttachmentManager"); Attachment att = attm.getAttachmentInfo(userWeb.getClientDomain() + "/" + AttachmentManager.getSchemaPath(userWeb.getDataSource()) + table.getRealTableName() + "/" + col.getName(), objectId + "", version); if(att == null) { PrintWriter writer1 = response.getWriter(); writer1.print("
File not found!"); writer1.close(); } else { File writer = new File(attm.getAttachmentFile(att).getAbsolutePath() + ".swf"); String ct = Tools.getContentType("swf", "application/octetstream"); response.setContentType(ct + "; charset=GBK"); response.setContentLength((int)writer.length()); response.setHeader("Content-Disposition", "inline;" + WebUtils.getContentDispositionFileName(att.getOrigFileName() + ".swf", request)); FileInputStream is = new FileInputStream(writer); 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(); } } } }