Example usage for com.google.gwt.user.rebind.rpc TypeSerializerCreator realize

List of usage examples for com.google.gwt.user.rebind.rpc TypeSerializerCreator realize

Introduction

In this page you can find the example usage for com.google.gwt.user.rebind.rpc TypeSerializerCreator realize.

Prototype

public String realize(TreeLogger logger) 

Source Link

Usage

From source file:com.colinalworth.gwt.websockets.rebind.ServerCreator.java

License:Apache License

public void create(TreeLogger logger, GeneratorContext context) throws UnableToCompleteException {
    String typeName = this.serverType.getQualifiedSourceName();

    String packageName = getPackageName();
    String simpleName = getSimpleName();

    TypeOracle oracle = context.getTypeOracle();

    PrintWriter pw = context.tryCreate(logger, packageName, simpleName);
    if (pw == null) {
        return;//from   w w  w .ja v a  2s  . c o m
    }
    JClassType serverType = oracle.findType(Name.getSourceNameForClass(Server.class));
    JClassType clientType = ModelUtils.findParameterizationOf(serverType, this.serverType)[1];

    ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, simpleName);
    factory.setSuperclass(Name.getSourceNameForClass(ServerImpl.class) + "<" + typeName + ","
            + clientType.getQualifiedSourceName() + ">");
    factory.addImplementedInterface(typeName);

    SourceWriter sw = factory.createSourceWriter(context, pw);

    //TODO move this check before the printwriter creation can fail, and allow the warn to be optional
    sw.println("public %1$s(%2$s errorHandler) {", simpleName,
            Name.getSourceNameForClass(ServerBuilder.ConnectionErrorHandler.class));
    RemoteServiceRelativePath path = this.serverType.getAnnotation(RemoteServiceRelativePath.class);
    if (path == null) {
        //         logger.log(Type.WARN, "@RemoteServiceRelativePath required on " + typeName + " to make a connection to the server without a ServerBuilder");
        //         throw new UnableToCompleteException();
        sw.indentln("super(null);");
        sw.indentln(
                "throw new RuntimeException(\"@RemoteServiceRelativePath annotation required on %1$s to make a connection without a path defined in ServerBuilder\");");
    } else {
        sw.indentln("super(errorHandler, "
                + "com.google.gwt.user.client.Window.Location.getProtocol().toLowerCase().startsWith(\"https\") ? \"wss://\": \"ws://\", "
                + "com.google.gwt.user.client.Window.Location.getHost(), \"%1$s\");", path.value());
    }
    sw.println("}");

    sw.println("public %1$s(%2$s errorHandler, String url) {", simpleName,
            Name.getSourceNameForClass(ServerBuilder.ConnectionErrorHandler.class));
    sw.indentln("super(errorHandler, url);");
    sw.println("}");

    //Find all types that may go over the wire
    // Collect the types the server will send to the client using the Client interface
    SerializableTypeOracleBuilder serverSerializerBuilder = new SerializableTypeOracleBuilder(logger, context);
    appendMethodParameters(logger, clientType, Client.class, serverSerializerBuilder);
    // Also add the wrapper object ClientInvocation
    serverSerializerBuilder.addRootType(logger, oracle.findType(ClientInvocation.class.getName()));
    serverSerializerBuilder.addRootType(logger, oracle.findType(ClientCallbackInvocation.class.getName()));

    // Collect the types the client will send to the server using the Server interface
    SerializableTypeOracleBuilder clientSerializerBuilder = new SerializableTypeOracleBuilder(logger, context);
    appendMethodParameters(logger, this.serverType, Server.class, clientSerializerBuilder);
    // Also add the ServerInvocation wrapper
    clientSerializerBuilder.addRootType(logger, oracle.findType(ServerInvocation.class.getName()));
    clientSerializerBuilder.addRootType(logger, oracle.findType(ServerCallbackInvocation.class.getName()));

    String tsName = simpleName + "_TypeSerializer";
    TypeSerializerCreator serializerCreator = new TypeSerializerCreator(logger,
            clientSerializerBuilder.build(logger), serverSerializerBuilder.build(logger), context,
            packageName + "." + tsName, tsName);
    serializerCreator.realize(logger);

    // Make the newly created Serializer available at runtime
    sw.println("protected %1$s __getSerializer() {", Serializer.class.getName());
    sw.indentln("return %2$s.<%1$s>create(%1$s.class);", tsName, GWT.class.getName());
    sw.println("}");

    // Build methods that call from the client to the server
    for (JMethod m : this.serverType.getInheritableMethods()) {
        if (isRemoteMethod(m, Server.class)) {
            printServerMethodBody(logger, context, sw, m);
        }
    }

    // Read incoming calls and dispatch them to the correct client method
    sw.println("protected void __invoke(String method, Object[] params) {");
    for (JMethod m : clientType.getInheritableMethods()) {
        if (isRemoteMethod(m, Client.class)) {
            JParameter[] params = m.getParameters();
            sw.println("if (method.equals(\"%1$s\") && params.length == %2$d) {", m.getName(), params.length);
            sw.indent();
            sw.println("getClient().%1$s(", m.getName());
            sw.indent();
            for (int i = 0; i < params.length; i++) {
                if (i != 0) {
                    sw.print(",");
                }
                sw.println("(%1$s)params[%2$d]", params[i].getType().getQualifiedSourceName(), i);
            }
            sw.outdent();
            sw.println(");");
            sw.outdent();
            sw.println("}");
        }
    }
    sw.println("}");

    sw.println("protected void __onError(Exception error) {");
    sw.println("}");

    sw.commit(logger);
}

