Changeset 16264

Show
Ignore:
Timestamp:
18/07/08 16:58:44 (1 month ago)
Author:
kmr
Message:

Initial code to improve exporting. Refs #1673.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • tickets/ticket-1673/bio/network/webapp/src/org/intermine/bio/web/ProteinInteractionExporter.java

    r15326 r16264  
    1919 * @author Richard Smith 
    2020 */ 
    21 import java.io.PrintWriter
     21import java.util.ArrayList
    2222import java.util.Collection; 
    2323import java.util.Collections; 
     
    2626import java.util.Set; 
    2727 
    28 import javax.servlet.http.HttpServletRequest; 
    29 import javax.servlet.http.HttpServletResponse; 
    30  
    31 import org.flymine.model.genomic.ProteinInteraction; 
    3228import org.intermine.bio.networkview.FlyNetworkCreator; 
    3329import org.intermine.bio.networkview.network.FlyNetwork; 
    3430import org.intermine.model.InterMineObject; 
    3531import org.intermine.objectstore.ObjectStoreException; 
     32import org.intermine.path.Path; 
    3633import org.intermine.util.StringUtil; 
    3734import org.intermine.web.logic.export.ExportException; 
     
    4239import org.intermine.web.logic.results.ResultElement; 
    4340import org.intermine.web.logic.results.WebTable; 
     41import org.intermine.web.struts.TableExportForm; 
     42 
     43import org.flymine.model.genomic.ProteinInteraction; 
     44 
     45import java.io.PrintWriter; 
     46 
     47import javax.servlet.http.HttpServletRequest; 
     48import javax.servlet.http.HttpServletResponse; 
    4449 
    4550/** 
     
    6065     * @param response The HTTP response we are creating 
    6166     */ 
    62     public void export(PagedTable pt, HttpServletRequest request, HttpServletResponse response) { 
     67    public void export(PagedTable pt, HttpServletRequest request, HttpServletResponse response, 
     68                       TableExportForm form) { 
    6369 
    6470        response.setContentType("text/plain"); 
     
    128134 
    129135    /** 
     136     * For ProteinInteractionExporter we always return an empty list because all columns and classes are 
     137     * equal for this exporter. 
     138     * {@inheritDoc} 
     139     */ 
     140    public List<Path> getExportClassPaths(@SuppressWarnings("unused") PagedTable pt) { 
     141        return new ArrayList<Path>(); 
     142    } 
     143 
     144    /** 
     145     * The intial export path list is just the paths from the columns of the PagedTable. 
     146     * {@inheritDoc} 
     147     */ 
     148    public List<Path> getInitialExportPaths(PagedTable pt) { 
     149        return ExportHelper.getColumnPaths(pt); 
     150    } 
     151 
     152    /** 
    130153     * {@inheritDoc} 
    131154     * @param pt the PagedTable containing the results 
  • tickets/ticket-1673/bio/tutorial/malariamine/webapp/resources/struts-config-model.xml

    r13670 r16264  
    11<!-- this comment is here to prevent ant from setting model.struts.config to null --> 
    22 
     3<!-- used by the fasta... buttons on object details pages --> 
    34    <action path="/sequenceExporter" 
    45            type="org.intermine.bio.web.export.SequenceExporter"/> 
  • tickets/ticket-1673/bio/webapp/src/org/intermine/bio/web/export/GFF3HttpExporter.java

    r16254 r16264  
    1111 */ 
    1212 
    13 import java.io.InputStream; 
    14 import java.io.PrintWriter; 
     13import java.util.ArrayList; 
    1514import java.util.List; 
    1615import java.util.Map; 
    1716import java.util.Properties; 
    1817 
    19 import javax.servlet.ServletContext; 
    20 import javax.servlet.ServletException; 
    21 import javax.servlet.http.HttpServletRequest; 
    22 import javax.servlet.http.HttpServletResponse; 
    23 import javax.servlet.http.HttpSession; 
    24  
    25 import org.flymine.model.genomic.LocatedSequenceFeature; 
     18import org.intermine.path.Path; 
    2619import org.intermine.util.StringUtil; 
    2720import org.intermine.web.logic.export.ExportException; 
     
    3225import org.intermine.web.logic.export.http.TableHttpExporter; 
    3326import org.intermine.web.logic.results.PagedTable; 
     27import org.intermine.web.struts.TableExportForm; 
     28 
     29import org.flymine.model.genomic.LocatedSequenceFeature; 
     30 
     31import java.io.InputStream; 
     32import java.io.PrintWriter; 
     33 
     34import javax.servlet.ServletContext; 
     35import javax.servlet.ServletException; 
     36import javax.servlet.http.HttpServletRequest; 
     37import javax.servlet.http.HttpServletResponse; 
     38import javax.servlet.http.HttpSession; 
    3439 
    3540/** 
     
    5156     * there is exactly one LocatedSequenceFeature column and the other columns (if any), are simple 
    5257     * attributes (rather than objects). 
    53      * @param pt PagedTable 
    54      * @param request The HTTP request we are processing 
    55      * @param response The HTTP response we are creating 
     58     * {@inheritDoc} 
    5659     */ 
    57     public void export(PagedTable pt, HttpServletRequest request, 
    58                                 HttpServletResponse response) { 
     60    public void export(PagedTable pt, HttpServletRequest request, HttpServletResponse response, 
     61                       TableExportForm form) { 
    5962        HttpSession session = request.getSession(); 
    6063        ServletContext servletContext = session.getServletContext(); 
     
    8285    private void setGFF3Header(HttpServletResponse response) { 
    8386        ResponseUtil.setPlainTextHeader(response, "table" + StringUtil.uniqueString() + ".gff3"); 
     87    } 
     88 
     89    /** 
     90     * The intial export path list is just the paths from the columns of the PagedTable. 
     91     * {@inheritDoc} 
     92     */ 
     93    public List<Path> getInitialExportPaths(PagedTable pt) { 
     94        return ExportHelper.getColumnPaths(pt); 
    8495    } 
    8596 
     
    116127        return GFF3Exporter.canExportStatic(ExportHelper.getColumnClasses(pt)); 
    117128    } 
     129 
     130    /** 
     131     * {@inheritDoc} 
     132     */ 
     133    public List<Path> getExportClassPaths(@SuppressWarnings("unused") PagedTable pt) { 
     134        return new ArrayList<Path>(); 
     135    } 
    118136} 
  • tickets/ticket-1673/bio/webapp/src/org/intermine/bio/web/export/SequenceExporter.java

    r16254 r16264  
    2020import org.intermine.model.InterMineObject; 
    2121import org.intermine.objectstore.ObjectStore; 
     22import org.intermine.path.Path; 
    2223import org.intermine.util.IntPresentSet; 
    2324import org.intermine.util.TypeUtil; 
     
    2627import org.intermine.web.logic.export.Exporter; 
    2728import org.intermine.web.logic.results.Column; 
     29import org.intermine.web.logic.results.PagedTable; 
    2830import org.intermine.web.logic.results.ResultElement; 
    2931 
  • tickets/ticket-1673/bio/webapp/src/org/intermine/bio/web/export/SequenceHttpExporter.java

    r16254 r16264  
    1111 */ 
    1212 
    13 import java.io.IOException; 
    14 import java.io.OutputStream; 
     13import java.util.ArrayList; 
    1514import java.util.List; 
    1615 
    17 import javax.servlet.http.HttpServletRequest; 
    18 import javax.servlet.http.HttpServletResponse; 
    19 import javax.servlet.http.HttpSession; 
    20  
    21 import org.flymine.model.genomic.LocatedSequenceFeature; 
    22 import org.flymine.model.genomic.Protein; 
    23 import org.flymine.model.genomic.Sequence; 
    24 import org.flymine.model.genomic.Translation; 
     16import org.intermine.metadata.Model; 
    2517import org.intermine.objectstore.ObjectStore; 
     18import org.intermine.path.Path; 
    2619import org.intermine.util.StringUtil; 
    2720import org.intermine.web.logic.Constants; 
     
    3124import org.intermine.web.logic.export.http.TableHttpExporter; 
    3225import org.intermine.web.logic.results.PagedTable; 
     26import org.intermine.web.struts.TableExportForm; 
     27 
     28import org.flymine.model.genomic.LocatedSequenceFeature; 
     29import org.flymine.model.genomic.Protein; 
     30import org.flymine.model.genomic.Sequence; 
     31import org.flymine.model.genomic.Translation; 
     32 
     33import java.io.IOException; 
     34import java.io.OutputStream; 
     35 
     36import javax.servlet.ServletContext; 
     37import javax.servlet.http.HttpServletRequest; 
     38import javax.servlet.http.HttpServletResponse; 
     39import javax.servlet.http.HttpSession; 
    3340 
    3441/** 
     
    4047public class SequenceHttpExporter implements TableHttpExporter 
    4148{ 
    42  
    4349    /** 
    4450     * Set response proper header. 
     
    5561     * @param response The HTTP response we are creating 
    5662     */ 
    57     public void export(PagedTable pt, HttpServletRequest request, 
    58                                 HttpServletResponse response) { 
     63    public void export(PagedTable pt, HttpServletRequest request, HttpServletResponse response, 
     64                       TableExportForm form) { 
    5965 
    6066        HttpSession session = request.getSession(); 
    61         ObjectStore os = 
    62             (ObjectStore) session.getServletContext().getAttribute(Constants.OBJECTSTORE); 
     67        ServletContext servletContext = session.getServletContext(); 
     68        ObjectStore os = (ObjectStore) servletContext.getAttribute(Constants.OBJECTSTORE); 
    6369        setSequenceExportHeader(response); 
    6470 
     
    7379        int realFeatureIndex = getFeatureColumnIndex(pt); 
    7480 
    75         SequenceExporter exporter = new SequenceExporter(os, outputStream, 
    76                 realFeatureIndex); 
     81        SequenceExporter exporter = new SequenceExporter(os, outputStream, realFeatureIndex); 
    7782 
    7883        exporter.export(pt.getRearrangedResults(), pt.getColumns()); 
     
    8287    } 
    8388 
     89    /** 
     90     * The intial export path list is just the paths from the columns of the PagedTable with 
     91     * chromosomeLocation added (if appropriate) 
     92     * {@inheritDoc} 
     93     */ 
     94    public List<Path> getInitialExportPaths(PagedTable pt) { 
     95        List<Path> paths = new ArrayList<Path>(ExportHelper.getColumnPaths(pt)); 
    8496 
     97        // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx 
     98 
     99        // XXX TODO FIXME 
     100 
     101        // the Path we need is the parent of one of the paths in the columns 
     102        paths.add(new Path(Model.getInstanceByName("genomic"), "Gene.chromosomeLocation")); 
     103        return paths; 
     104    } 
     105 
     106    /** 
     107     * Return the first column that contains Sequence objects or features that have a sequence 
     108     * reference. 
     109     */ 
    85110    private int getFeatureColumnIndex(PagedTable pt) { 
    86111        List<Class> clazzes = ExportHelper.getColumnClasses(pt); 
     
    102127        return SequenceExporter.canExportStatic(ExportHelper.getColumnClasses(pt)); 
    103128    } 
     129 
     130    /** 
     131     * {@inheritDoc} 
     132     */ 
     133    public List<Path> getExportClassPaths(@SuppressWarnings("unused") PagedTable pt) { 
     134        return new ArrayList<Path>(); 
     135    } 
    104136} 
  • tickets/ticket-1673/bio/webapp/src/org/intermine/bio/web/struts/SequenceExportAction.java

    r15759 r16264  
    103103        } 
    104104        Annotation annotation = bioSequence.getAnnotation(); 
     105        // try hard to find an identifier 
    105106        String identifier = bioEntity.getPrimaryIdentifier(); 
    106107        if (identifier == null) { 
    107             identifier = bioEntity.getName(); 
     108            identifier = bioEntity.getSecondaryIdentifier(); 
    108109            if (identifier == null) { 
    109                 if (bioEntity instanceof Gene) { 
    110                     Gene gene = ((Gene) bioEntity); 
    111                     identifier = gene.getPrimaryIdentifier(); 
     110                identifier = bioEntity.getName(); 
     111                if (identifier == null) { 
     112                    try { 
     113                        identifier = (String) TypeUtil.getFieldValue(bioEntity, "primaryAccession"); 
     114                    } catch (RuntimeException e) { 
     115                        // ignore 
     116                    } 
    112117                    if (identifier == null) { 
    113                         try { 
    114                             identifier = (String) TypeUtil.getFieldValue(gene, "accession"); 
    115                         } catch (RuntimeException e) { 
    116                             // ignore 
    117                         } 
    118                         if (identifier == null) { 
    119                             identifier = "[no_identifier]"; 
    120                         } 
     118                        identifier = "[no_identifier]"; 
    121119                    } 
    122120                } 
  • tickets/ticket-1673/flymine/webapp/build.xml

    r14486 r16264  
    3232    </replace> 
    3333 
     34    <loadfile property="model.struts.form.config"  
     35              srcFile="./resources/struts-config-form-model.xml"/> 
     36 
     37    <replace file="${build.dir}/webapp/WEB-INF/struts-config.xml" 
     38             value="${model.struts.form.config}"> 
     39      <!-- can't use normal token as xml must be parseable before this replacement --> 
     40      <replacetoken><![CDATA[<!--@MODEL_FORM_INCLUDE@-->]]></replacetoken> 
     41    </replace> 
     42 
    3443    <loadfile property="model.tiles.defs" srcFile="./resources/tiles-defs-model.xml"/> 
    3544 
  • tickets/ticket-1673/flymine/webapp/resources/struts-config-model.xml

    r16060 r16264  
    11<!-- this comment is here to prevent ant from setting model.struts.config to null --> 
    22 
     3<!-- used by the fasta... buttons on object details pages --> 
    34<action path="/sequenceExporter" 
    4         type="org.intermine.bio.web.struts.SequenceExportAction"/> 
     5   type="org.intermine.bio.web.struts.SequenceExportAction" /> 
    56 
    67<action path="/chartRenderer" 
     
    2223        type="org.intermine.bio.web.AttributeLinkDisplayerController"/> 
    2324 
     25<action path="/sequenceExportAction" name="tabExportForm" 
     26        type="org.intermine.web.struts.TableExportAction" parameter="method"/> 
     27 
     28<action path="/gff3ExportAction" name="gff3ExportForm" 
     29        type="org.intermine.web.struts.TableExportAction" parameter="method"/> 
  • tickets/ticket-1673/flymine/webapp/resources/webapp/WEB-INF/webconfig-model.xml

    r16253 r16264  
    759759  </class> 
    760760 
    761   <tableExportConfig id="sequenceExporter" actionPath="/exportAction?type=sequenceExporter" 
     761  <tableExportConfig id="sequence"  
    762762                     className="org.intermine.bio.web.export.SequenceHttpExporter"/> 
    763   <tableExportConfig id="gff3Exporter" actionPath="/exportAction?type=gff3Exporter" 
     763  <tableExportConfig id="gff3"  
    764764                     className="org.intermine.bio.web.export.GFF3HttpExporter"/> 
    765   <tableExportConfig id="proteinInteractionExporter" actionPath="/exportAction?type=proteinInteractionExporter
     765  <tableExportConfig id="proteinInteraction
    766766                     className="org.intermine.bio.web.ProteinInteractionExporter"/> 
    767767 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/logic/config/TableExportConfig.java

    r14641 r16264  
    1919public class TableExportConfig 
    2020{ 
    21     String id, actionPath, className; 
     21    String id, className; 
    2222 
    2323    /** 
     
    3838 
    3939    /** 
    40      * Get the actionPath 
    41      * @return the actionPath 
    42      */ 
    43     public String getActionPath() { 
    44         return actionPath; 
    45     } 
    46  
    47     /** 
    48      * Set the actionPath of this TableExportConfig 
    49      * @param actionPath the new actionPath 
    50      */ 
    51     public void setActionPath(String actionPath) { 
    52         this.actionPath = actionPath; 
    53     } 
    54  
    55     /** 
    56      * Get the className 
     40     * Get the class name of the exporter eg. org.intermine.bio.web.export.SequenceHttpExporter 
    5741     * @return the className 
    5842     */ 
     
    7862        if (obj instanceof TableExportConfig) { 
    7963            TableExportConfig exporterObj = (TableExportConfig) obj; 
    80             return exporterObj.id.equals(id) && exporterObj.actionPath.equals(actionPath) 
     64            return exporterObj.id.equals(id) 
    8165                && exporterObj.className.equals(className); 
    8266        } else { 
     
    9175     */ 
    9276    public int hashCode() { 
    93         return id.hashCode() * 5 + actionPath.hashCode() + 3 * className.hashCode(); 
     77        return id.hashCode() * 5 + 3 * className.hashCode(); 
    9478    } 
    9579 
     
    9882     */ 
    9983    public String toString() { 
    100         return "<tableExportConfig id=\"" + id + "\" actionPath=\"" + actionPath 
     84        return "<tableExportConfig id=\"" + id 
    10185            + "\" className=\"" + className + "\"/>"; 
    10286    } 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/logic/config/WebConfig.java

    r16259 r16264  
    121121        digester.addObjectCreate("webconfig/tableExportConfig", TableExportConfig.class); 
    122122        digester.addSetProperties("webconfig/tableExportConfig", "id", "id"); 
    123         digester.addSetProperties("webconfig/tableExportConfig", "actionPath", "actionPath"); 
    124123        digester.addSetProperties("webconfig/tableExportConfig", "className", "className"); 
    125124 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/logic/export/ExportHelper.java

    r15326 r16264  
    1313import java.util.List; 
    1414 
     15import org.intermine.path.Path; 
    1516import org.intermine.web.logic.results.Column; 
    1617import org.intermine.web.logic.results.PagedTable; 
     
    4849        return -1; 
    4950    } 
    50      
     51 
    5152    /** 
    5253     * @param clazzes classes 
     
    9394        return getClassIndex(getColumnClasses(pt), cls); 
    9495    } 
    95      
     96 
     97    /** 
     98     * Return a List containing the Path objects from the Columns of this PagedTable. 
     99     * @param pt the paged table 
     100     * @return the Paths 
     101     */ 
     102    public static List<Path> getColumnPaths(PagedTable pt) { 
     103        List<Path> paths = new ArrayList<Path>(); 
     104        for (Column col: pt.getColumns()) { 
     105            paths.add(col.getPath()); 
     106        } 
     107        return paths; 
     108    } 
     109 
    96110} 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/logic/export/ExporterImpl.java

    r16254 r16264  
    6464     * Exports results. 
    6565     * @param results results to be exported 
     66     * @param columns the columns descriptions 
    6667     */ 
    6768    public void export(List<List<ResultElement>> results, List<Column> columns) { 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/logic/export/http/ExcelHttpExporter.java

    r15692 r16264  
    1111 */ 
    1212 
    13 import java.io.OutputStream; 
    14  
    15 import javax.servlet.http.HttpServletRequest; 
    16 import javax.servlet.http.HttpServletResponse; 
    17  
    1813import org.intermine.web.logic.WebUtil; 
    1914import org.intermine.web.logic.export.ExcelExporter; 
     
    2217import org.intermine.web.logic.export.ResponseUtil; 
    2318import org.intermine.web.logic.results.PagedTable; 
     19import org.intermine.web.struts.TableExportForm; 
     20 
     21import java.io.OutputStream; 
     22 
     23import javax.servlet.http.HttpServletRequest; 
     24import javax.servlet.http.HttpServletResponse; 
    2425 
    2526 
     
    3031public class ExcelHttpExporter extends HttpExporterBase implements TableHttpExporter 
    3132{ 
    32  
    33     /** 
    34      * Constructor. 
    35      */ 
    36     public ExcelHttpExporter() { } 
    37  
    3833    /** 
    3934     * {@inheritDoc} 
    4035     */ 
    4136    @Override 
    42     public void export(PagedTable pt, HttpServletRequest request, HttpServletResponse response) { 
     37    public void export(PagedTable pt, HttpServletRequest request, HttpServletResponse response, 
     38                       TableExportForm form) { 
    4339        int defaultMax = 10000; 
    4440 
     
    5450                    + maxExcelSize + " rows."); 
    5551        } 
    56         super.export(pt, request, response); 
     52        super.export(pt, request, response, form); 
    5753    } 
    5854 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/logic/export/http/HttpExporterBase.java

    r16254 r16264  
    1111 */ 
    1212 
     13import java.util.ArrayList; 
     14import java.util.List; 
     15 
     16import org.intermine.path.Path; 
     17import org.intermine.web.logic.RequestUtil; 
     18import org.intermine.web.logic.export.ExportException; 
     19import org.intermine.web.logic.export.ExportHelper; 
     20import org.intermine.web.logic.export.Exporter; 
     21import org.intermine.web.logic.results.PagedTable; 
     22import org.intermine.web.logic.results.ResultElement; 
     23import org.intermine.web.struts.TableExportForm; 
     24 
    1325import java.io.IOException; 
    1426import java.io.OutputStream; 
    15 import java.util.List; 
    1627 
    1728import javax.servlet.http.HttpServletRequest; 
    1829import javax.servlet.http.HttpServletResponse; 
    1930 
    20 import org.intermine.web.logic.RequestUtil; 
    21 import org.intermine.web.logic.export.ExportException; 
    22 import org.intermine.web.logic.export.Exporter; 
    23 import org.intermine.web.logic.results.PagedTable; 
    24 import org.intermine.web.logic.results.ResultElement; 
     31import org.jfree.data.xy.TableXYDataset; 
    2532 
    2633 
     
    5562     */ 
    5663    public void export(PagedTable pt, HttpServletRequest request, 
    57             HttpServletResponse response) { 
     64                       HttpServletResponse response, TableExportForm form) { 
    5865 
    5966        List<List<ResultElement>> results = pt.getRearrangedResults(); 
     
    8087 
    8188    /** 
     89     * For TableHttpExporter we always return an empty list because all columns and classes are 
     90     * equal for this exporter. 
     91     * {@inheritDoc} 
     92     */ 
     93    public List<Path> getExportClassPaths(@SuppressWarnings("unused") PagedTable pt) { 
     94        return new ArrayList<Path>(); 
     95    } 
     96 
     97    /** 
     98     * The intial export path list is just the paths from the columns of the PagedTable. 
     99     * {@inheritDoc} 
     100     */ 
     101    public List<Path> getInitialExportPaths(PagedTable pt) { 
     102        return ExportHelper.getColumnPaths(pt); 
     103    } 
     104 
     105    /** 
    82106     * @param out output stream 
    83107     * @param separator line separator 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/logic/export/http/TableHttpExporter.java

    r14800 r16264  
    1111 */ 
    1212 
     13import java.util.List; 
     14 
     15import org.intermine.path.Path; 
     16import org.intermine.web.logic.results.PagedTable; 
     17import org.intermine.web.struts.TableExportForm; 
     18 
    1319import javax.servlet.http.HttpServletRequest; 
    1420import javax.servlet.http.HttpServletResponse; 
    1521 
    16 import org.intermine.web.logic.results.PagedTable; 
    17  
    1822/** 
    19  * Implemented by objects that can export PagedTable.  
     23 * Implemented by objects that can export PagedTable. 
    2024 * 
    2125 * @author Kim Rutherford 
     
    2933     * @param request The HTTP request we are processing 
    3034     * @param response The HTTP response we are creating 
     35     * @param form the form containing the columns paths to export 
    3136     */ 
    3237    public void export(PagedTable pt, HttpServletRequest request, 
    33                                 HttpServletResponse response); 
     38                       HttpServletResponse response, TableExportForm form); 
    3439 
    3540    /** 
     
    3944     */ 
    4045    public boolean canExport(PagedTable pt); 
     46 
     47    /** 
     48     * From the columns of the PagedTable, return a List of the Paths that this exporter will treat 
     49     * specially. 
     50     * eg. if the columns are ("Gene.primaryIdentifier", "Gene.secondaryIdentifier", 
     51     * "Gene.proteins.primaryIdentifier") return ("Gene", "Gene.proteins").  This is needed for 
     52     * exporters like SequenceExporter that act on certain classes only (for SequenceExporter, 
     53     * classes that have a sequence reference) 
     54     * @param pt the PagedTable 
     55     * @return the list of possible Paths that can be exported or an empty List if this exporter can 
     56     * only export all columns at once and doesn't treat some classes specially 
     57     */ 
     58    public List<Path> getExportClassPaths(PagedTable pt); 
     59 
     60    /** 
     61     * Return a list of the Paths to show the user as initial export columns or header contents. 
     62     * The List is likely to be based on the columns of the PagedTable plus or minus special cases 
     63     * for this exporter. 
     64     * @param pt the PagedTable 
     65     * @return the Paths 
     66     */ 
     67    public List<Path> getInitialExportPaths(PagedTable pt); 
    4168} 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/struts/ExportController.java

    r14894 r16264  
    1515import java.util.Map; 
    1616 
     17import org.intermine.web.logic.Constants; 
     18import org.intermine.web.logic.config.TableExportConfig; 
     19import org.intermine.web.logic.config.WebConfig; 
     20import org.intermine.web.logic.export.http.TableHttpExporter; 
     21import org.intermine.web.logic.results.PagedTable; 
     22import org.intermine.web.logic.session.SessionMethods; 
     23 
    1724import javax.servlet.ServletContext; 
    1825import javax.servlet.http.HttpServletRequest; 
     
    2633import org.apache.struts.tiles.ComponentContext; 
    2734import org.apache.struts.tiles.actions.TilesAction; 
    28 import org.intermine.web.logic.Constants; 
    29 import org.intermine.web.logic.config.TableExportConfig; 
    30 import org.intermine.web.logic.config.WebConfig; 
    31 import org.intermine.web.logic.export.http.TableHttpExporter; 
    32 import org.intermine.web.logic.results.PagedTable; 
    33 import org.intermine.web.logic.session.SessionMethods; 
    3435 
    3536/** 
     
    4647     * {@inheritDoc} 
    4748     */ 
     49    @Override 
    4850    public ActionForward execute(@SuppressWarnings("unused") ComponentContext context, 
    4951                                 @SuppressWarnings("unused") ActionMapping mapping, 
     
    6567        } 
    6668 
    67         Map allExporters = wc.getTableExportConfigs(); 
    68         Map usableExporters = new HashMap(); 
     69        Map<String, TableExportConfig> allExporters = wc.getTableExportConfigs(); 
     70        Map<String, Map<String, String>> usableExporters = 
     71            new HashMap<String, Map<String, String>>(); 
    6972 
    70         for (Iterator i = allExporters.keySet(). 
     73        for (Iterator<String> i = allExporters.keySet(). 
    7174                iterator(); i.hasNext(); ) { 
    72             String exporterId = (String) i.next(); 
    73             TableExportConfig tableExportConfig = (TableExportConfig) allExporters.get(exporterId); 
     75            String exporterId = i.next(); 
     76            TableExportConfig tableExportConfig = allExporters.get(exporterId); 
    7477 
    7578            TableHttpExporter tableExporter = 
     
    8386            } 
    8487            if (canExport) { 
    85                 usableExporters.put(exporterId, tableExportConfig); 
     88                // parameters to pass via the URL to the exportOptions page 
     89                Map<String, String> config = new HashMap<String, String>(); 
     90                config.put("id", tableExportConfig.getId()); 
     91                config.put("className", tableExportConfig.getClassName()); 
     92                usableExporters.put(exporterId, config); 
    8693            } else { 
    8794                usableExporters.put(exporterId, null); 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/struts/TableController.java

    r16025 r16264  
    8585        } 
    8686 
    87         PagedTable pt = SessionMethods.getResultsTable(session, request.getParameter("table")); 
     87        String table = request.getParameter("table"); 
     88        PagedTable pt = SessionMethods.getResultsTable(session, table); 
    8889        if (pt == null) { 
    89             LOG.error("PagedTable for " + request.getParameter("table") + " is null"); 
     90            LOG.error("PagedTable for " + table + " is null"); 
    9091            return null; 
    9192        } 
     
    214215        request.setAttribute("columnsToHighlight", jsonWriter.write(columnsToHighlightMap)); 
    215216        request.setAttribute("pathQuery", pt.getWebTable().getPathQuery()); 
    216         request.setAttribute("table", request.getParameter("table")); 
     217        request.setAttribute("table", table); 
    217218 
    218219        Map<Path, String> pathNames = new HashMap<Path, String> (); 
  • tickets/ticket-1673/intermine/web/main/src/org/intermine/web/struts/TableExportAction.java

    r15553 r16264  
    2424import org.apache.struts.action.ActionMapping; 
    2525import org.apache.struts.action.ActionMessage; 
     26import org.jfree.data.xy.TableXYDataset; 
     27 
     28import org.intermine.web.logic.config.WebConfig; 
    2629import org.intermine.web.logic.export.ExportException; 
    2730import org.intermine.web.logic.export.http.TableExporterFactory; 
     
    3235 
    3336/** 
    34  * Implementation of <strong>Action</strong> that allows the user to export a  
     37 * Implementation of <strong>Action</strong> that allows the user to export a 
    3538 * PagedTable to a file. 
    3639 * 
    3740 * @author Kim Rutherford 
    38  * @author Jakub Kulaviak  
     41 * @author Jakub Kulaviak 
    3942 */ 
    4043public class TableExportAction extends InterMineAction 
     
    4346 
    4447    private static final String ERROR_MSG = "Export failed. Please contact support."; 
    45      
     48 
    4649    // timeout for export is 1 day 
    4750    private static final int TIMEOUT = 24 * 60 * 60; 
     
    5861     *  an exception 
    5962     */ 
     63    @Override 
    6064    public ActionForward execute(ActionMapping mapping, 
    6165                                 ActionForm form, 
     
    6468        throws Exception { 
    6569        request.getSession().setMaxInactiveInterval(TIMEOUT); 
    66         String type = request.getParameter("type"); 
     70        TableExportForm tef = (TableExportForm) form; 
     71        String type = tef.getType(); 
     72        String table = tef.getTable(); 
    6773        PagedTable pt = null; 
    6874        try { 
    69             TableExporterFactory factory = new TableExporterFactory( 
    70                     SessionMethods.getWebConfig(request)); 
     75            WebConfig webConfig = SessionMethods.getWebConfig(request); 
     76            TableExporterFactory factory = new TableExporterFactory(webConfig); 
    7177            TableHttpExporter exporter = factory.getExporter(type); 
    72             pt = getPagedTable(request, request.getSession()); 
     78            pt = SessionMethods.getResultsTable(request.getSession(), table); 
    7379 
    7480            if (pt == null) { 
    7581                throw new ExportException("Export failed."); 
    7682            } 
    77              
     83 
    7884            if (pt.getExactSize() > pt.getMaxRetrievableIndex()) { 
    7985                throw new ExportException("Result is too big for export. " 
     
    8187                        + pt.getMaxRetrievableIndex() + " rows."); 
    8288            } 
    83              
    84              
     89 
     90 
    8591            if (pt.getWebTable() instanceof WebResults) { 
    8692                ((WebResults) pt.getWebTable()).goFaster(); 
    8793            } 
    88              
    89             exporter.export(pt, request, response); 
    90             // If null is returned then no forwarding is performed and  
     94 
     95            exporter.export(pt, request, response, tef); 
     96            // If null is returned then no forwarding is performed and 
    9197            // to the output is not flushed any jsp output, so user 
    9298            // will get only required export data 
    9399            return null; 
    94100        } catch (RuntimeException e) { 
    95             return processException(mapping, request, response, e);             
     101            return processException(mapping, request, response, e); 
    96102        } finally { 
    97103