Example usage for org.apache.thrift.meta_data FieldMetaData getStructMetaDataMap

List of usage examples for org.apache.thrift.meta_data FieldMetaData getStructMetaDataMap

Introduction

In this page you can find the example usage for org.apache.thrift.meta_data FieldMetaData getStructMetaDataMap.

Prototype

public static synchronized Hashtable getStructMetaDataMap(Class sClass) 

Source Link

Document

Returns a map with metadata (i.e.

Usage

From source file:org.apache.aurora.scheduler.http.api.security.ThriftFieldGetter.java

License:Apache License

ThriftFieldGetter(Class<T> structClass, F fieldId, Class<V> valueClass) {
    super(structClass, valueClass);

    FieldValueMetaData fieldValueMetaData = FieldMetaData.getStructMetaDataMap(structClass)
            .get(fieldId).valueMetaData;

    checkArgument(fieldValueMetaData instanceof StructMetaData);
    StructMetaData structMetaData = (StructMetaData) fieldValueMetaData;
    checkArgument(valueClass.equals(structMetaData.structClass),
            "Value class %s does not match field metadata for %s (expected %s)", valueClass.getName(), fieldId,
            structMetaData.structClass);

    this.fieldId = fieldId;
}

From source file:org.apache.avro.thrift.ThriftData.java

License:Apache License

@Override
@SuppressWarnings("unchecked")
protected Object getRecordState(Object r, Schema s) {
    TFieldIdEnum[] fields = fieldCache.get(s);
    if (fields == null) { // cache miss
        fields = new TFieldIdEnum[s.getFields().size()];
        Class c = r.getClass();// w  w  w  .  j av  a2  s  .  c o  m
        for (TFieldIdEnum f : FieldMetaData.getStructMetaDataMap((Class<? extends TBase>) c).keySet())
            fields[s.getField(f.getFieldName()).pos()] = f;
        fieldCache.put(s, fields); // update cache
    }
    return fields;
}

From source file:org.apache.avro.thrift.ThriftData.java

License:Apache License

/** Return a record schema given a thrift generated class. */
@SuppressWarnings("unchecked")
public Schema getSchema(Class c) {
    Schema schema = schemaCache.get(c);

    if (schema == null) { // cache miss
        try {/*from   ww  w .j  a va 2s .  co  m*/
            if (TEnum.class.isAssignableFrom(c)) { // enum
                List<String> symbols = new ArrayList<String>();
                for (Enum e : ((Class<? extends Enum>) c).getEnumConstants())
                    symbols.add(e.name());
                schema = Schema.createEnum(c.getName(), null, null, symbols);
            } else if (TBase.class.isAssignableFrom(c)) { // struct
                schema = Schema.createRecord(c.getName(), null, null, Throwable.class.isAssignableFrom(c));
                List<Field> fields = new ArrayList<Field>();
                for (FieldMetaData f : FieldMetaData.getStructMetaDataMap((Class<? extends TBase>) c)
                        .values()) {
                    Schema s = getSchema(f.valueMetaData);
                    if (f.requirementType == TFieldRequirementType.OPTIONAL
                            && (s.getType() != Schema.Type.UNION))
                        s = nullable(s);
                    fields.add(new Field(f.fieldName, s, null, null));
                }
                schema.setFields(fields);
            } else {
                throw new RuntimeException("Not a Thrift-generated class: " + c);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        schemaCache.put(c, schema); // update cache
    }
    return schema;
}

From source file:org.commoncrawl.rpc.thriftrpc.ant.RccTask.java

License:Apache License

public static void generateAsyncStub(String fullyQualifiedServiceName, PrintWriter writer)
        throws ClassNotFoundException {
    String packageName = fullyQualifiedServiceName.substring(0, fullyQualifiedServiceName.lastIndexOf("."));
    String className = fullyQualifiedServiceName.substring(fullyQualifiedServiceName.lastIndexOf(".") + 1);
    Class zclass = Class.forName(fullyQualifiedServiceName + "$Iface");

    writer.println("package " + packageName + ";");
    writer.println("");
    writer.println("import java.util.List;");
    writer.println("import java.util.ArrayList;");
    writer.println("import java.util.Map;");
    writer.println("import java.util.HashMap;");
    writer.println("import java.util.EnumMap;");
    writer.println("import java.util.Set;");
    writer.println("import java.util.HashSet;");
    writer.println("import java.util.EnumSet;");
    writer.println("import java.util.Collections;");
    writer.println("import java.util.BitSet;");
    writer.println("import java.nio.ByteBuffer;");
    writer.println("import java.util.Arrays;");
    writer.println("import org.slf4j.Logger;");
    writer.println("import org.slf4j.LoggerFactory;");
    writer.println("import java.io.IOException;");

    writer.println("");
    writer.println("import org.commoncrawl.rpc.thriftrpc.*;");
    writer.println("import org.apache.thrift.TException;");
    writer.println("import org.apache.thrift.protocol.TMessage;");
    writer.println("import org.apache.thrift.protocol.TProtocol;");
    writer.println("import org.apache.thrift.transport.TFramedTransport;");
    writer.println("import org.apache.thrift.transport.TIOStreamTransport;");
    writer.println("import org.commoncrawl.io.internal.NIOBufferList;");
    writer.println("import org.commoncrawl.io.internal.NIOBufferListOutputStream;");
    writer.println("import org.commoncrawl.rpc.thriftrpc.*;");
    writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftRPCMessageDispatcher;");
    writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftIncomingMessageContext;");
    writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftOutgoingMessageContext;");
    writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftRPCClientChannel;");
    writer.println("import org.commoncrawl.rpc.thriftrpc.ThriftRPCServerChannel;");
    writer.println("import " + packageName + "." + className + ".*;");

    writer.println("class " + className + "_CCAsyncSupport {");
    writer.println("");
    writer.println(//from  w ww . j  a va 2 s . c o m
            "  public static class " + className + "_AsyncCallStub extends ThriftRPCChannel.AsyncStub {");
    writer.println("    public " + className + "_AsyncCallStub(ThriftRPCChannel channel) {");
    writer.println("      super(channel);");
    writer.println("    }");
    writer.println("");
    // get Blocking IFace 
    Class blockingIFaceClass = Class.forName(fullyQualifiedServiceName + "$Iface");

    for (Method m : blockingIFaceClass.getMethods()) {

        String argsName = m.getName() + "_args";
        String resultName = m.getName() + "_result";

        Class argsClass = Class.forName(fullyQualifiedServiceName + "$" + argsName);
        Map<? extends TFieldIdEnum, FieldMetaData> metadataMap = FieldMetaData.getStructMetaDataMap(argsClass);

        writer.print("    public void " + m.getName() + "(");
        int fieldIndex = 0;
        for (TFieldIdEnum field : metadataMap.keySet()) {
            if (fieldIndex++ != 0)
                writer.print(",");
            try {
                writer.print(argsClass.getField(field.getFieldName()).getType().getName() + " "
                        + field.getFieldName());
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        writer.println(",final ThriftOutgoingMessageContext.ThriftAsyncRequestCallback<" + argsName + ","
                + resultName + "> resultHandler) throws org.apache.thrift.TException {");
        writer.println("      " + argsName + " args = new " + argsName + "();");
        for (TFieldIdEnum field : metadataMap.keySet()) {
            try {
                writer.println("      args." + field.getFieldName() + " = " + field.getFieldName() + ";");
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        writer.println("      " + resultName + " result = new " + resultName + "();");
        writer.println("      ThriftOutgoingMessageContext<" + argsName + "," + resultName
                + "> asyncCallContext = " + "new ThriftOutgoingMessageContext<" + argsName + "," + resultName
                + ">(super.getChannel(),resultHandler,\"" + m.getName() + "\",args,result);");
        writer.println("      super.getChannel().sendRequest(asyncCallContext);");
        writer.println("    }");
    }
    writer.println("  }");

    String baseInterfaceName = className + "_AsyncIFace";
    writer.println("  public static interface " + baseInterfaceName + "{ ");
    for (Method method : zclass.getMethods()) {
        String inputType = method.getName() + "_args";
        String outputType = method.getName() + "_result";

        writer.println("    public void " + className + "_" + method.getName()
                + " (final ThriftIncomingMessageContext<" + inputType + "," + outputType
                + "> context) throws TException;");
    }
    writer.println("  }");
    String processClassName = className + "_RequestProcessor";

    writer.println("  public static class " + processClassName + " implements ThriftRPCMessageDispatcher { ");
    writer.println("    " + baseInterfaceName + " _iface;");
    writer.println("    " + processClassName + "(" + baseInterfaceName + " iface){");
    writer.println("      _iface = iface;");
    writer.println("    }");
    writer.println("");
    writer.println(
            "   public void process(ThriftRPCServerChannel serverChannel,ThriftRPCClientChannel clientChannel,TMessage message,TProtocol iprot)throws TException {");

    for (Method method : zclass.getMethods()) {
        String inputType = method.getName() + "_args";
        String outputType = method.getName() + "_result";

        writer.println("    if (message.name.equals(\"" + method.getName() + "\")){");
        writer.println("      " + inputType + " input = new " + inputType + "();");
        writer.println("      " + outputType + " output = new " + outputType + "();");
        writer.println("      input.read(iprot);");
        writer.println("      iprot.readMessageEnd();");

        writer.println("      ThriftIncomingMessageContext<" + inputType + "," + outputType
                + "> context = new ThriftIncomingMessageContext<" + inputType + "," + outputType + ">"
                + "(serverChannel,clientChannel,message,iprot,input,output);");
        writer.println("      _iface." + className + "_" + method.getName() + "(context);");
        writer.println("      return;");
        writer.println("    }");
    }
    writer.println(
            "    org.apache.thrift.protocol.TProtocolUtil.skip(iprot, org.apache.thrift.protocol.TType.STRUCT);");
    writer.println("    iprot.readMessageEnd();");
    writer.println("    NIOBufferList bufferListTemp = new NIOBufferList();");
    writer.println(
            "    TProtocol oprot = clientChannel.getOutputProtocolFactory().getProtocol(new TFramedTransport(new TIOStreamTransport(new NIOBufferListOutputStream(bufferListTemp))));");

    writer.println(
            "    org.apache.thrift.TApplicationException x = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.UNKNOWN_METHOD, \"Invalid method name: '+message.name+'\");");
    writer.println(
            "    oprot.writeMessageBegin(new org.apache.thrift.protocol.TMessage(message.name, org.apache.thrift.protocol.TMessageType.EXCEPTION, message.seqid));");
    writer.println("    x.write(oprot);");
    writer.println("    oprot.writeMessageEnd();");
    writer.println("    oprot.getTransport().flush();");
    writer.println("    try {");
    writer.println("      clientChannel.responseReady(bufferListTemp);");
    writer.println("    } catch (IOException e) {");
    writer.println("      throw new TException(e);");
    writer.println("    }");

    writer.println("    }");
    writer.println("");
    writer.println("  }");
    writer.println("");
    writer.println("}");

}