X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Frest%2FHttpResultSet.java;h=fddc4e30aef05f25e95722d24f71fb4f5f034e12;hb=797df64fa2a0a30773d0f48f5494d4155e5a8be3;hp=b99d5383ba5c8bc3d610a2ee6944841359d75a9d;hpb=6451d24f0987cf8283341750672ba95ee085fc9c;p=jalview.git diff --git a/src/jalview/ws/rest/HttpResultSet.java b/src/jalview/ws/rest/HttpResultSet.java index b99d538..fddc4e3 100644 --- a/src/jalview/ws/rest/HttpResultSet.java +++ b/src/jalview/ws/rest/HttpResultSet.java @@ -1,13 +1,36 @@ +/******************************************************************************* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + *******************************************************************************/ package jalview.ws.rest; import jalview.bin.Cache; import jalview.io.FileParse; +import jalview.io.packed.DataProvider; +import jalview.io.packed.ParsePackedSet; +import jalview.io.packed.SimpleDataProvider; +import jalview.io.packed.DataProvider.JvDataType; import jalview.ws.io.mime.JalviewMimeContentHandler; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; @@ -55,17 +78,46 @@ public class HttpResultSet extends FileParse initDataSource(con); } - private void initDataSource(HttpResponse con) throws IOException + /** + * construct a set of dataproviders to parse a result set from this service + * + * @param resSet + * @return + */ + public List createResultDataProviders() { - en = con.getEntity(); - repeatable = en.isRepeatable(); + List dp = new ArrayList(); + for (JvDataType type : restJob.rsd.getResultDataTypes()) + { + dp.add(new SimpleDataProvider(type, this, null)); + } + return dp; + } + /** + * parses the results of the service output. + * @return the result of ParsePackedSet.getAlignment() + * @throws Exception + * @throws Error + */ + public Object[] parseResultSet() throws Exception, Error + { + List dp = new ArrayList(); + Object[] results = null; + + if (en == null) + { + throw new Error( + "Implementation Error: need to have an HttpResponse to process."); + } + jalview.io.packed.JalviewDataset ds = restJob.newJalviewDataset(); + // Decide how we deal with content. if (en instanceof MultipartEntity) { + // Multipart messages should be properly typed, so we parse them as we go. MultipartEntity mpe = (MultipartEntity) en; // multipart - jalview.io.packed.JalviewDataset ds = restJob.newJalviewDataset(); - ContentHandler handler = new JalviewMimeContentHandler(ds); + JalviewMimeContentHandler handler = new JalviewMimeContentHandler(ds); MimeStreamParser parser = new MimeStreamParser(); parser.setContentHandler(handler); try @@ -78,15 +130,35 @@ public class HttpResultSet extends FileParse Cache.log.warn("Failed to parse MIME multipart content", me); en.consumeContent(); } + return new ParsePackedSet().getAlignment(ds, + handler.getJalviewDataProviders()); } else { + // Need to use hints from rest service description. + dp = createResultDataProviders(); + ParsePackedSet pps = new ParsePackedSet(); + return pps.getAlignment(ds, dp); + } + } + + private void initDataSource(HttpResponse con) throws IOException + { + en = con.getEntity(); + repeatable = en.isRepeatable(); + + if (!(en instanceof MultipartEntity)) + { // assume content is simple text stream that can be read from - String enc = (en.getContentEncoding()==null) ? null : en.getContentEncoding().getValue(); - if (en.getContentType()!=null) { - Cache.log.info("Result Type: " + en.getContentType().toString()); - } else { - Cache.log.info("No Result Type Specified."); + String enc = (en.getContentEncoding() == null) ? null : en + .getContentEncoding().getValue(); + if (en.getContentType() != null) + { + Cache.log.debug("Result Type: " + en.getContentType().toString()); + } + else + { + Cache.log.debug("No Result Type Specified."); } if (enc == null || enc.length() < 1) { @@ -94,7 +166,7 @@ public class HttpResultSet extends FileParse } else { - Cache.log.debug("Result Encoded as : "+enc); + Cache.log.debug("Result Encoded as : " + enc); } // attempt to identify file and construct an appropriate DataSource // identifier for it. @@ -118,7 +190,7 @@ public class HttpResultSet extends FileParse if (br != null) { dataIn = new BufferedReader(br); - error=false; + error = false; } } } @@ -142,4 +214,19 @@ public class HttpResultSet extends FileParse super.finalize(); } + /** + * + * @return the URL that this result set read data from. + */ + public String getUrl() + { + try { + return cachedRequest.getURI().toURL().toString(); + } catch (Exception x) + { + x.printStackTrace(); + return null; + } + } + }