From source file:com.googlecode.serialization.JsonSerializationGenerator.java

License:Apache License

@Override
public String generate(final TreeLogger logger, final GeneratorContext context, final String typeName)
        throws UnableToCompleteException {
    factoryType = null;/*from   w ww .  j a  va  2s.c o m*/
    type = null;
    whiteListType = null;
    typeParameters = null;
    //logger.log(TreeLogger.Type.WARN, "typeName:" + typeName);
    final TypeOracle typeOracle = context.getTypeOracle();
    assert typeOracle != null;
    validateTypes(logger, typeOracle, typeName);
    final String packageName = factoryType.getPackage().getName();
    //logger.log(TreeLogger.Type.WARN, "packageName:" + packageName);

    final PropertyOracle propertyOracle = context.getPropertyOracle();

    // Debugging
    //        logger.log(TreeLogger.Type.WARN, "Logging blacklist:");
    //        try {
    //            final ConfigurationProperty prop = propertyOracle.getConfigurationProperty("rpc.blacklist");
    //            for (String value : prop.getValues()) {
    //                logger.log(TreeLogger.Type.WARN, "Blacklist:" + value);
    //            }
    //        } catch (BadPropertyValueException e) {
    //            logger.log(TreeLogger.Type.ERROR, "Could not find property rpc.blacklist");
    //            throw new UnableToCompleteException();
    //        }
    // end Debugging

    // Load the blacklist/whitelist
    final BlacklistFilter blacklistTypeFilter = new BlacklistFilter(logger, propertyOracle);

    final SerializableTypeOracleBuilder typesSentFromBrowserBuilder = new SerializableTypeOracleBuilder(logger,
            propertyOracle, context);
    typesSentFromBrowserBuilder.setTypeFilter(blacklistTypeFilter);
    final SerializableTypeOracleBuilder typesSentToBrowserBuilder = new SerializableTypeOracleBuilder(logger,
            propertyOracle, context);
    typesSentToBrowserBuilder.setTypeFilter(blacklistTypeFilter);

    addRoots(logger, typeOracle, typesSentFromBrowserBuilder, typesSentToBrowserBuilder);

    final SerializableTypeOracle typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);
    final SerializableTypeOracle typesSentToBrowser = typesSentToBrowserBuilder.build(logger);

    final String typeNameParam;
    if (typeParameters != null && typeParameters.length > 0) {
        final StringBuilder sb = new StringBuilder();
        sb.append(type.getName()).append("<");
        for (JClassType typeParameter : typeParameters) {
            sb.append(typeParameter.getName()).append(",");
        }
        sb.delete(sb.length() - 1, sb.length());
        sb.append(">");
        typeNameParam = sb.toString();
    } else {
        typeNameParam = type.getName();
    }
    final String typeNameParamInline = typeNameParam.replace(",", "_").replace("<", "_").replace(">", "");

    final String jsonTypeSerializer = typeNameParamInline + "_JsonTypeSerializer";
    final TypeSerializerCreator tsc = new TypeSerializerCreator(logger, typesSentFromBrowser,
            typesSentToBrowser, context, packageName + "." + jsonTypeSerializer, jsonTypeSerializer);
    tsc.realize(logger);

    final String jsonFactoryName = factoryType.getName().replace('.', '_') + "_AutogeneratedImpl";
    final PrintWriter printWriter = context.tryCreate(logger, packageName, jsonFactoryName);

    if (printWriter != null) {
        printWriter.append("package ").append(packageName).append(";\n");
        printWriter.append("import com.google.gwt.user.client.rpc.impl.Serializer;\n");
        printWriter.append("import com.googlecode.gwt.serialization.JsonReader;\n");
        printWriter.append("import com.googlecode.gwt.serialization.JsonReaderImpl;\n");
        printWriter.append("import com.googlecode.gwt.serialization.JsonSerializationFactory;\n");
        printWriter.append("import com.googlecode.gwt.serialization.JsonWriter;\n");
        printWriter.append("import com.googlecode.gwt.serialization.JsonWriterImpl;\n");
        printWriter.append("import ").append(type.getQualifiedSourceName()).append(";\n");
        if (typeParameters != null && typeParameters.length > 0) {
            for (JClassType typeParameter : typeParameters) {
                printWriter.append("import ").append(typeParameter.getQualifiedSourceName()).append(";\n");
            }
        }
        printWriter.append("import ").append(packageName).append(".").append(jsonTypeSerializer)
                .append(";\n\n");

        printWriter.append("public class ").append(jsonFactoryName).append(" implements ")
                .append(factoryType.getQualifiedSourceName()).append(" {\n");
        printWriter.append("  private final Serializer serializer = new ").append(jsonTypeSerializer)
                .append("();\n");
        printWriter.append("  private final JsonReaderImpl<").append(typeNameParam)
                .append("> reader = new JsonReaderImpl<").append(typeNameParam).append(">(serializer);\n");
        printWriter.append("  private final JsonWriterImpl<").append(typeNameParam)
                .append("> writer = new JsonWriterImpl<").append(typeNameParam).append(">(serializer);\n\n");

        printWriter.append("  @Override\n");
        printWriter.append("  public JsonReader<").append(typeNameParam).append("> getReader() {\n");
        printWriter.append("    return reader;\n");
        printWriter.append("  }\n\n");

        printWriter.append("  @Override\n");
        printWriter.append("  public JsonWriter<").append(typeNameParam).append("> getWriter() {\n");
        printWriter.append("    return writer;\n");
        printWriter.append("  }\n");
        printWriter.append("}\n");

        context.commit(logger, printWriter);
    }
    return packageName + "." + jsonFactoryName;
}

