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.operator.scalar;
 
 
 import java.util.Map;
 
 import static com.facebook.presto.metadata.FunctionRegistry.operatorInfo;
 import static com.facebook.presto.metadata.Signature.typeParameter;
 import static com.facebook.presto.spi.type.TypeSignature.parseTypeSignature;
 import static com.facebook.presto.type.TypeJsonUtils.stackRepresentationToObject;
 import static com.facebook.presto.util.Reflection.methodHandle;
 import static com.google.common.base.Preconditions.checkArgument;
 
 public class MapToJsonCast
         extends ParametricOperator
 {
     public static final MapToJsonCast MAP_TO_JSON = new MapToJsonCast();
     private static final ObjectMapper OBJECT_MAPPER = new ObjectMapperProvider().get().registerModule(new SimpleModule().addSerializer(Slice.classnew SliceSerializer()).addSerializer(Map.classnew MapSerializer()));
     private static final MethodHandle METHOD_HANDLE = methodHandle(MapToJsonCast.class"toJson"Type.classConnectorSession.classSlice.class);
 
     private MapToJsonCast()
     {
         super(., ImmutableList.of(typeParameter("K"), typeParameter("V")), ., ImmutableList.of("map<K,V>"));
     }
 
     @Override
     public FunctionInfo specialize(Map<StringTypetypesint arityTypeManager typeManagerFunctionRegistry functionRegistry)
     {
         checkArgument(arity == 1, "Expected arity to be 1");
         Type keyType = types.get("K");
         Type valueType = types.get("V");
         Type mapType = typeManager.getParameterizedType(., ImmutableList.of(keyType.getTypeSignature(), valueType.getTypeSignature()), ImmutableList.of());
         MethodHandle methodHandle = .bindTo(mapType);
         return operatorInfo(.parseTypeSignature(.), ImmutableList.of(mapType.getTypeSignature()), methodHandlefalse, ImmutableList.of(false));
     }
 
     public static Slice toJson(Type mapTypeConnectorSession sessionSlice slice)
     {
         Object object = stackRepresentationToObject(sessionslicemapType);
         try {
             return Slices.utf8Slice(.writeValueAsString(object));
         }
         catch (JsonProcessingException e) {
             throw Throwables.propagate(e);
         }
     }
 
     // Unfortunately this has to be a raw Map, since Map<?, ?> doesn't seem to work in Jackson
     private static class MapSerializer
             extends JsonSerializer<Map>
     {
         @Override
         public void serialize(Map mapJsonGenerator jsonGeneratorSerializerProvider serializerProvider)
                 throws IOException
         {
             Map<StringObjectorderedMap = new TreeMap<>();
             for (Map.Entry<?, ?> entry : ((Map<?, ?>) map).entrySet()) {
                 orderedMap.put(entry.getKey().toString(), entry.getValue());
             }
             jsonGenerator.writeStartObject();
             for (Map.Entry<StringObjectentry : orderedMap.entrySet()) {
                 jsonGenerator.writeObjectField(entry.getKey(), entry.getValue());
             }
             jsonGenerator.writeEndObject();
        }
    }
New to GrepCode? Check out our FAQ X