Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed 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 com.facebook.presto.server;
 
 
 
 import java.util.List;
 import java.util.Map;
 
 import static com.facebook.presto.client.PrestoHeaders.PRESTO_CATALOG;
 import static com.facebook.presto.client.PrestoHeaders.PRESTO_LANGUAGE;
 import static com.facebook.presto.client.PrestoHeaders.PRESTO_SCHEMA;
 import static com.facebook.presto.client.PrestoHeaders.PRESTO_SESSION;
 import static com.facebook.presto.client.PrestoHeaders.PRESTO_SOURCE;
 import static com.facebook.presto.client.PrestoHeaders.PRESTO_TIME_ZONE;
 import static com.facebook.presto.client.PrestoHeaders.PRESTO_USER;
 import static com.google.common.base.Strings.isNullOrEmpty;
 import static com.google.common.net.HttpHeaders.USER_AGENT;
 import static java.lang.String.format;
 
 final class ResourceUtil
 {
     private ResourceUtil()
     {
     }
 
     public static Session createSessionForRequest(HttpServletRequest servletRequest)
     {
         SessionBuilder sessionBuilder = Session.builder()
                 .setUser(getRequiredHeader(servletRequest"User"))
                 .setSource(servletRequest.getHeader())
                 .setCatalog(getRequiredHeader(servletRequest"Catalog"))
                 .setSchema(getRequiredHeader(servletRequest"Schema"))
                 .setRemoteUserAddress(servletRequest.getRemoteAddr())
                 .setUserAgent(servletRequest.getHeader());
 
         String timeZoneId = servletRequest.getHeader();
         if (timeZoneId != null) {
             sessionBuilder.setTimeZoneKey(getTimeZoneKey(timeZoneId));
         }
 
         String language = servletRequest.getHeader();
         if (language != null) {
             sessionBuilder.setLocale(Locale.forLanguageTag(language));
         }
 
         // parse session properties
         Multimap<StringEntry<StringString>> sessionPropertiesByCatalog = HashMultimap.create();
         for (String sessionHeader : Collections.list(servletRequest.getHeaders())) {
             parseSessionHeader(sessionHeadersessionPropertiesByCatalog);
         }
         sessionBuilder.setSystemProperties(toMap(sessionPropertiesByCatalog.get(null)));
         for (Entry<StringCollection<Entry<StringString>>> entry : sessionPropertiesByCatalog.asMap().entrySet()) {
             if (entry.getKey() != null) {
                 sessionBuilder.setCatalogProperties(entry.getKey(), toMap(entry.getValue()));
             }
         }
 
         return sessionBuilder.build();
     }
 
     private static void parseSessionHeader(String headerMultimap<StringEntry<StringString>> sessionPropertiesByCatalog)
     {
         List<StringnameValue = Splitter.on('=').limit(2).splitToList(header);
         assertRequest(nameValue.size() == 2, "Invalid %s header");
 
         String catalog;
         String name;
         List<StringnameParts = Splitter.on('.').splitToList(nameValue.get(0));
         if (nameParts.size() == 1) {
            catalog = null;
            name = nameParts.get(0);
        }
        else if (nameParts.size() == 2) {
            catalog = nameParts.get(0);
            name = nameParts.get(1);
        }
        else {
            throw badRequest(format("Invalid %s header"));
        }
        assertRequest(catalog == null || !catalog.isEmpty(), "Invalid %s header");
        assertRequest(!name.isEmpty(), "Invalid %s header");
        String value = nameValue.get(1);
        sessionPropertiesByCatalog.put(catalog, Maps.immutableEntry(namevalue));
    }
    private static <K, V> Map<K, V> toMap(Iterable<? extends Entry<K, V>> entries)
    {
        ImmutableMap.Builder<K, V> builder = ImmutableMap.builder();
        for (Entry<K, V> entry : entries) {
            builder.put(entry);
        }
        return builder.build();
    }
    private static String getRequiredHeader(HttpServletRequest servletRequestString nameString description)
    {
        String value = servletRequest.getHeader(name);
        assertRequest(!isNullOrEmpty(value), description + " (%s) is empty"name);
        return value;
    }
    public static void assertRequest(boolean expressionString formatObject... args)
    {
        if (!expression) {
            throw badRequest(format(formatargs));
        }
    }
    private static TimeZoneKey getTimeZoneKey(String timeZoneId)
    {
        try {
            return TimeZoneKey.getTimeZoneKey(timeZoneId);
        }
        catch (TimeZoneNotSupportedException e) {
            throw badRequest(e.getMessage());
        }
    }
    private static WebApplicationException badRequest(String message)
    {
        throw new WebApplicationException(Response
                .status(.)
                .type(.)
                .entity(message)
                .build());
    }
New to GrepCode? Check out our FAQ X