X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Frest%2FHttpResultSet.java;h=836ca09c0e7cf8d19477fbbf972aef113f7e3619;hb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;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..836ca09 100644 --- a/src/jalview/ws/rest/HttpResultSet.java +++ b/src/jalview/ws/rest/HttpResultSet.java @@ -1,20 +1,46 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 The Jalview Authors + * + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.ws.rest; import jalview.bin.Cache; import jalview.io.FileParse; +import jalview.io.packed.DataProvider; +import jalview.io.packed.DataProvider.JvDataType; +import jalview.io.packed.ParsePackedSet; +import jalview.io.packed.SimpleDataProvider; +import jalview.util.MessageManager; 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; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.entity.mime.MultipartEntity; import org.apache.james.mime4j.MimeException; -import org.apache.james.mime4j.parser.ContentHandler; import org.apache.james.mime4j.parser.MimeStreamParser; /** @@ -55,17 +81,48 @@ 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( + MessageManager + .getString("error.implementation_error_need_to_have_httpresponse")); + } + 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 +135,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 +171,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 +195,7 @@ public class HttpResultSet extends FileParse if (br != null) { dataIn = new BufferedReader(br); - error=false; + error = false; } } } @@ -142,4 +219,20 @@ 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; + } + } + }