From source file:com.googlecode.serialization.JsonWriterGenerator.java

License:Apache License

@Override
public String generate(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {

    //logger.log(TreeLogger.Type.WARN, "banana typeName:" + typeName);
    final TypeOracle typeOracle = context.getTypeOracle();
    assert typeOracle != null;
    validateTypes(logger, typeOracle, typeName);
    final String packageName = rwType.getPackage().getName();
    //logger.log(TreeLogger.Type.WARN, "packageName:" + packageName);

    final PropertyOracle propertyOracle = context.getPropertyOracle();

    // Load the blacklist/whitelist
    final BlacklistFilter blacklistTypeFilter = new BlacklistFilter(logger, propertyOracle);

    final SerializableTypeOracleBuilder typesSentFromBrowserBuilder = new SerializableTypeOracleBuilder(logger,
            propertyOracle, context);//from w  ww .  j  ava2s.  com
    typesSentFromBrowserBuilder.setTypeFilter(blacklistTypeFilter);
    final SerializableTypeOracleBuilder typesSentToBrowserBuilder = new SerializableTypeOracleBuilder(logger,
            propertyOracle, context);
    typesSentToBrowserBuilder.setTypeFilter(blacklistTypeFilter);

    addRoots(logger, typeOracle, typesSentFromBrowserBuilder, typesSentToBrowserBuilder);

    final SerializableTypeOracle typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);
    final SerializableTypeOracle typesSentToBrowser = typesSentToBrowserBuilder.build(logger);

    final String jsonTypeSerializer = type.getName() + "_JsonTypeSerializer";
    final TypeSerializerCreator tsc = new TypeSerializerCreator(logger, typesSentFromBrowser,
            typesSentToBrowser, context, type.getPackage().getName() + "." + jsonTypeSerializer,
            jsonTypeSerializer);
    tsc.realize(logger);

    final String jsonWriterName = rwType.getName().replace('.', '_') + "AutogeneratedImpl";
    final PrintWriter jwWriter = context.tryCreate(logger, packageName, jsonWriterName);

    if (jwWriter != null) {
        jwWriter.append("package ").append(packageName).append(";\n");
        jwWriter.append("import com.google.gwt.user.client.rpc.SerializationException;\n");
        jwWriter.append("import com.googlecode.gwt.serialization.JsonSerializationStreamWriter;\n");
        jwWriter.append("import com.googlecode.gwt.serialization.JsonWriter;\n");
        jwWriter.append("import ").append(type.getQualifiedSourceName()).append(";\n");
        jwWriter.append("import ").append(type.getQualifiedSourceName()).append("_JsonTypeSerializer;\n\n");

        jwWriter.append("public class ").append(jsonWriterName).append(" implements ")
                .append(rwType.getQualifiedSourceName()).append(" {\n");
        jwWriter.append("  @Override\n");
        jwWriter.append("  public String write(final ").append(type.getName()).append(" model) {\n");
        jwWriter.append(
                "    final JsonSerializationStreamWriter writer = new JsonSerializationStreamWriter(new ")
                .append(type.getName()).append("_JsonTypeSerializer());\n");
        jwWriter.append("    try {\n");
        jwWriter.append("      writer.writeObject(model);\n");
        jwWriter.append("    } catch (SerializationException e) {\n");
        jwWriter.append("      throw new RuntimeException(e);\n");
        jwWriter.append("    }\n");
        jwWriter.append("    return writer.toString();\n");
        jwWriter.append("  }\n");
        jwWriter.append("}\n");

        context.commit(logger, jwWriter);
    }
    return packageName + "." + jsonWriterName;
}

From source file:com.seanchenxi.gwt.storage.rebind.StorageTypeSerializerGenerator.java

License:Apache License

