001/** 002 * Copyright (C) 2014 Universidade de Aveiro, DETI/IEETA, Bioinformatics Group - http://bioinformatics.ua.pt/ 003 * 004 * This file is part of Dicoogle/dicoogle. 005 * 006 * Dicoogle/dicoogle is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation, either version 3 of the License, or 009 * (at your option) any later version. 010 * 011 * Dicoogle/dicoogle is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 014 * GNU General Public License for more details. 015 * 016 * You should have received a copy of the GNU General Public License 017 * along with Dicoogle. If not, see <http://www.gnu.org/licenses/>. 018 */ 019package pt.ua.dicoogle.server.web.servlets.search; 020 021import java.io.IOException; 022import java.util.*; 023import java.util.Map.Entry; 024 025import javax.servlet.ServletException; 026import javax.servlet.http.HttpServlet; 027import javax.servlet.http.HttpServletRequest; 028import javax.servlet.http.HttpServletResponse; 029 030import net.sf.json.JSONArray; 031import org.slf4j.Logger; 032import org.slf4j.LoggerFactory; 033import pt.ua.dicoogle.core.QueryExpressionBuilder; 034import pt.ua.dicoogle.core.query.ExportToCSVQueryTask; 035import pt.ua.dicoogle.plugins.PluginController; 036import pt.ua.dicoogle.sdk.utils.DictionaryAccess; 037 038public class ExportServlet extends HttpServlet{ 039 private static final Logger logger = LoggerFactory.getLogger(ExportServlet.class); 040 041 public enum ExportType{ 042 LIST, EXPORT_CVS; 043 } 044 private ExportType type; 045 046 public ExportServlet(ExportType type) { 047 this.type = type; 048 } 049 @Override 050 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 051 throws ServletException, IOException { 052 switch(type){ 053 case LIST: 054 doGetTagList(req, resp); 055 break; 056 case EXPORT_CVS: 057 doGetExportCvs(req, resp); 058 break; 059 } 060 } 061 062 private void doGetTagList(HttpServletRequest req, HttpServletResponse resp) throws IOException{ 063 HashMap< String, Integer> tagList = DictionaryAccess.getInstance().getTagList(); 064 Iterator iterator = tagList.entrySet().iterator(); 065 066 JSONArray array = new JSONArray(); 067 068 while(iterator.hasNext()) 069 { 070 Map.Entry<String, Integer> entry = (Entry<String, Integer>) iterator.next(); 071 //JSONObject obj = new JSONObject(); 072 //obj.put("key", entry.getKey()); 073 //obj.put("value", entry.getValue()); 074 075 076 array.add(entry.getKey()); 077 } 078 079 resp.getWriter().write(array.toString()); 080 } 081 082 private void doGetExportCvs(HttpServletRequest req, HttpServletResponse resp) throws IOException{ 083 resp.setHeader("Content-disposition","attachment; filename=QueryResultsExport.csv"); 084 String queryString = req.getParameter("query"); 085 String[] fields = req.getParameterValues("fields"); 086 String[] providers = req.getParameterValues("providers"); 087 boolean keyword = Boolean.parseBoolean(req.getParameter("keyword")); 088 089 logger.debug("queryString: {}", queryString); 090 logger.debug("fields: {}", Arrays.asList(fields)); 091 logger.debug("keyword: {}", keyword); 092 093 if(queryString == null) 094 resp.sendError(401, "Query Parameters not found"); 095 096 if(fields == null || fields.length==0) 097 resp.sendError(402, "Fields Parameters not found"); 098 099 if (!keyword) { 100 QueryExpressionBuilder q = new QueryExpressionBuilder(queryString); 101 queryString = q.getQueryString(); 102 } 103 104 105 List<String> fieldList = Arrays.asList(fields); 106 Map<String, String> fieldsMap = new HashMap<>(); 107 for(String f : fields){ 108 fieldsMap.put(f, f); 109 } 110 111 ExportToCSVQueryTask task = new ExportToCSVQueryTask( fieldList, 112 resp.getOutputStream()); 113 114 if(providers == null || providers.length == 0) { 115 PluginController.getInstance().queryAll(task, queryString, fieldsMap); 116 } else { 117 List<String> providersList = Arrays.asList(providers); 118 PluginController.getInstance().query(task, providersList, queryString, 119 fieldsMap); 120 } 121 122 task.await(); 123 } 124 125 126}