/** {@inheritDoc} */ @Override public ActionForward execute( @SuppressWarnings("unused") ActionMapping mapping, @SuppressWarnings("unused") ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(); final InterMineAPI im = SessionMethods.getInterMineAPI(session); ObjectStore os = im.getObjectStore(); WebConfig webConfig = SessionMethods.getWebConfig(request); Integer objectId = new Integer(request.getParameter("object")); String fieldName = request.getParameter("field"); String fileType = request.getParameter("type"); InterMineObject object = os.getObjectById(objectId); FieldExporter fieldExporter = null; Set classes = DynamicUtil.decomposeClass(object.getClass()); Iterator classIter = classes.iterator(); while (classIter.hasNext()) { Class c = (Class) classIter.next(); Type thisTypeConfig = webConfig.getTypes().get(c.getName()); FieldConfig fc = thisTypeConfig.getFieldConfigMap().get(fieldName); if (fc != null) { String fieldExporterClassName = fc.getFieldExporter(); if (fieldExporterClassName != null) { fieldExporter = (FieldExporter) Class.forName(fieldExporterClassName).newInstance(); break; } } } if (fieldExporter == null) { Object fieldValue = object.getFieldValue(fieldName); if (fileType == null || fileType.length() == 0) { response.setContentType("text/plain; charset=UTF-8"); response.setHeader("Content-Disposition ", "inline; filename=" + fieldName + ".txt"); } else { response.setContentType("text/" + fileType); response.setHeader( "Content-Disposition ", "inline; filename=" + fieldName + "." + fileType); } PrintStream out = new PrintStream(response.getOutputStream()); if (fieldValue instanceof ClobAccess) { ((ClobAccess) fieldValue).drainToPrintStream(out); } else { out.print(fieldValue); } out.flush(); } else { fieldExporter.exportField(object, fieldName, os, response); } return null; }
/** {@inheritDoc} */ @Override public ActionForward execute( ComponentContext context, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { HttpSession session = request.getSession(); final InterMineAPI im = SessionMethods.getInterMineAPI(session); InterMineBag imBag = (InterMineBag) request.getAttribute("bag"); WebConfig webConfig = SessionMethods.getWebConfig(request); Model model = im.getModel(); TemplateManager templateManager = im.getTemplateManager(); Map<Class, ApiTemplate> conversionTypesMap = TypeConverter.getConversionTemplates( templateManager.getConversionTemplates(), TypeUtil.instantiate(model.getPackageName() + "." + imBag.getType())); ArrayList<String> conversionTypes = new ArrayList<String>(); Map<Type, Boolean> fastaMap = new HashMap<Type, Boolean>(); for (Class<?> clazz : conversionTypesMap.keySet()) { conversionTypes.add(TypeUtil.unqualifiedName(clazz.getName())); Type type = webConfig.getTypes().get(clazz.getName()); FieldConfig fieldConfig = type.getFieldConfigMap().get("length"); if (fieldConfig != null && fieldConfig.getDisplayer() != null) { fastaMap.put(type, Boolean.TRUE); } else { fastaMap.put(type, Boolean.FALSE); } } // Use custom converters BagQueryConfig bagQueryConfig = im.getBagQueryConfig(); String bagType = imBag.getType(); Set<AdditionalConverter> additionalConverters = bagQueryConfig.getAdditionalConverters(bagType); request.setAttribute("customConverters", additionalConverters); request.setAttribute("conversionTypes", conversionTypes); request.setAttribute("fastaMap", fastaMap); return null; }