@Override
public RebindResult generateIncrementally(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {
    TypeOracle typeOracle = context.getTypeOracle();

    JClassType serializerType = typeOracle.findType(typeName);
    if (serializerType == null || serializerType.isInterface() == null)
        throw new UnableToCompleteException();

    final Set<JType> serializables = StorageTypeFinder.getInstance(context, logger).findStorageTypes();

    String typeSerializerClassName = serializerType.getQualifiedSourceName() + TYPE_SERIALIZER_SUFFIX;
    String typeSerializerSimpleName = serializerType.getSimpleSourceName() + TYPE_SERIALIZER_SUFFIX;
    JClassType typeSerializer = typeOracle.findType(typeSerializerClassName);

    SerializableTypeOracle serializationOracle = buildSerializableTypeOracle(logger, context, serializables);

    if (typeSerializer != null && typeSerializer.isClass() != null
            && isNothingChanged(logger, context, serializables, serializationOracle)) {
        return new RebindResult(RebindMode.USE_EXISTING, typeSerializerClassName);
    }/*  w  ww . j a va  2s . c  om*/

    TypeSerializerCreator tsc = new TypeSerializerCreator(logger, serializationOracle, serializationOracle,
            context, typeSerializerClassName, typeSerializerSimpleName);
    tsc.realize(logger);

    if (context.isGeneratorResultCachingEnabled()) {
        RebindResult result = new RebindResult(RebindMode.USE_PARTIAL_CACHED, typeSerializerClassName);
        CachedRpcTypeInformation cti = new CachedRpcTypeInformation(serializationOracle, serializationOracle,
                serializables, new HashSet<JType>());
        result.putClientData(ProxyCreator.CACHED_TYPE_INFO_KEY, cti);
        return result;
    } else {
        return new RebindResult(RebindMode.USE_ALL_NEW_WITH_NO_CACHING, typeSerializerClassName);
    }
}

From source file:fr.putnami.pwt.core.service.rebind.ServiceBinderCreator.java

License:Open Source License

private String createSerializer(TreeLogger logger, GeneratorContext context)
        throws UnableToCompleteException, NotFoundException {

    /* Hack because SerializableTypeOracleBuilder constructor has only two arguments since GWT 2.7 */

    SerializableTypeOracleBuilder typesSentFromBrowser = null;
    SerializableTypeOracleBuilder typesSentToBrowser = null;
    try {//from  ww w  . ja  v  a2  s .c  om
        try {
            Constructor<SerializableTypeOracleBuilder> constructor = SerializableTypeOracleBuilder.class
                    .getConstructor(TreeLogger.class, PropertyOracle.class, GeneratorContext.class);
            typesSentFromBrowser = constructor.newInstance(logger, context.getPropertyOracle(), context);
            typesSentToBrowser = constructor.newInstance(logger, context.getPropertyOracle(), context);
        } catch (NoSuchMethodException exc) {
            try {
                Constructor<SerializableTypeOracleBuilder> constructor = SerializableTypeOracleBuilder.class
                        .getConstructor(TreeLogger.class, GeneratorContext.class);
                typesSentFromBrowser = constructor.newInstance(logger, context);
                typesSentToBrowser = constructor.newInstance(logger, context);
            } catch (NoSuchMethodException ex) {
                logger.branch(TreeLogger.ERROR, "Unable to find a SerializableTypeOracleBuilder constructor",
                        null);
                throw new UnableToCompleteException();
            }
        }
    } catch (InstantiationException e) {
        logger.branch(TreeLogger.ERROR, "Unable to invoke SerializableTypeOracleBuilder constructor", null);
        throw new UnableToCompleteException();
    } catch (IllegalAccessException e) {
        logger.branch(TreeLogger.ERROR, "Unable to invoke SerializableTypeOracleBuilder constructor", null);
        throw new UnableToCompleteException();
    } catch (IllegalArgumentException e) {
        logger.branch(TreeLogger.ERROR, "Unable to invoke SerializableTypeOracleBuilder constructor", null);
        throw new UnableToCompleteException();
    } catch (InvocationTargetException e) {
        logger.branch(TreeLogger.ERROR, "Unable to invoke SerializableTypeOracleBuilder constructor", null);
        throw new UnableToCompleteException();
    }
    /* End of Hack */
    JMethod[] methods = this.serviceType.getOverridableMethods();
    TypeOracle typeOracle = context.getTypeOracle();

    JClassType rteType = typeOracle.getType(RpcTokenException.class.getName());
    JClassType rpcTokenClass = typeOracle.getType(RpcToken.class.getName());
    RpcTokenImplementation tokenClassToUse = this.serviceType
            .findAnnotationInTypeHierarchy(RpcTokenImplementation.class);
    if (tokenClassToUse != null) {
        JClassType rpcTokenType = typeOracle.getType(tokenClassToUse.value());
        if (rpcTokenType.isAssignableTo(rpcTokenClass)) {
            typesSentFromBrowser.addRootType(logger, rpcTokenType);
            typesSentToBrowser.addRootType(logger, rteType);
        } else {
            logger.branch(TreeLogger.ERROR, "RPC token class " + tokenClassToUse.value() + " must implement "
                    + RpcToken.class.getName(), null);
            throw new UnableToCompleteException();
        }
    } else {
        JClassType[] rpcTokenSubclasses = rpcTokenClass.getSubtypes();
        for (JClassType rpcTokenSubclass : rpcTokenSubclasses) {
            typesSentFromBrowser.addRootType(logger, rpcTokenSubclass);
        }
        if (rpcTokenSubclasses.length > 0) {
            typesSentToBrowser.addRootType(logger, rteType);
        }
    }
    typesSentFromBrowser.addRootType(logger, typeOracle.getType(CommandDefinition.class.getName()));
    typesSentFromBrowser.addRootType(logger, typeOracle.getType(CommandRequest.class.getName()));
    typesSentToBrowser.addRootType(logger, typeOracle.getType(CommandResponse.class.getName()));

    for (JMethod method : methods) {
        JType returnType = method.getReturnType();
        if (returnType != JPrimitiveType.VOID) {
            typesSentToBrowser.addRootType(logger, returnType);
        }

        JParameter[] params = method.getParameters();
        for (JParameter param : params) {
            JType paramType = param.getType();
            typesSentFromBrowser.addRootType(logger, paramType);
        }

        JType[] exs = method.getThrows();
        if (exs.length > 0) {
            for (JType ex : exs) {
                typesSentToBrowser.addRootType(logger, ex);
            }
        }
    }

    String serializerSimpleName = this.serviceType.getSimpleSourceName() + "_TypeSerializer";
    String serializeQualifiedName = this.serviceType.getQualifiedSourceName() + "_TypeSerializer";

    TypeSerializerCreator tsc = new TypeSerializerCreator(logger, typesSentFromBrowser.build(logger),
            typesSentToBrowser.build(logger), context, serializeQualifiedName, serializerSimpleName);

    return tsc.realize(logger);
}

From source file:net.zschech.gwt.comet.rebind.CometSerializerGenerator.java

License:Apache License

@Override
public RebindResult generateIncrementally(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {

    TypeOracle typeOracle = context.getTypeOracle();

    // Create the CometSerializer impl
    String packageName = "comet";
    String className = typeName.replace('.', '_') + "Impl";
    PrintWriter printWriter = context.tryCreate(logger, packageName, className);

    if (printWriter != null) {

        try {/*from   ww w  .j  av  a2 s .  c  om*/
            JClassType type = typeOracle.getType(typeName);
            SerialTypes annotation = type.getAnnotation(SerialTypes.class);
            if (annotation == null) {
                logger.log(TreeLogger.ERROR, "No SerialTypes annotation on CometSerializer type: " + typeName);
                throw new UnableToCompleteException();
            }

            SerializableTypeOracleBuilder typesSentToBrowserBuilder = new SerializableTypeOracleBuilder(logger,
                    context.getPropertyOracle(), context);
            SerializableTypeOracleBuilder typesSentFromBrowserBuilder = new SerializableTypeOracleBuilder(
                    logger, context.getPropertyOracle(), context);

            for (Class<? extends Serializable> serializable : annotation.value()) {
                int rank = 0;
                if (serializable.isArray()) {
                    while (serializable.isArray()) {
                        serializable = (Class<? extends Serializable>) serializable.getComponentType();
                        rank++;
                    }
                }

                JType resolvedType = typeOracle.getType(serializable.getCanonicalName());
                while (rank > 0) {
                    resolvedType = typeOracle.getArrayType(resolvedType);
                    rank--;
                }

                typesSentToBrowserBuilder.addRootType(logger, resolvedType);
            }

            OutputStream pathInfo = context.tryCreateResource(logger, typeName + ".rpc.log");
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(pathInfo));
            writer.write("====================================\n");
            writer.write("Types potentially sent from browser:\n");
            writer.write("====================================\n\n");
            writer.flush();

            typesSentToBrowserBuilder.setLogOutputWriter(writer);
            SerializableTypeOracle typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);

            writer.write("===================================\n");
            writer.write("Types potentially sent from server:\n");
            writer.write("===================================\n\n");
            writer.flush();
            typesSentFromBrowserBuilder.setLogOutputWriter(writer);
            SerializableTypeOracle typesSentToBrowser = typesSentToBrowserBuilder.build(logger);

            writer.close();

            if (pathInfo != null) {
                context.commitResource(logger, pathInfo).setPrivate(true);
            }

            // Create the serializer
            String modifiedTypeName = typeName.replace('.', '_') + "Serializer";
            TypeSerializerCreator tsc = new TypeSerializerCreator(logger, typesSentFromBrowser,
                    typesSentToBrowser, context, "comet." + modifiedTypeName, modifiedTypeName);
            String realize = tsc.realize(logger);

            // Create the CometSerializer impl
            ClassSourceFileComposerFactory composerFactory = new ClassSourceFileComposerFactory(packageName,
                    className);

            composerFactory.addImport(Serializer.class.getName());
            composerFactory.addImport(SerialMode.class.getName());

            composerFactory.setSuperclass(typeName);
            // TODO is the SERIALIZER required for DE RPC?
            SourceWriter sourceWriter = composerFactory.createSourceWriter(context, printWriter);
            sourceWriter.print("private Serializer SERIALIZER = new " + realize + "();");
            sourceWriter.print("protected Serializer getSerializer() {return SERIALIZER;}");
            sourceWriter
                    .print("public SerialMode getMode() {return SerialMode." + annotation.mode().name() + ";}");
            sourceWriter.commit(logger);

            if (annotation.mode() == SerialMode.DE_RPC) {
                RpcDataArtifact data = new RpcDataArtifact(type.getQualifiedSourceName());
                for (JType t : typesSentToBrowser.getSerializableTypes()) {
                    if (!(t instanceof JClassType)) {
                        continue;
                    }
                    JField[] serializableFields = SerializationUtils
                            .getSerializableFields(context.getTypeOracle(), (JClassType) t);

                    List<String> names = Lists.create();
                    for (int i = 0, j = serializableFields.length; i < j; i++) {
                        names = Lists.add(names, serializableFields[i].getName());
                    }

                    data.setFields(SerializationUtils.getRpcTypeName(t), names);
                }

                context.commitArtifact(logger, data);
            }
        } catch (NotFoundException e) {
            logger.log(TreeLogger.ERROR, "", e);
            throw new UnableToCompleteException();
        }
    }

    return new RebindResult(RebindMode.USE_PARTIAL_CACHED, packageName + '.' + className);
}

