`
forestking
  • 浏览: 43827 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

GWT 如何使用Generator

GWT 
阅读更多

原文在这里  http://groups.google.com/group/Google-Web-Toolkit/msg/ae249ea67c2c3435?pli=1

记录在这里是方便以后可以很容易找到

 

/**
 *
 */
package com.gwt.web.client .generator;

import java.util.Map;

/**
 * @author
 *
 */
public interface PropertyMap extends Map{

}

 

/**
 *
 */
package com.gwt.web.server .generator;

import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.google.gwt.core.ext.Generator;
import com.google.gwt.core.ext.GeneratorContext;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;

/**
 * @author
 *
 */
public class PropertyMapGenerator extends Generator {
    private static final Logger log = Logger
            .getLogger(PropertyMapGenerator.class.getCanonicalName());
    private String className;
    private String typeName;
    private String packageName;

    /*
     * (non-Javadoc)
     *
     * @see
     * com.google.gwt.core.ext.Generator#generate(com.google.gwt.core.ext.TreeLogger
     * , com.google.gwt.core.ext.GeneratorContext, java.lang.String)
     */
    @Override
    public String generate(TreeLogger logger, GeneratorContext context,
            String typeName) throws UnableToCompleteException {
        log.log(Level.FINE, "generate() called with [" + typeName + "].");
        this.typeName = typeName;
        TypeOracle typeOracle = context.getTypeOracle();
        try {
            JClassType classType = typeOracle.getType(typeName);
            packageName = classType.getPackage().getName();
            className = classType.getSimpleSourceName() + "Wrapper";
            generateClass(logger, context);
        } catch (Exception ex) {
            log.log(Level.SEVERE, "Failed due to [" + ex.getMessage() + "]", ex);
        }
        return packageName + "." + className;
    }

    private void generateClass(TreeLogger logger, GeneratorContext context) {
        PrintWriter writer = context.tryCreate(logger, packageName, className);
        if (writer == null) {
            // source code already generated, just return;
            return;
        }

        ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(
                packageName, className);

        composer.setSuperclass("java.util.HashMap");
        SourceWriter sourceWriter = composer
                .createSourceWriter(context, writer);
        generateConstructor(sourceWriter);
        sourceWriter.outdent();
        sourceWriter.println("}");
        context.commit(logger, writer);
    }

    private void generateConstructor(SourceWriter sourceWriter) {
        // init resource bundle
        ResourceBundle bundle = ResourceBundle.getBundle(typeName);

        // start constructor source generation
        sourceWriter.println("public " + className + "() { ");
        sourceWriter.indent();
        sourceWriter.println("super();");

        // add statements to pub key/value pairs from the resrouce bundle
        for (Enumeration<String> keys = bundle.getKeys(); keys
                .hasMoreElements();) {
            String key = keys.nextElement();
            sourceWriter.println("put(\"" + Generator.escape(key) + "\", \""
                    + bundle.getString(key) + "\");");
        }

        // end constructor source generation
        sourceWriter.outdent();
        sourceWriter.println("}");
    }

}

 

在module.xml 文件里

    <generate-with class="com.gwt.web.server.generator.PropertyMapGenerator">
        <when-type-assignable class="com.gwt.web.client.generator.PropertyMap" />
    </generate-with>

 

如何使用

package com.gwt.web.client.resource;

import com.gwt.web.client.generator.PropertyMap;

/**
 * @author
 *
 */
public interface MyPropertyMap extends PropertyMap {

}

同一package下面的同名property文件的内容

message = Hello, World;

 

Map properties = GWT.create(MyPropertyMap.class);

//这里如果试图使用propertymap运行时会出错。如果在设置superclass的时候设置为PropertyMap,编译会出错:

11:01:22.273 [ERROR] [gwt_start] Line 3: The type PropertyMap cannot be the superclass of MyPropertyMapWrapper; a superclass must be a class 。 在这里消除这中诡异的和java语法不一致的方法是不适用PropertyMap,这个只是为了方便说明。另外一个方式应该可以通过从hashmap继承,而不是通过interface。

 

分享到:
评论
1 楼 endisonlai 2013-05-02  
marker,谢谢分享。

相关推荐

    gwt-api-generator:用于从Polymer Web Components创建GWT JSInterop客户端的生成器

    gwt-api-generator gwt-api-generator是一种工具,用于为作为输入提供JavaScript库生成GWT Java API,前提是它们的API用JSDoc注释修饰。 当前,生成器仅支持以Polymer 1.0语法编写的Web组件。 将来可能会添加对...

    GWT Best Practices

    I found a number of GWT best practices apps focusing on one or maybe two GWT components. This is my attempt to add all the major GWT best practices. Feel free to download the source and run it. It's ...

    generator:包装器生成器

    "generator:包装器生成器"这个项目,专门用于创建Highcharts库的GWT(Google Web Toolkit)包装器。Highcharts是一个流行的JavaScript库,用于创建高质量的数据可视化图表,如折线图、柱状图、饼图等。而GWT则是一个...

    org.liveSense.sample.gwt.notes-1.0.5.zip

    org.liveSense.service.thumbnailGenerator.zip,livesense缩略图生成器服务和observer livesense缩略图生成器服务和observer

    phloc-jms-1.1.0.zip

    这个插件特别适用于那些使用Apache Thrift且需要将Thrift定义的结构转换为POJO格式的情况,如在GWT(Google Web Toolkit)项目中,GWT是一个用于构建富互联网应用程序的框架,它要求服务器端数据模型为POJO,以便在...

    jsinterop-generator:从JavaScript外部源生成用JsInterop注释的Java

    您可以使用jsinterop_generator规则来生成Java代码。 您需要将此存储库作为外部依赖项添加到WORKSPACE文件中new_http_archive( name = "com_google_jsinterop_generator", url=...

    系统架构图1

    在描述中提到的GWT(Google Web Toolkit)是一个用于构建富互联网应用(RIA)的开放源代码开发工具,允许开发者使用Java语言编写客户端的Web应用。 2. **控制层(Control Layer)**:这部分负责处理用户的输入和...

    Compiler, Javacc

    5. **代码生成器(Code Generator)**:将优化后的中间代码转换为目标机器语言。 **Javacc简介** Javacc是基于Java的解析器生成器,它使用JavaCC工具生成Java源代码,这些源代码可以解析特定的语言或格式。用户通过...

    java开源包8

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    系统架构图-组件图-活动图1

    在数据支持层中,我们可以看到领域背景、TagedGWT、GWT、RUCM四个基本数据结构,这些数据结构是其他层的基础,提供了基本的数据支持。这些数据结构是系统的基石,其他层面都依赖于这些数据结构。 从活动图的角度来...

    50个实用的JavaScript工具和技术开发

    **Google Web Toolkit (GWT)** - **简介**:由Google推出的框架,支持使用Java语言进行Ajax应用的开发,降低了Ajax应用开发的难度。 - **应用场景**:适合那些熟悉Java语言且希望利用Java的强类型特点来开发Web...

    模型与代码之间一致性的检查1

    描述中提到了响应层、功能支持层和数据支持层的具体模块映射,如GWT导入器、领域背景导入和RUCM Generator等,都需要在代码中找到相应的实现。 组件图的一致性检查则需要确认每个组件在代码中被正确实现,并且调用...

    java开源包1

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包11

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包2

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包3

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包6

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包5

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包10

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

    java开源包4

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java...

Global site tag (gtag.js) - Google Analytics