org.jboss.bpm.console.rebind.WorkspaceGenerator.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.bpm.console.rebind.WorkspaceGenerator.java

Source

/*
 * JBoss, Home of Professional Open Source.
 * Copyright 2006, Red Hat Middleware LLC, and individual contributors
 * as indicated by the @author tags. See the copyright.txt file in the
 * distribution for a full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package org.jboss.bpm.console.rebind;

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;

import java.io.*;

/**
 * @author Heiko.Braun <heiko.braun@jboss.com>
 */
public class WorkspaceGenerator extends Generator {
    /**
     * Simple name of class to be generated
     */
    private String className = null;
    /**
     * Package name of class to be generated
     */
    private String packageName = null;
    /**
     * Fully qualified class name passed into GWT.create()
     */
    private String typeName = null;

    public static final String WORKSPACE_CONFIG_DEFAULT = "org/jboss/bpm/console/workspace-default.cfg";
    public static final String WORKSPACE_CONFIG = "org/jboss/bpm/console/workspace.cfg";

    public String generate(TreeLogger logger, GeneratorContext context, String typeName)
            throws UnableToCompleteException {
        this.typeName = typeName;
        TypeOracle typeOracle = context.getTypeOracle();

        try {
            // get classType and save instance variables
            JClassType classType = typeOracle.getType(typeName);
            packageName = classType.getPackage().getName();
            className = classType.getSimpleSourceName() + "Wrapper";

            // Generate class source code
            generateClass(logger, context);

        } catch (Exception e) {
            // record to logger that Map generation threw an exception
            e.printStackTrace(System.out);
            logger.log(TreeLogger.ERROR, "Failed to generate workspace launcher", e);
        }

        // return the fully qualifed name of the class generated
        return packageName + "." + className;
    }

    /**
     * Generate source code for new class. Class extends
     * <code>HashMap</code>.
     *
     * @param logger  Logger object
     * @param context Generator context
     */
    private void generateClass(TreeLogger logger, GeneratorContext context) {

        // get print writer that receives the source code
        PrintWriter printWriter = null;
        printWriter = context.tryCreate(logger, packageName, className);

        // print writer if null, source code has ALREADY been generated, return
        if (printWriter == null)
            return;

        // init composer, set class properties, create source writer
        ClassSourceFileComposerFactory composerFactory = new ClassSourceFileComposerFactory(packageName, className);

        // Imports
        //composerFactory.addImport("org.jboss.bpm.console.client.ApplicationContext");
        composerFactory.addImport("org.jboss.bpm.console.client.Workspace");
        composerFactory.addImport("org.jboss.bpm.console.client.WorkspaceLauncher");

        // Interfaces
        composerFactory.addImplementedInterface("org.jboss.bpm.console.client.WorkspaceLauncher");

        // SourceWriter
        SourceWriter sourceWriter = composerFactory.createSourceWriter(context, printWriter);

        // Methods
        generateMethods(sourceWriter);

        // close generated class
        sourceWriter.outdent();
        sourceWriter.println("}");

        // commit generated class
        context.commit(logger, printWriter);
    }

    private void generateMethods(SourceWriter sourceWriter) {
        // start constructor source generation
        sourceWriter.println("public void launch(Workspace workspace) { ");
        sourceWriter.indent();

        InputStream in = getClass().getClassLoader().getResourceAsStream(WORKSPACE_CONFIG);

        if (null == in) {
            in = getClass().getClassLoader().getResourceAsStream(WORKSPACE_CONFIG_DEFAULT);
            if (null == in)
                throw new RuntimeException(
                        "Cannot find '" + WORKSPACE_CONFIG + "' or '" + WORKSPACE_CONFIG_DEFAULT + "'");
        }

        try {
            //use buffering, reading one line at a time
            //FileReader always assumes default encoding is OK!
            BufferedReader input = new BufferedReader(new InputStreamReader(in));
            try {
                String line = null;
                while ((line = input.readLine()) != null) {

                    // ignore comments and empty lines
                    if (line.equals("") || line.startsWith("#"))
                        continue;

                    sourceWriter.println("workspace.addEditor( new " + line + "(), false );");
                }
            } finally {
                input.close();
            }
        } catch (IOException ex) {
            throw new RuntimeException("Error reading '" + WORKSPACE_CONFIG + "'");
        }

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

    /*private void generateConstructor(SourceWriter sourceWriter)
    {
      // start constructor source generation
      sourceWriter.println("public " + className + "() { ");
      sourceWriter.indent();
      sourceWriter.println("super();");
      // end constructor source generation 
      sourceWriter.outdent();
      sourceWriter.println("}");
    }*/

}