From source file:org.atmosphere.extensions.gwtwrapper.rebind.SerializerGenerator.java

License:Apache License

@Override
public RebindResult generateIncrementally(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {

    TypeOracle typeOracle = context.getTypeOracle();

    // Create the CometSerializer impl
    String packageName = "comet";
    String className = typeName.replace('.', '_') + "Impl";
    PrintWriter printWriter = context.tryCreate(logger, packageName, className);

    if (printWriter != null) {

        try {//from w ww.  j  ava 2s.co m
            JClassType type = typeOracle.getType(typeName);
            GwtSerialTypes annotation = type.getAnnotation(GwtSerialTypes.class);
            if (annotation == null) {
                logger.log(TreeLogger.ERROR, "No SerialTypes annotation on CometSerializer type: " + typeName);
                throw new UnableToCompleteException();
            }

            SerializableTypeOracleBuilder typesSentToBrowserBuilder = new SerializableTypeOracleBuilder(logger,
                    context.getPropertyOracle(), context);
            SerializableTypeOracleBuilder typesSentFromBrowserBuilder = new SerializableTypeOracleBuilder(
                    logger, context.getPropertyOracle(), context);

            List<Class<?>> serializableTypes = new ArrayList();
            Collections.addAll(serializableTypes, annotation.value());
            for (Class<?> serializable : serializableTypes) {
                int rank = 0;
                if (serializable.isArray()) {
                    while (serializable.isArray()) {
                        serializable = (Class<?>) serializable.getComponentType();
                        rank++;
                    }
                }

                JType resolvedType = typeOracle.getType(serializable.getCanonicalName());
                while (rank > 0) {
                    resolvedType = typeOracle.getArrayType(resolvedType);
                    rank--;
                }

                typesSentToBrowserBuilder.addRootType(logger, resolvedType);
                typesSentFromBrowserBuilder.addRootType(logger, resolvedType);
            }

            // Create a resource file to receive all of the serialization information
            // computed by STOB and mark it as private so it does not end up in the
            // output.
            OutputStream pathInfo = context.tryCreateResource(logger, typeName + ".rpc.log");
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(pathInfo));
            writer.write("====================================\n");
            writer.write("Types potentially sent from server:\n");
            writer.write("====================================\n\n");
            writer.flush();

            typesSentToBrowserBuilder.setLogOutputWriter(writer);
            SerializableTypeOracle typesSentToBrowser = typesSentToBrowserBuilder.build(logger);

            writer.write("===================================\n");
            writer.write("Types potentially sent from browser:\n");
            writer.write("===================================\n\n");
            writer.flush();
            typesSentFromBrowserBuilder.setLogOutputWriter(writer);
            SerializableTypeOracle typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);

            writer.close();

            if (pathInfo != null) {
                context.commitResource(logger, pathInfo).setPrivate(true);
            }

            // Create the serializer
            final String modifiedTypeName = typeName.replace('.', '_');
            TypeSerializerCreator tsc = new TypeSerializerCreator(logger, typesSentFromBrowser,
                    typesSentToBrowser, context, "comet." + modifiedTypeName, modifiedTypeName);
            String realize = tsc.realize(logger);

            // Create the CometSerializer impl
            ClassSourceFileComposerFactory composerFactory = new ClassSourceFileComposerFactory(packageName,
                    className);

            composerFactory.addImport(Serializer.class.getName());
            composerFactory.addImport(SerializationException.class.getName());
            composerFactory.addImport(Serializable.class.getName());

            composerFactory.setSuperclass(typeName);
            // TODO is the SERIALIZER required for DE RPC?
            SourceWriter sourceWriter = composerFactory.createSourceWriter(context, printWriter);
            sourceWriter.print("private Serializer SERIALIZER = new " + realize + "();");
            sourceWriter.print("protected Serializer getRPCSerializer() {return SERIALIZER;}");
            sourceWriter.commit(logger);

        } catch (NotFoundException e) {
            logger.log(TreeLogger.ERROR, "", e);
            throw new UnableToCompleteException();
        }
    }

    return new RebindResult(RebindMode.USE_ALL_NEW_WITH_NO_CACHING, packageName + '.' + className);
}

