[ 
https://issues.apache.org/jira/browse/TAJO-1944?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15055254#comment-15055254
 ] 

ASF GitHub Bot commented on TAJO-1944:
--------------------------------------

Github user jihoonson commented on a diff in the pull request:

    https://github.com/apache/tajo/pull/876#discussion_r47455679
  
    --- Diff: 
tajo-core/src/main/java/org/apache/tajo/ws/rs/resources/outputs/RestOutputFactory.java
 ---
    @@ -0,0 +1,85 @@
    +/**
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.tajo.ws.rs.resources.outputs;
    +
    +import com.google.common.collect.Maps;
    +import org.apache.commons.lang.StringUtils;
    +import org.apache.commons.logging.Log;
    +import org.apache.commons.logging.LogFactory;
    +import org.apache.tajo.master.exec.NonForwardQueryResultScanner;
    +import org.apache.tajo.util.ClassUtil;
    +import org.apache.tajo.ws.rs.annotation.RestReturnType;
    +
    +import java.lang.reflect.Modifier;
    +import java.util.Map;
    +import java.util.Set;
    +
    +public class RestOutputFactory {
    +  private static Log LOG = LogFactory.getLog(RestOutputFactory.class);
    +  private static Map<String, String> restOutputClasses = load();
    +
    +  private static Map<String, String> load() {
    +    Map<String, String> outputClasses = Maps.newHashMap();
    +    Set<Class> restOutputClasses = 
ClassUtil.findClasses(AbstractStreamingOutput.class, 
"org.apache.tajo.ws.rs.resources.outputs");
    +
    +    for (Class eachClass : restOutputClasses) {
    +      if (eachClass.isInterface() || 
    +          Modifier.isAbstract(eachClass.getModifiers())) {
    +        continue;
    +      }
    +
    +      AbstractStreamingOutput streamingOutput = null;
    +      try {
    +        streamingOutput = (AbstractStreamingOutput) 
eachClass.getDeclaredConstructor(
    +        new Class[]{NonForwardQueryResultScanner.class, Integer.class, 
Integer.class}).newInstance(null, 0, 0);
    +      } catch (Exception e) {
    +        LOG.warn(eachClass + " cannot instantiate Function class because 
of " + e.getMessage(), e);
    +        continue;
    +      }
    +      String className = streamingOutput.getClass().getCanonicalName();
    +      String headerType = 
streamingOutput.getClass().getAnnotation(RestReturnType.class).headerType();
    +
    +      if (StringUtils.isNotEmpty(headerType)) {
    +        outputClasses.put(headerType, className);
    +      }
    +    }
    +
    +    return outputClasses;
    +  }
    +
    +  public static AbstractStreamingOutput get(String headerType, 
NonForwardQueryResultScanner scanner, Integer count, Integer startOffset) {
    +    AbstractStreamingOutput output = null;
    +    try {
    +      if (restOutputClasses.containsKey(headerType)) {
    +        String className = (String) restOutputClasses.get(headerType);
    +        Class<?> clazz = Class.forName(className);
    +        output = (AbstractStreamingOutput) clazz.getDeclaredConstructor(
    +                  new Class[]{NonForwardQueryResultScanner.class,
    +                  Integer.class, Integer.class})
    +                  .newInstance(scanner, count, startOffset);
    +      } else {
    +        output = new BinaryStreamingOutput(scanner, count, startOffset);
    --- End diff --
    
    From that point, I think it will be ok because BinaryStreamingOutput is 
designed to be used for clients of other languages. 


> Support text resultset for REST 
> --------------------------------
>
>                 Key: TAJO-1944
>                 URL: https://issues.apache.org/jira/browse/TAJO-1944
>             Project: Tajo
>          Issue Type: Task
>          Components: REST API
>            Reporter: Jihoon Son
>            Assignee: DaeMyung Kang
>             Fix For: 0.11.1
>
>
> See the discussion at http://markmail.org/message/gpvzw7fcbo4rrtkt.
> Currently, our REST api returns result sets in a binary form. This makes 
> users to use our REST api difficult. 
> However, see another discussion at 
> https://mail-archives.apache.org/mod_mbox/tajo-dev/201503.mbox/%3ccafu6yh0dgbvwqnbyw3hrp-6dvzp4fg65mnpueqqgwuoq_x_...@mail.gmail.com%3E.
>  Since we plan to support other types of clients using REST api, we also need 
> to support binary result sets. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to