From source file:org.atmosphere.gwt.rebind.SerializerGenerator.java

License:Apache License

@Override
public RebindResult generateIncrementally(TreeLogger logger, GeneratorContextExt context, String typeName)
        throws UnableToCompleteException {

    TypeOracle typeOracle = context.getTypeOracle();

    // Create the CometSerializer impl
    String packageName = "comet";
    String className = typeName.replace('.', '_') + "Impl";
    PrintWriter printWriter = context.tryCreate(logger, packageName, className);

    if (printWriter != null) {

        try {//from  w ww  .  j a v a  2 s  .c  o  m
            JClassType type = typeOracle.getType(typeName);
            SerialTypes annotation = type.getAnnotation(SerialTypes.class);
            if (annotation == null) {
                logger.log(TreeLogger.ERROR, "No SerialTypes annotation on CometSerializer type: " + typeName);
                throw new UnableToCompleteException();
            }

            SerializableTypeOracleBuilder typesSentToBrowserBuilder = new SerializableTypeOracleBuilder(logger,
                    context.getPropertyOracle(), context);
            SerializableTypeOracleBuilder typesSentFromBrowserBuilder = new SerializableTypeOracleBuilder(
                    logger, context.getPropertyOracle(), context);

            for (Class<? extends Serializable> serializable : annotation.value()) {
                int rank = 0;
                if (serializable.isArray()) {
                    while (serializable.isArray()) {
                        serializable = (Class<? extends Serializable>) serializable.getComponentType();
                        rank++;
                    }
                }

                JType resolvedType = typeOracle.getType(serializable.getCanonicalName());
                while (rank > 0) {
                    resolvedType = typeOracle.getArrayType(resolvedType);
                    rank--;
                }

                typesSentToBrowserBuilder.addRootType(logger, resolvedType);
                typesSentFromBrowserBuilder.addRootType(logger, resolvedType);
            }

            // Create a resource file to receive all of the serialization information
            // computed by STOB and mark it as private so it does not end up in the
            // output.
            OutputStream pathInfo = context.tryCreateResource(logger, typeName + ".rpc.log");
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(pathInfo));
            writer.write("====================================\n");
            writer.write("Types potentially sent from server:\n");
            writer.write("====================================\n\n");
            writer.flush();

            typesSentToBrowserBuilder.setLogOutputWriter(writer);
            SerializableTypeOracle typesSentToBrowser = typesSentToBrowserBuilder.build(logger);

            writer.write("===================================\n");
            writer.write("Types potentially sent from browser:\n");
            writer.write("===================================\n\n");
            writer.flush();
            typesSentFromBrowserBuilder.setLogOutputWriter(writer);
            SerializableTypeOracle typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);

            writer.close();

            if (pathInfo != null) {
                context.commitResource(logger, pathInfo).setPrivate(true);
            }

            // Create the serializer
            final String modifiedTypeName = typeName.replace('.', '_');
            TypeSerializerCreator tsc = new TypeSerializerCreator(logger, typesSentFromBrowser,
                    typesSentToBrowser, context, "comet." + modifiedTypeName, modifiedTypeName);
            String realize = tsc.realize(logger);

            // Create the CometSerializer impl
            ClassSourceFileComposerFactory composerFactory = new ClassSourceFileComposerFactory(packageName,
                    className);

            composerFactory.addImport(Serializer.class.getName());
            composerFactory.addImport(SerialMode.class.getName());

            composerFactory.setSuperclass(typeName);
            // TODO is the SERIALIZER required for DE RPC?
            SourceWriter sourceWriter = composerFactory.createSourceWriter(context, printWriter);
            sourceWriter.print("private Serializer SERIALIZER = new " + realize + "();");
            sourceWriter.print("protected Serializer getSerializer() {return SERIALIZER;}");
            sourceWriter
                    .print("public SerialMode getMode() {return SerialMode." + annotation.mode().name() + ";}");
            sourceWriter.print("public SerialMode getPushMode() {return SerialMode."
                    + annotation.pushmode().name() + ";}");
            sourceWriter.commit(logger);

            if (annotation.mode() == SerialMode.DE_RPC) {
                RpcDataArtifact data = new RpcDataArtifact(type.getQualifiedSourceName());
                for (JType t : typesSentToBrowser.getSerializableTypes()) {
                    if (!(t instanceof JClassType)) {
                        continue;
                    }
                    JField[] serializableFields = SerializationUtils
                            .getSerializableFields(context.getTypeOracle(), (JClassType) t);

                    List<String> names = Lists.create();
                    for (int i = 0, j = serializableFields.length; i < j; i++) {
                        names = Lists.add(names, serializableFields[i].getName());
                    }

                    data.setFields(SerializationUtils.getRpcTypeName(t), names);
                }

                context.commitArtifact(logger, data);
            }
        } catch (NotFoundException e) {
            logger.log(TreeLogger.ERROR, "", e);
            throw new UnableToCompleteException();
        }
    }

    return new RebindResult(RebindStatus.USE_PARTIAL_CACHED, packageName + '.' + className);
}

From source file:org.atmosphere.gwt20.rebind.SerializerGenerator.java

License:Apache License

@Override
public RebindResult generateIncrementally(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {

    TypeOracle typeOracle = context.getTypeOracle();

    // Create the CometSerializer impl
    String packageName = "comet";
    String className = typeName.replace('.', '_') + "Impl";
    PrintWriter printWriter = context.tryCreate(logger, packageName, className);

    if (printWriter != null) {

        try {/*  w w w.j a  v  a  2s  .  c  om*/
            JClassType type = typeOracle.getType(typeName);
            GwtRpcSerialTypes annotation = type.getAnnotation(GwtRpcSerialTypes.class);
            if (annotation == null) {
                logger.log(TreeLogger.ERROR, "No SerialTypes annotation on CometSerializer type: " + typeName);
                throw new UnableToCompleteException();
            }

            SerializableTypeOracleBuilder typesSentToBrowserBuilder = new SerializableTypeOracleBuilder(logger,
                    context.getPropertyOracle(), context);
            SerializableTypeOracleBuilder typesSentFromBrowserBuilder = new SerializableTypeOracleBuilder(
                    logger, context.getPropertyOracle(), context);

            List<Class<?>> serializableTypes = new ArrayList();
            Collections.addAll(serializableTypes, annotation.value());
            for (Class<?> serializable : serializableTypes) {
                int rank = 0;
                if (serializable.isArray()) {
                    while (serializable.isArray()) {
                        serializable = (Class<?>) serializable.getComponentType();
                        rank++;
                    }
                }

                JType resolvedType = typeOracle.getType(serializable.getCanonicalName());
                while (rank > 0) {
                    resolvedType = typeOracle.getArrayType(resolvedType);
                    rank--;
                }

                typesSentToBrowserBuilder.addRootType(logger, resolvedType);
                typesSentFromBrowserBuilder.addRootType(logger, resolvedType);
            }

            // Create a resource file to receive all of the serialization information
            // computed by STOB and mark it as private so it does not end up in the
            // output.
            OutputStream pathInfo = context.tryCreateResource(logger, typeName + ".rpc.log");
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(pathInfo));
            writer.write("====================================\n");
            writer.write("Types potentially sent from server:\n");
            writer.write("====================================\n\n");
            writer.flush();

            typesSentToBrowserBuilder.setLogOutputWriter(writer);
            SerializableTypeOracle typesSentToBrowser = typesSentToBrowserBuilder.build(logger);

            writer.write("===================================\n");
            writer.write("Types potentially sent from browser:\n");
            writer.write("===================================\n\n");
            writer.flush();
            typesSentFromBrowserBuilder.setLogOutputWriter(writer);
            SerializableTypeOracle typesSentFromBrowser = typesSentFromBrowserBuilder.build(logger);

            writer.close();

            if (pathInfo != null) {
                context.commitResource(logger, pathInfo).setPrivate(true);
            }

            // Create the serializer
            final String modifiedTypeName = typeName.replace('.', '_');
            TypeSerializerCreator tsc = new TypeSerializerCreator(logger, typesSentFromBrowser,
                    typesSentToBrowser, context, "comet." + modifiedTypeName, modifiedTypeName);
            String realize = tsc.realize(logger);

            // Create the CometSerializer impl
            ClassSourceFileComposerFactory composerFactory = new ClassSourceFileComposerFactory(packageName,
                    className);

            composerFactory.addImport(Serializer.class.getName());
            composerFactory.addImport(SerializationException.class.getName());
            composerFactory.addImport(Serializable.class.getName());

            composerFactory.setSuperclass(typeName);
            SourceWriter sourceWriter = composerFactory.createSourceWriter(context, printWriter);
            sourceWriter.print("private Serializer SERIALIZER = new " + realize + "();");
            sourceWriter.print("protected Serializer getRPCSerializer() {return SERIALIZER;}");
            sourceWriter.commit(logger);

        } catch (NotFoundException e) {
            logger.log(TreeLogger.ERROR, "", e);
            throw new UnableToCompleteException();
        }
    }

    return new RebindResult(RebindMode.USE_ALL_NEW_WITH_NO_CACHING, packageName + '.' + className);
}

From source file:org.restlet.rebind.ClientProxyGenerator.java

License:LGPL

/**
 * Generates the code of the necessary object serializers.
 * /*from   w  ww .  jav a 2 s . co  m*/
 * @throws UnableToCompleteException
 */
protected void generateSerializers() throws UnableToCompleteException {
    try {
        this.stob = new SerializableTypeOracleBuilder(getLogger(), getContext().getPropertyOracle(),
                getTypeOracle());

        // Discover and add serializable types
        getStob().addRootType(getLogger(), getTypeOracle().getType(String.class.getName()));
        JMethod[] methods = getClassType().getOverridableMethods();
        JClassType exceptionClass = getTypeOracle().getType(Exception.class.getName());
        JType asyncType = getTypeOracle().getType(AsyncCallback.class.getName());
        JType cbType = getTypeOracle().getType(Result.class.getName());

        for (JMethod method : methods) {
            if (!"getClientResource".equals(method.getName())) {
                JType returnType = method.getReturnType();

                if (returnType != JPrimitiveType.VOID) {
                    getStob().addRootType(getLogger(), returnType);
                }

                JParameter[] parameters = method.getParameters();
                for (JParameter parameter : parameters) {
                    JType parameterType = parameter.getType();
                    JParameterizedType parameterizedType = parameterType.isParameterized();
                    if (parameterizedType == null) {
                        // Non generic type.
                        getStob().addRootType(getLogger(), parameterType);
                    } else if (((parameterizedType.getBaseType() != asyncType)
                            && (parameterizedType.getBaseType() != cbType))) {
                        // Generic type but not a callback.
                        getStob().addRootType(getLogger(), parameterType);
                    } else {
                        // Callback type, inspect the "inner" type.
                        if (parameterizedType.getTypeArgs().length > 0) {
                            JClassType t = parameterizedType.getTypeArgs()[0];
                            // Add the enclosed type if it is not equals to
                            // java.lang.Void.
                            if (t != null && !("Void".equals(t.getName())
                                    && "java.lang".equals(t.getPackage().getName()))) {
                                getStob().addRootType(getLogger(), t);
                            }
                        }
                    }
                }

                JType[] exceptions = method.getThrows();
                if (exceptions.length > 0) {
                    for (JType exception : exceptions) {
                        if (!exceptionClass.isAssignableFrom(exception.isClass())) {
                            getLogger().log(Type.WARN, "Only checked exceptions are supported");
                        }

                        getStob().addRootType(getLogger(), exception);
                    }
                }
            }
        }

        // Log serialization information
        OutputStream los = getContext().tryCreateResource(getLogger(),
                getClassType().getQualifiedSourceName() + ".restlet.log");
        getStob().setLogOutputStream(los);
        this.sto = getStob().build(getLogger());

        if (los != null) {
            getContext().commitResource(getLogger(), los).setPrivate(true);
        }

        TypeSerializerCreator tsc = null;
        try {
            tsc = getTypeSerializerCreatorGwt1_7();
        } catch (Exception e) {
            try {
                tsc = getTypeSerializerCreatorGwt2_0();
            } catch (Exception e2) {
                getLogger().log(TreeLogger.ERROR, "", e2);
                throw new UnableToCompleteException();
            }
        }
        if (tsc != null) {
            tsc.realize(getLogger());
        } else {
            getLogger().log(TreeLogger.ERROR, "Cannot create a TypeSerializerCreator instance.");
            throw new UnableToCompleteException();
        }
    } catch (NotFoundException e) {
        getLogger().log(TreeLogger.ERROR, "", e);
        throw new UnableToCompleteException();
    }
}