Example usage for com.google.gwt.core.ext GeneratorContext commit

List of usage examples for com.google.gwt.core.ext GeneratorContext commit

Introduction

In this page you can find the example usage for com.google.gwt.core.ext GeneratorContext commit.

Prototype

void commit(TreeLogger logger, PrintWriter pw);

Source Link

Document

Commits source generation begun with #tryCreate(TreeLogger,String,String) .

Usage

From source file:cc.alcina.framework.entity.gwtsynth.ClientReflectionGenerator.java

License:Apache License

private void commit(GeneratorContext context, TreeLogger logger, PrintWriter printWriter) {
    context.commit(logger, printWriter);
    if (wrappedWriters.containsKey(printWriter)) {
        System.out.println(wrappedWriters.get(printWriter).getStringWriter().toString());
    }//from  w w w  . j av a  2s  . c  om
}

From source file:com.arondor.common.reflection.noreflect.gwtgenerator.GWTNoReflectRegistrarGenerator.java

License:Apache License

@Override
public String generate(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {
    LOGGER.finest("Generating for: " + typeName);

    String packageName = getPackageName();
    String className = getClassName();
    String completeName = packageName + "." + className;

    PrintWriter src = context.tryCreate(logger, packageName, className);

    if (src == null) {
        LOGGER.finest("Already generated for : " + completeName);
        return completeName;
    }/*from w  w w  . j  a  va2 s  . c  o m*/

    Collection<AccessibleClass> accessibleClasses = getAccessibleClasses();

    NoReflectRegistrarGenerator noReflect = new NoReflectRegistrarGenerator();
    noReflect.setClassName(className);
    noReflect.setPackageName(packageName);

    JavaAccessibleClassParser accessibleClassParser = new JavaAccessibleClassParser();
    accessibleClassParser.setTryInstantiateClassForDefaultValue(false);
    noReflect.setAccessibleClassParser(accessibleClassParser);

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PrintStream printStream = new PrintStream(baos);

    noReflect.generate(printStream, accessibleClasses);

    printStream.close();

    String srcCode = new String(baos.toByteArray());

    LOGGER.info("Generated : " + srcCode.length() + " bytes for " + completeName);

    src.append(srcCode);

    context.commit(logger, src);

    return completeName;
}

From source file:com.bramosystems.oss.player.core.rebind.PlayerManagerGenerator.java

License:Apache License

/**
 * @param logger Logger object// w w w  .j a v a 2 s. co  m
 * @param context Generator context
 */
private void generateClass(TreeLogger logger, GeneratorContext context)
        throws NotFoundException, BadPropertyValueException, UnableToCompleteException, IOException {
    // get print writer that receives the source code
    PrintWriter printWriter = context.tryCreate(logger, packageName, className);

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

    // build plugin mime types ...
    ConfigurationProperty mimeFile = context.getPropertyOracle()
            .getConfigurationProperty("bstplayer.media.mimeTypes");
    String val = mimeFile.getValues().get(0);
    if (val == null) {
        logger.log(TreeLogger.Type.INFO,
                "'" + mimeFile.getName() + "' configuration property not set! Using defaults");
        parseMimeFile(DEFAULT_MIME_TYPES_FILE);
    } else {
        logger.log(TreeLogger.Type.INFO, "'" + mimeFile.getName() + "' set! Using '" + val + "'");
        parseMimeFile(val);
    }

    collatePlayers(context.getTypeOracle());

    // init composer, set class properties, create source writer
    ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(packageName, className);
    composer.setSuperclass("PlayerManager");
    composer.addImport("com.google.gwt.core.client.GWT");
    composer.addImport("com.bramosystems.oss.player.core.client.spi.PlayerProviderFactory");
    composer.addImport("com.bramosystems.oss.player.core.client.impl.CallbackUtility");
    composer.addImport("com.bramosystems.oss.player.core.client.spi.ConfigurationContext");
    composer.addImport("com.bramosystems.oss.player.core.client.*");
    composer.addImport("java.util.*");

    SourceWriter sourceWriter = composer.createSourceWriter(context, printWriter);

    sourceWriter.println(
            "private HashMap<String, HashMap<String, PlayerInfo>> pInfos = new HashMap<String, HashMap<String, PlayerInfo>>();");

    // collate widget factories & create static holders ...
    Iterator<String> fact = pMap.keySet().iterator();
    while (fact.hasNext()) {
        String provClass = fact.next();
        sourceWriter.println("private static PlayerProviderFactory pwf_"
                + escapeProviderName(pMap.get(provClass).name) + " = GWT.create(" + provClass + ".class);");
    }
    sourceWriter.println();

    Pattern ptrn = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)");

    // generate constructor source code
    sourceWriter.println("public " + className + "() { ");
    sourceWriter.indent();

    // init widget factories ...
    fact = pMap.keySet().iterator();
    while (fact.hasNext()) {
        String provClass = fact.next();
        String provName = escapeProviderName(pMap.get(provClass).name);
        sourceWriter.println(
                "pwf_" + provName + ".init(new ConfigurationContext(CallbackUtility.initCallbackHandlers(\""
                        + provName + "\"), \"bstplayer.handlers." + provName + "\"));");
    }

    sourceWriter.println();

    // init providers ...
    fact = pMap.keySet().iterator();
    while (fact.hasNext()) {
        _provider pvd = pMap.get(fact.next());
        sourceWriter.println("pInfos.put(\"" + pvd.name + "\", new HashMap<String, PlayerInfo>());");

        Iterator<_player> pns = pvd.players.iterator();
        while (pns.hasNext()) {
            _player ply = pns.next();
            boolean ps = false, ms = false;

            JClassType ints[] = ply.interfaces;
            for (int j = 0; j < ints.length; j++) {
                if (ints[j].getQualifiedSourceName().equals(MatrixSupport.class.getName())) {
                    ms = true;
                } else if (ints[j].getQualifiedSourceName().equals(PlaylistSupport.class.getName())) {
                    ps = true;
                }
            }
            Matcher m = ptrn.matcher(ply.minPluginVer);
            if (m.matches()) {
                sourceWriter.println("pInfos.get(\"" + pvd.name + "\").put(\"" + ply.name
                        + "\", new PlayerInfo(\"" + pvd.name + "\",\"" + ply.name + "\"," + "PluginVersion.get("
                        + Integer.parseInt(m.group(1)) + "," + Integer.parseInt(m.group(2)) + ","
                        + Integer.parseInt(m.group(3)) + ")," + ps + "," + ms + "));");
            } else {
                logger.log(TreeLogger.Type.WARN, "Min");
            }
        }
    }
    sourceWriter.outdent();
    sourceWriter.println("}"); // end constructor source generation

    sourceWriter.println();

    // implement get provider names ...
    sourceWriter.println("@Override");
    sourceWriter.println("public Set<String> getProviders(){");
    sourceWriter.indent();
    sourceWriter.println("return new TreeSet<String>(pInfos.keySet());");
    sourceWriter.outdent();
    sourceWriter.println("}");
    sourceWriter.println();

    // implement get player names by provider ...
    sourceWriter.println("@Override");
    sourceWriter.println("public Set<String> getPlayerNames(String providerName) {");
    sourceWriter.indent();
    sourceWriter.println("if(!pInfos.containsKey(providerName))");
    sourceWriter.println("throw new IllegalArgumentException(\"Unknown player provider - \" + providerName);");
    sourceWriter.println("return new TreeSet<String>(pInfos.get(providerName).keySet());");
    sourceWriter.outdent();
    sourceWriter.println("}");
    sourceWriter.println();

    // implement get player infos ...
    sourceWriter.println("@Override");
    sourceWriter.println("public PlayerInfo getPlayerInfo(String providerName, String playerName) {");
    sourceWriter.indent();
    sourceWriter.println("if(!pInfos.containsKey(providerName)) {");
    sourceWriter.println("throw new IllegalArgumentException(\"Unknown player provider - \" + providerName);}");
    sourceWriter.println("if(providerName.equals(\"api\")){");
    sourceWriter.println("return getApiPlayerInfoForPlugin(playerName);}");
    sourceWriter.println("else if(!pInfos.get(providerName).containsKey(playerName)){");
    sourceWriter.println("throw new IllegalArgumentException(\"Unknown player name - \" + playerName);}");
    sourceWriter.println("return pInfos.get(providerName).get(playerName);");
    sourceWriter.outdent();
    sourceWriter.println("}");
    sourceWriter.println();

    // implement get widget factory with defered binding on demand ....
    sourceWriter.println("@Override");
    sourceWriter.println("public PlayerProviderFactory getProviderFactory(String provider) {");
    sourceWriter.indent();
    sourceWriter.println("PlayerProviderFactory wf = null;");

    boolean firstRun = true;
    Iterator<_provider> provs = pMap.values().iterator();
    while (provs.hasNext()) {
        _provider prov = provs.next();
        if (firstRun) {
            sourceWriter.println("if(\"" + prov.name + "\".equals(provider)) {");
        } else {
            sourceWriter.println("else if(\"" + prov.name + "\".equals(provider)) {");
        }
        sourceWriter.indent();
        sourceWriter.println("wf = pwf_" + escapeProviderName(prov.name) + ";");
        sourceWriter.outdent();
        sourceWriter.println("}");
        firstRun = false;
    }
    sourceWriter.println("return wf;");
    sourceWriter.outdent();
    sourceWriter.println("}");
    sourceWriter.println();

    // implement mimeTypes ....
    sourceWriter.println("@Override");
    sourceWriter.println("protected void initMimeTypes(HashMap<String, String> mimeTypes) {");
    sourceWriter.indent();
    Iterator<String> mimeKeys = mimeMap.keySet().iterator();
    while (mimeKeys.hasNext()) {
        String mime = mimeKeys.next();
        sourceWriter.println("mimeTypes.put(\"" + mime + "\",\"" + mimeMap.get(mime) + "\");");
    }
    sourceWriter.outdent();
    sourceWriter.println("}");
    sourceWriter.println();

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

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

From source file:com.em.validation.rebind.generator.gwt.GwtGenerator.java

License:Apache License

/**
 * Actually generate all of the files described by the ClassDescriptor and the dependency tree.
 * //  w  w  w  .j av a  2s. c o m
 * @param descriptor
 * @param logger
 * @param context
 */
protected void generateClass(ClassDescriptor descriptor, TreeLogger logger, GeneratorContext context) {
    //set using gwt features in generator state
    GeneratorState.INSTANCE.setUsingGwtFeatures(true);

    //do not generate a class twice.  this hash set is used to manage that.
    if (this.generatedSet.contains(descriptor.getFullClassName())) {
        return;
    }

    //create the print writer for the class
    PrintWriter printWriter = context.tryCreate(logger, descriptor.getPackageName(), descriptor.getClassName());
    //this is null when a class already exists. this usually happens when the print writer would be attempting
    //to output the same class twice.  with the generationSet and various other blocks this should not happen.
    if (printWriter == null) {
        return;
    }

    //log generation of the code, debug
    logger.log(Type.DEBUG, "Generating: " + descriptor.getPackageName() + "." + descriptor.getClassName());

    //use the print writer
    printWriter.print(descriptor.getClassContents());

    //commit the source
    context.commit(logger, printWriter);

    //if not in the hash set, then set it to prevent cyclical / infinite recursion problems
    this.generatedSet.add(descriptor.getFullClassName());

    //generate the class files for those that this class depends on
    for (ClassDescriptor depenency : descriptor.getDependencies()) {
        this.generateClass(depenency, logger, context);
    }
}

From source file:com.github.gilbertotorrezan.gwtviews.rebind.NavigationManagerGenerator.java

License:Open Source License

@SuppressWarnings("rawtypes")
@Override/* ww  w .jav a 2  s  .  c  om*/
public String generate(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {

    final TypeOracle typeOracle = context.getTypeOracle();
    JClassType mainType = typeOracle.findType(typeName);

    PrintWriter writer = context.tryCreate(logger, mainType.getPackage().getName(),
            mainType.getName() + "Impl");
    if (writer == null) {
        return mainType.getQualifiedSourceName() + "Impl";
    }

    ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(mainType.getPackage().getName(),
            mainType.getName() + "Impl");
    factory.addImplementedInterface(typeName);

    factory.addImport(Presenter.class.getPackage().getName() + ".*");
    factory.addImport("com.google.gwt.user.client.History");
    factory.addImport("com.google.gwt.user.client.ui.Widget");
    factory.addImport("com.google.gwt.user.client.ui.Panel");
    factory.addImport("com.google.gwt.http.client.URL");
    factory.addImport("com.google.gwt.user.client.rpc.AsyncCallback");
    factory.addImport("com.google.gwt.core.client.*");
    factory.addImport("com.google.gwt.event.logical.shared.*");
    factory.addImport("com.github.gilbertotorrezan.gwtviews.client.analytics.*");
    factory.addImport("javax.annotation.Generated");
    factory.addImport("java.util.*");

    factory.addAnnotationDeclaration("@Generated(" + "value=\"" + NavigationManagerGenerator.class.getName()
            + "\", " + "date=\"" + new Date() + "\", " + "comments=\"Generated by GWT-Views project.\")");

    SourceWriter sourceWriter = factory.createSourceWriter(context, writer);

    sourceWriter.println("//AUTO GENERATED FILE BY GWT-VIEWS AT " + getClass().getName() + ". DO NOT EDIT!\n");

    sourceWriter.println("private Panel rootContainer;");
    sourceWriter.println("private UserPresenceManager userPresenceManager;");
    sourceWriter.println("private URLTokenFactory tokenFactory = new URLTokenFactory();");
    sourceWriter.println("private final Map<String, Presenter<?>> presentersMap = new HashMap<>();");
    sourceWriter.println("private URLToken currentToken = tokenFactory.createToken(\"\");");
    sourceWriter.println("private URLInterceptor currentInterceptor;\n");

    List<ViewPage> viewPages = new ArrayList<>();
    Map<String, HasViewPages> viewContainers = new HashMap<>();

    Set<ViewPage> viewsInNeedOfPresenters = new LinkedHashSet<>();
    Set<HasViewPages> containersInNeedOfPresenters = new LinkedHashSet<>();

    ViewPage defaultViewPage = null;
    ViewPage notFoundViewPage = null;
    HasViewPages defaultViewContainerPage = null;

    JClassType containerType = typeOracle.findType(HasViews.class.getName());

    JClassType[] types = typeOracle.getTypes();
    for (JClassType type : types) {
        if (type.isAnnotationPresent(View.class)) {
            View view = type.getAnnotation(View.class);
            if (shouldForceEmptyConstructor(view) && !type.isDefaultInstantiable()) {
                logger.log(Type.WARN, type.getName() + " must have an empty constructor to be a valid "
                        + View.class.getSimpleName() + ".");
                continue;
            }
            ViewPage page = new ViewPage(view, type);
            viewPages.add(page);
            if (view.defaultView()) {
                defaultViewPage = page;
            }
            if (view.notFoundView()) {
                notFoundViewPage = page;
            }
        } else if (type.isAnnotationPresent(ViewContainer.class)) {
            if (!type.isAssignableTo(containerType)) {
                logger.log(Type.WARN, type.getName() + " must implement " + containerType.getName()
                        + " to be a valid " + ViewContainer.class.getSimpleName() + ".");
                continue;
            }
            ViewContainer container = type.getAnnotation(ViewContainer.class);
            if (shouldForceEmptyConstructor(container) && !type.isDefaultInstantiable()) {
                logger.log(Type.WARN, type.getName() + " must have an empty constructor to be a valid "
                        + ViewContainer.class.getSimpleName() + ".");
                continue;
            }
            HasViewPages hasViews = new HasViewPages(container, type);
            viewContainers.put(type.getQualifiedSourceName(), hasViews);
            if (container.defaultContainer()) {
                defaultViewContainerPage = hasViews;
            }
        }
    }

    if (defaultViewPage == null) {
        logger.log(Type.ERROR, "No default view page defined!");
        throw new UnableToCompleteException();
    }

    if (defaultViewContainerPage == null && viewContainers.size() > 1) {
        logger.log(Type.ERROR, "There are more than one " + ViewContainer.class.getSimpleName()
                + " but no one is the default!");
        throw new UnableToCompleteException();
    }

    if (defaultViewContainerPage == null && !viewContainers.isEmpty()) {
        defaultViewContainerPage = viewContainers.values().iterator().next();
    }

    sourceWriter.println("public void onValueChange(ValueChangeEvent<String> event){");
    sourceWriter.indent();
    sourceWriter.println("final URLToken token = tokenFactory.createToken(event.getValue());");

    sourceWriter.println("if (currentInterceptor != null){");
    sourceWriter.indent();

    sourceWriter.println("History.newItem(currentToken.toString(), false);");
    sourceWriter.println("currentInterceptor.onUrlChanged(currentToken, token, new URLInterceptorCallback(){");
    sourceWriter.indent();
    sourceWriter.println("@Override\npublic void proceedTo(URLToken destination){");
    sourceWriter.indent();
    sourceWriter.println("History.newItem(destination.toString(), false);");
    sourceWriter.println("proceedToImpl(destination);");
    sourceWriter.outdent();
    sourceWriter.println("}");

    sourceWriter.outdent();
    sourceWriter.println("});");

    sourceWriter.println("return;");
    sourceWriter.outdent();
    sourceWriter.println("}");

    sourceWriter.println("this.proceedToImpl(token);");

    sourceWriter.outdent();
    sourceWriter.println("}\n");

    sourceWriter.println("private void proceedToImpl(final URLToken token){");
    sourceWriter.indent();

    sourceWriter.println("this.currentToken = token;");

    sourceWriter.println("switch (token.getId()){");
    sourceWriter.indent();

    int defaultViewIndex = -1;
    int notFoundViewIndex = -1;

    for (int i = 0; i < viewPages.size(); i++) {
        ViewPage viewPage = viewPages.get(i);
        final View view = viewPage.getView();
        logger.log(Type.DEBUG, "Processing view " + view.value() + "...");

        if (view.defaultView()) {
            defaultViewIndex = i;
            sourceWriter.println("case \"\":");
        }
        if (view.notFoundView()) {
            notFoundViewIndex = i;
        }

        sourceWriter.println("case \"" + view.value() + "\": {");
        sourceWriter.indent();

        if (!view.publicAccess()) {
            sourceWriter.println("if (userPresenceManager != null) {");
            sourceWriter.indent();

            if (view.rolesAllowed() != null && view.rolesAllowed().length > 0) {
                String[] roles = view.rolesAllowed();
                StringBuilder params = new StringBuilder("new String[]{ ");
                String sep = "";
                for (String role : roles) {
                    params.append(sep).append("\"").append(role).append("\"");
                    sep = ", ";
                }
                params.append(" }");
                sourceWriter.println("userPresenceManager.isUserInAnyRole(token, " + params.toString()
                        + ", new AsyncCallback<Boolean>(){");
            } else {
                sourceWriter.println(
                        "userPresenceManager.isUserInAnyRole(token, new String[0], new AsyncCallback<Boolean>(){");
            }
            sourceWriter.indent();
            sourceWriter.println("@Override");
            sourceWriter.println("public void onSuccess(Boolean allowed){");
            sourceWriter.indent();
            sourceWriter.println("if (allowed == null || !allowed){");
            sourceWriter.indent();
            sourceWriter.println("URLToken nextToken = tokenFactory.createToken(\""
                    + defaultViewPage.getView().value() + "\");");
            sourceWriter.println("nextToken.setParameter(\"next\", URL.encodeQueryString(token.toString()));");
            sourceWriter.println("nextToken.go();");
            sourceWriter.outdent();
            sourceWriter.println("}");
            sourceWriter.println("else {");
            sourceWriter.indent();
            sourceWriter.println("showPresenter" + i + "(token);");
            sourceWriter.outdent();
            sourceWriter.println("}");
            sourceWriter.outdent();
            sourceWriter.println("}");
            sourceWriter.println("@Override");
            sourceWriter.println("public void onFailure(Throwable error){");
            sourceWriter.indent();
            sourceWriter.println("GWT.log(\"Error loading view: \" + error, error);");
            sourceWriter.println("URLToken nextToken = tokenFactory.createToken(\""
                    + defaultViewPage.getView().value() + "\");");
            sourceWriter.println("nextToken.setParameter(\"next\", URL.encodeQueryString(token.toString()));");
            sourceWriter.println("nextToken.go();");
            sourceWriter.outdent();
            sourceWriter.println("}");
            sourceWriter.outdent();
            sourceWriter.println("});");

            sourceWriter.println("return;");
            sourceWriter.outdent();
            sourceWriter.println("}");
        }

        sourceWriter.println("showPresenter" + i + "(token);");
        sourceWriter.outdent();
        sourceWriter.println("}\nbreak;");
    }

    sourceWriter.println("default: {");
    sourceWriter.indent();

    if (notFoundViewPage != null) {
        sourceWriter.println("//NotFound View");
        sourceWriter.println("showPresenter" + notFoundViewIndex + "(tokenFactory.createToken(\""
                + notFoundViewPage.getView().value() + "\"));");
    } else {
        sourceWriter.println("//Default View");
        sourceWriter.println("History.newItem(\"" + defaultViewPage.getView().value() + "\", false);");
        sourceWriter.println("showPresenter" + defaultViewIndex + "(tokenFactory.createToken(\""
                + defaultViewPage.getView().value() + "\"));");
    }
    sourceWriter.outdent();
    sourceWriter.println("}\nbreak;");
    sourceWriter.outdent();
    sourceWriter.println("}");

    sourceWriter.outdent();
    sourceWriter.println("}\n");

    for (int i = 0; i < viewPages.size(); i++) {
        ViewPage viewPage = viewPages.get(i);
        final View view = viewPage.getView();

        sourceWriter.println("/** Method to show the presenter of the " + view.value() + " view. */");
        sourceWriter.println("private void showPresenter" + i + "(final URLToken token) {");
        sourceWriter.indent();

        sourceWriter.println("GWT.runAsync(new RunAsyncCallback() {");
        sourceWriter.indent();

        sourceWriter.println("public void onSuccess() {");
        sourceWriter.indent();

        sourceWriter.println("UniversalAnalyticsTracker.sendPageView(token.toString());");
        sourceWriter.println("Presenter<?> presenter = presentersMap.get(\"" + view.value() + "\");");
        sourceWriter.println("if (presenter == null) {");
        sourceWriter.indent();

        Class<? extends Presenter> customPresenter = view.customPresenter();
        if (!Presenter.class.equals(customPresenter)) {
            sourceWriter.println("presenter = GWT.create(" + customPresenter.getName() + ".class);");
        } else {
            viewsInNeedOfPresenters.add(viewPage);
            sourceWriter.println("presenter = (Presenter<?>) GWT.create(" + viewPage.getType().getName()
                    + "Presenter.class);");
        }
        sourceWriter.println("presentersMap.put(\"" + view.value() + "\", presenter);");
        sourceWriter.outdent();
        sourceWriter.println("}");
        sourceWriter.println("Widget widget = presenter.getView(token);");

        Class<? extends URLInterceptor> urlInterceptor = view.urlInterceptor();
        if (!URLInterceptor.class.equals(urlInterceptor)) {
            String interceptorName = urlInterceptor.getName();
            if (interceptorName.equals(viewPage.getType().getQualifiedSourceName())) {
                sourceWriter.println("currentInterceptor = (URLInterceptor) widget;");
            } else if (interceptorName.equals(customPresenter.getName())) {
                sourceWriter.println("currentInterceptor = (URLInterceptor) presenter;");
            } else {
                sourceWriter
                        .println("currentInterceptor = GWT.create(" + urlInterceptor.getName() + ".class);");
            }
        } else {
            sourceWriter.println("currentInterceptor = null;");
        }

        boolean usesViewContainer = view.usesViewContainer();
        if (usesViewContainer && !viewContainers.isEmpty()) {
            Class<?> viewContainer = view.viewContainer();
            HasViewPages hasViews;
            if (HasViews.class.equals(viewContainer)) {
                hasViews = defaultViewContainerPage;
            } else {
                hasViews = viewContainers.get(viewContainer.getName());
            }

            if (hasViews == null) {
                logger.log(Type.ERROR,
                        viewContainer.getName() + " is not a valid " + ViewContainer.class.getSimpleName()
                                + " for " + View.class.getSimpleName() + " "
                                + viewPage.getType().getQualifiedSourceName() + ".");
                throw new UnableToCompleteException();
            }
            sourceWriter.println("Presenter<?> containerPresenter = presentersMap.get(\""
                    + hasViews.getType().getQualifiedSourceName() + "\");");
            sourceWriter.println("if (containerPresenter == null) {");
            sourceWriter.indent();
            if (!Presenter.class.equals(hasViews.getContainer().customPresenter())) {
                sourceWriter.println("containerPresenter = GWT.create("
                        + hasViews.getContainer().customPresenter().getName() + ".class);");
            } else {
                containersInNeedOfPresenters.add(hasViews);
                sourceWriter.println("containerPresenter = (Presenter<?>) GWT.create("
                        + hasViews.getType().getName() + "Presenter.class);");
            }
            sourceWriter.println("presentersMap.put(\"" + hasViews.getType().getQualifiedSourceName()
                    + "\", containerPresenter);");
            sourceWriter.outdent();
            sourceWriter.println("}");
            sourceWriter.println("Widget container = containerPresenter.getView(token);");
            sourceWriter.println("((" + HasViews.class.getName() + ") container).showView(token, widget);");
            sourceWriter.println("if (container.getParent() == null){");
            sourceWriter.indent();
            sourceWriter.println("rootContainer.clear();");
            sourceWriter.println("rootContainer.add(container);");
            sourceWriter.outdent();
            sourceWriter.println("}");
        } else {
            sourceWriter.println("rootContainer.clear();");
            sourceWriter.println("rootContainer.add(widget);");
        }
        sourceWriter.outdent();
        sourceWriter.println("}");
        sourceWriter.println(
                "public void onFailure(Throwable reason) { GWT.log(\"Error on loading presenter with token: \"+token, reason); }");
        sourceWriter.outdent();
        sourceWriter.println("});");

        sourceWriter.outdent();
        sourceWriter.println("}\n");
    }

    sourceWriter.println("@Override\npublic void clearCache() {");
    sourceWriter.indent();
    sourceWriter.println("presentersMap.clear();");
    sourceWriter.outdent();
    sourceWriter.println("}\n");

    sourceWriter.println("@Override\npublic void clearCache(String tokenId) {");
    sourceWriter.indent();
    sourceWriter.println("presentersMap.remove(tokenId);");
    sourceWriter.outdent();
    sourceWriter.println("}\n");

    sourceWriter.println("@Override\npublic void setRootContainer(Panel container) {");
    sourceWriter.indent();
    sourceWriter.println("this.rootContainer = container;");
    sourceWriter.outdent();
    sourceWriter.println("}\n");

    sourceWriter.println("@Override\npublic void setUserPresenceManager(UserPresenceManager umanager) {");
    sourceWriter.indent();
    sourceWriter.println("this.userPresenceManager = umanager;");
    sourceWriter.outdent();
    sourceWriter.println("}\n");

    sourceWriter.println("@Override\npublic void setURLTokenFactory(URLTokenFactory tokenFactory) {");
    sourceWriter.indent();
    sourceWriter.println("this.tokenFactory = tokenFactory;");
    sourceWriter.outdent();
    sourceWriter.println("}\n");

    sourceWriter.println("@Override\npublic URLTokenFactory getURLTokenFactory() {");
    sourceWriter.indent();
    sourceWriter.println("return this.tokenFactory;");
    sourceWriter.outdent();
    sourceWriter.println("}\n");

    sourceWriter.println("//View presenters");
    for (ViewPage viewPage : viewsInNeedOfPresenters) {
        sourceWriter.println("public static interface " + viewPage.getType().getName()
                + "Presenter extends AutoPresenter<" + viewPage.getType().getQualifiedSourceName() + ">{}");
    }
    if (!containersInNeedOfPresenters.isEmpty()) {
        sourceWriter.println("\n//ViewContainer presenters");
        for (HasViewPages container : containersInNeedOfPresenters) {
            sourceWriter.println("public static interface " + container.getType().getName()
                    + "Presenter extends AutoPresenter<" + container.getType().getQualifiedSourceName()
                    + ">{}");
        }
    }

    sourceWriter.outdent();
    sourceWriter.println("}");

    context.commit(logger, writer);

    return factory.getCreatedClassName();
}

From source file:com.github.gilbertotorrezan.gwtviews.rebind.PresenterGenerator.java

License:Open Source License

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

    final TypeOracle typeOracle = context.getTypeOracle();
    JClassType mainType = typeOracle.findType(typeName);

    JParameterizedType parameterized = mainType.getImplementedInterfaces()[0].isParameterized();
    JClassType viewType = parameterized.getTypeArgs()[0];
    final String className = viewType.getQualifiedSourceName();

    String name = mainType.getName().substring(mainType.getName().lastIndexOf('.') + 1);
    name = name.substring(0, name.length() - "Presenter".length());
    name = name + "_" + name + "PresenterImpl";

    PrintWriter writer = context.tryCreate(logger, viewType.getPackage().getName(), name);
    if (writer == null) {
        return viewType.getPackage().getName() + "." + name;
    }//from  w ww  .  j a  va 2  s  .c  om

    ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(viewType.getPackage().getName(),
            name);
    factory.addImplementedInterface(AutoPresenter.class.getName());

    factory.addImport(Presenter.class.getPackage().getName() + ".*");
    factory.addImport("com.google.gwt.user.client.History");
    factory.addImport("com.google.gwt.core.client.GWT");
    factory.addImport("com.google.gwt.user.client.ui.Widget");
    factory.addImport("javax.annotation.Generated");
    factory.addImport("java.util.*");

    factory.addAnnotationDeclaration("@Generated(" + "value=\"" + PresenterGenerator.class.getName() + "\", "
            + "date=\"" + new Date() + "\", " + "comments=\"Generated by GWT-Views project.\")");

    View view = viewType.getAnnotation(View.class);
    ViewContainer viewContainer = viewType.getAnnotation(ViewContainer.class);

    CachePolicy cache;
    JClassType injectorType = null;
    String injectorMethod = null;
    if (view == null) {
        cache = CachePolicy.ALWAYS;
    } else {
        cache = view.cache();
    }

    if (cache == CachePolicy.SAME_URL) {
        factory.setSuperclass(CachedPresenter.class.getName());
    }

    SourceWriter sourceWriter = factory.createSourceWriter(context, writer);

    sourceWriter.println("//AUTO GENERATED FILE BY GWT-VIEWS AT " + getClass().getName() + ". DO NOT EDIT!\n");

    if (cache == CachePolicy.ALWAYS) {
        sourceWriter.println("private Widget view; //the cached view");
    }

    Class<?> injector = view == null ? void.class : view.injector();
    if (injector.equals(void.class)) {
        injector = viewContainer == null ? void.class : viewContainer.injector();
    }

    if (!injector.equals(void.class)) {
        try {
            injectorType = typeOracle.findType(injector.getName());
            injectorMethod = view != null ? view.injectorMethod() : viewContainer.injectorMethod();
            injectorMethod = getInjectorMethod(logger, injectorType, injectorMethod, className);
        } catch (Exception e) {
            logger.log(Type.ERROR, "Error loading the injector class \"" + injector.getName() + "\": " + e, e);
            throw new UnableToCompleteException();
        }
    }

    if (cache == CachePolicy.SAME_URL) {
        sourceWriter.println("\n@Override\npublic Widget createNewView(URLToken url) {");
    } else {
        sourceWriter.println("\n@Override\npublic Widget getView(URLToken url) {");
    }
    sourceWriter.indent();

    switch (cache) {
    case NEVER: {
        sourceWriter.println("//code for the CachePolicy.NEVER:");
        printInjectorMethod(sourceWriter, className, injectorType, injectorMethod);
    }
        break;
    case ALWAYS: {
        sourceWriter.println("//code for the CachePolicy.ALWAYS:");
        sourceWriter.println("if (this.view == null) {");
        sourceWriter.indent();
        printInjectorMethod(sourceWriter, className, injectorType, injectorMethod);
        sourceWriter.println("this.view = view;");
        sourceWriter.outdent();
        sourceWriter.println("}");
    }
        break;
    case SAME_URL: {
        sourceWriter.println("//code for the CachePolicy.SAME_URL:");
        printInjectorMethod(sourceWriter, className, injectorType, injectorMethod);
    }
        break;
    }

    sourceWriter.println("return view;");
    sourceWriter.outdent();
    sourceWriter.println("}\n");

    sourceWriter.outdent();
    sourceWriter.println("}\n");

    context.commit(logger, writer);

    return factory.getCreatedClassName();
}

From source file:com.github.ludorival.dao.gwt.rebind.EntityManagerGenerator.java

License:Apache License

@Override
public String generate(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {
    final TypeOracle typeOracle = context.getTypeOracle();
    JClassType mainType = typeOracle.findType(typeName);

    String packageName = mainType.getPackage().getName();
    String className = "Gwt" + mainType.getName();
    if (parseOnlyInterface)
        className += "Light";
    PrintWriter writer = context.tryCreate(logger, packageName, className);
    if (writer == null) {
        return packageName + "." + className;
    }//from ww w  . j a  v  a2 s  .c  o  m

    ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, className);
    logger.log(Type.DEBUG, "Create EntityManager " + factory.getCreatedClassName());
    factory.setSuperclass(AdapterEntityManager.class.getSimpleName());
    factory.addImport(AdapterEntityManager.class.getName());
    factory.addImport(Entity.class.getName());
    factory.addImport(Bean.class.getName());
    factory.addImport(HashMap.class.getName());
    factory.addImport("javax.annotation.Generated");

    JClassType[] types = typeOracle.getTypes();
    List<BeanMetadata> metadatas = new ArrayList<EntityManagerGenerator.BeanMetadata>();
    for (JClassType type : types) {
        BeanMetadata metaData = null;
        boolean candidate = false;
        if (type.isAnnotationPresent(IsEntity.class)) {
            candidate = true;
            try {
                metaData = createEntity(context, logger, packageName, type, type.getAnnotation(IsEntity.class));
            } catch (TypeOracleException e) {
                logger.log(Type.ERROR, e.getMessage(), e);
                continue;
            }

        } else if (type.isAnnotationPresent(IsBean.class)) {
            candidate = true;
            try {
                metaData = createBean(context, logger, packageName, type, type.getAnnotation(IsBean.class));
            } catch (TypeOracleException e) {
                logger.log(Type.ERROR, e.getMessage(), e);
                continue;
            }

        }
        if (!candidate)
            continue;
        if (metaData == null) {
            log(logger, Type.WARN, "The type %s is not instantiable", type);
            continue;
        }
        log(logger, Type.DEBUG, "The entity has been build : %s", metaData);
        factory.addImport(type.getQualifiedSourceName());

        if (metaData.implementation != null) {
            factory.addImport(metaData.implementation + "");
        }
        metadatas.add(metaData);
    }

    factory.addAnnotationDeclaration("@Generated(" + "value=\"" + AdapterEntityManager.class.getName() + "\", "
            + "date=\"" + new Date() + "\", " + "comments=\"Generated by DAO-GWT project.\")");

    SourceWriter sourceWriter = factory.createSourceWriter(context, writer);

    sourceWriter.println("//AUTO GENERATED FILE BY DAO-GWT " + getClass().getName() + ". DO NOT EDIT!\n");

    sourceWriter.println(
            "private static HashMap<Class<?>,Entity<?>> ENTITIES = new HashMap<Class<?>,Entity<?>>();");
    sourceWriter.println("private static HashMap<Class<?>,Bean<?>> BEANS = new HashMap<Class<?>,Bean<?>>();");

    sourceWriter.println("static {");
    sourceWriter.indent();
    for (BeanMetadata metaData : metadatas) {
        String variable = "entity";
        String plural = "ENTITIES";
        if (!metaData.entity) {
            variable = "bean";
            plural = "BEANS";
        }

        sourceWriter.println("{ //%s with its implementation", metaData.name);
        sourceWriter.indent();
        sourceWriter.println("%s %s = new %s();", metaData.name, variable, metaData.name);

        sourceWriter.println("%s.put(%s.class,%s);", plural, metaData.type.getName(), variable);
        if (metaData.implementation != null) {
            factory.addImport(metaData.implementation.packageName);
            sourceWriter.println("%s.put(%s.class,%s);", plural, metaData.implementation.className, variable);
        }
        sourceWriter.outdent();
        sourceWriter.println("}");

    }
    sourceWriter.outdent();
    sourceWriter.println("}");
    sourceWriter.println();
    sourceWriter.println("public %s(){", className);
    sourceWriter.indent();
    sourceWriter.println("super(ENTITIES,BEANS);");
    sourceWriter.outdent();
    sourceWriter.println("}");
    sourceWriter.outdent();
    sourceWriter.println("}");
    context.commit(logger, writer);

    return factory.getCreatedClassName();

}

From source file:com.github.ludorival.dao.gwt.rebind.EntityManagerGenerator.java

License:Apache License

private BeanMetadata create(GeneratorContext context, TreeLogger logger, String packageName, JClassType type,
        Class<?> classAdapter, IsEntity anno) throws TypeOracleException {
    String beanName = anno == null || anno.aliasName().isEmpty() ? type.getName() : anno.aliasName();
    Source implementation = null;
    JClassType implType = type;//from   w  ww.j  a v  a 2  s.  c o m
    TypeOracle typeOracle = context.getTypeOracle();
    if (type.isInterface() != null) {
        implType = null;
        JClassType[] types = type.getSubtypes();
        log(logger, Type.DEBUG, "Get all sub types of %s : %s", type, Arrays.toString(types));
        if (types != null && types.length > 0) {
            for (JClassType jClassType : types) {
                if (isInstantiable(jClassType, logger)) {
                    implType = jClassType;
                    implementation = new Source(implType.getPackage().getName(), implType.getName());
                    break;
                }

            }

        }
        if (implType == null) {
            log(logger, Type.ERROR, "The type %s has not valid subtypes " + "%s !", type,
                    Arrays.toString(types));
            return null;
        }
    }
    if (!implType.isDefaultInstantiable())
        return null;
    String prefix = classAdapter.getSimpleName().replace("Adapter", "");
    boolean isEntity = anno != null;
    String className = prefix + beanName;
    if (parseOnlyInterface && implType != type)
        className += "Light";
    PrintWriter writer = context.tryCreate(logger, packageName, className);
    if (writer == null) {
        return new BeanMetadata(type, className, implementation, isEntity);
    }

    ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, className);
    logger.log(Type.DEBUG, "Create Entity " + factory.getCreatedClassName());

    factory.setSuperclass(classAdapter.getSimpleName() + "<" + type.getName() + ">");
    factory.addImport(RuntimeException.class.getName());
    factory.addImport(classAdapter.getName());
    factory.addImport(type.getQualifiedSourceName());
    if (isEntity) {
        factory.addImport(ArrayList.class.getName());
        factory.addImport(Collection.class.getName());
    }
    factory.addImport(HashMap.class.getName());
    factory.addImport(Property.class.getName());
    factory.addImport(Property.class.getName() + ".Kind");
    factory.addImport(Index.class.getName());
    factory.addImport(implType.getQualifiedSourceName());

    factory.addImport("javax.annotation.Generated");
    factory.addAnnotationDeclaration("@Generated(" + "value=\"" + AdapterEntity.class.getName() + "\", "
            + "date=\"" + new Date() + "\", " + "comments=\"Generated by DAO-GWT project.\")");

    SourceWriter sourceWriter = factory.createSourceWriter(context, writer);

    sourceWriter.println("//AUTO GENERATED FILE BY DAO-GWT " + getClass().getName() + ". DO NOT EDIT!\n");

    sourceWriter.println("private static HashMap<String,Property<%s,?>> PROPERTIES = "
            + "new HashMap<String,Property<%s,?>>();", type.getName(), type.getName());
    if (isEntity) {
        factory.addImport(ArrayList.class.getName());
        factory.addImport(Index.class.getName());
        sourceWriter.println("private static Collection<Index> INDEXES = " + "new ArrayList<Index>();");

    }
    sourceWriter.println("static {");
    sourceWriter.indent();
    JClassType interfaz = type != implType ? type : null;
    JMethod[] methods = parseOnlyInterface ? type.getInheritableMethods() : implType.getInheritableMethods();
    for (JMethod method : methods) {
        String name = method.getName();
        //Check if the method has a IsIgnored annotation before to continue
        IsIgnored ignored = method.getAnnotation(IsIgnored.class);
        if (ignored != null) {

            log(logger, Type.DEBUG, EXPLICITELY_IGNORED, name, implType);
            continue;
        }
        boolean startsWithGet = name.startsWith("get");
        boolean startsWithIs = name.startsWith("is");
        if (!startsWithGet && !startsWithIs) {
            log(logger, Type.DEBUG, IGNORE_METHOD, name, implType);
            continue;
        }

        //check no parameters
        if (method.getParameterTypes().length != 0) {
            log(logger, Type.WARN, NO_PARAMETER_GETTER, name, implType);
            continue;
        }
        //check return type
        JType returnType = method.getReturnType();
        if (returnType == null || returnType.getQualifiedSourceName().equals(Void.class.getName())
                || returnType.getQualifiedSourceName().equals(void.class.getName())) {
            log(logger, Type.DEBUG, VOID_GETTER, name + "" + returnType, implType);
            continue;
        }
        //change the format of the name getXyy ==> xyy
        String getterSetter = name;
        if (startsWithGet)
            getterSetter = name.substring(3);
        else if (startsWithIs)
            getterSetter = name.substring(2);
        name = getterSetter.substring(0, 1).toLowerCase() + getterSetter.substring(1);
        // check if the getter has an annotation
        IsIndexable indexable = method.getAnnotation(IsIndexable.class);
        boolean isIndexable = indexable != null;
        if (isIndexable && !isEntity)
            log(logger, Type.WARN, ONLY_ENTITY_FOR_INDEX, name, implType, IsEntity.class);

        isIndexable = isIndexable && isEntity;//only entity can defined indexable element

        String indexName = isIndexable ? indexable.aliasName() : "";
        String[] compositeIndexes = isIndexable ? indexable.compoundWith() : new String[0];
        Kind kind = null;
        JType typeOfCollection = null;
        String typeOfCollectionString = "null";

        if (!isPrimitive(returnType)) {

            //load complex properties except Key
            if (returnType.isEnum() != null) {
                kind = Kind.ENUM;
            } else {
                boolean isPrimitive = false;
                boolean isEnum = false;
                JParameterizedType pType = returnType.isParameterized();
                JType collection = typeOracle.parse(Collection.class.getName());

                if (pType != null && pType.getRawType().isAssignableTo(collection.isClassOrInterface())) {
                    JClassType[] types = pType.getTypeArgs();
                    kind = Kind.COLLECTION_OF_PRIMITIVES;
                    if (types.length > 1) {
                        log(logger, Type.DEBUG, CANNOT_PROCESS_PARAMETERIZED_TYPE, returnType, implType);
                        continue;
                    }
                    typeOfCollection = types[0];
                    typeOfCollectionString = typeOfCollection.getQualifiedSourceName() + ".class";
                    log(logger, Type.DEBUG, "The type of the collection is %s", typeOfCollectionString);
                    isPrimitive = isPrimitive(typeOfCollection);
                    isEnum = typeOfCollection.isEnum() != null;
                }
                if (!isPrimitive) {

                    if (isEnum && kind != null) {
                        kind = Kind.COLLECTION_OF_ENUMS;
                    } else {
                        JClassType classType = typeOfCollection != null ? typeOfCollection.isClassOrInterface()
                                : returnType.isClassOrInterface();
                        boolean isBean = isBean(classType);
                        if (isBean) {
                            log(logger, Type.DEBUG, "The property %s is well a type %s", name, classType);
                            if (kind == null)
                                kind = Kind.BEAN;
                            else
                                kind = Kind.COLLECTION_OF_BEANS;
                        } else {
                            log(logger, Type.DEBUG, "The property %s has not a bean type %s", name, classType);
                            continue;
                        }
                    }

                }
            }

        }
        assert kind != null;

        boolean isMemo = method.getAnnotation(IsMemo.class) != null;
        String oldName = "null";
        OldName oldNameAnno = method.getAnnotation(OldName.class);
        if (oldNameAnno != null)
            oldName = "\"" + oldNameAnno.value() + "\"";
        //create a property
        if (kind == Kind.BEAN || kind == Kind.COLLECTION_OF_BEANS)
            factory.addImport(returnType.getQualifiedSourceName());
        String valueType = "";
        JClassType classType = returnType.isClassOrInterface();
        JPrimitiveType primitiveType = returnType.isPrimitive();
        if (classType != null)
            valueType = classType.getQualifiedSourceName();
        else if (primitiveType != null) {
            valueType = primitiveType.getQualifiedBoxedSourceName();
        }

        sourceWriter.println("{ //Property %s", name);
        sourceWriter.indent();
        sourceWriter.print("Index index =");
        if (isIndexable) {
            if (indexName.isEmpty())
                indexName = name;
            sourceWriter.println("new Index(\"%s\",\"%s\",new String[]{%s});", indexName, name,
                    String.join(",", compositeIndexes));
        } else
            sourceWriter.println("null;");
        boolean useKeyAsString = anno != null ? (name.equals(anno.keyName()) ? anno.useKeyAsString() : false)
                : false;

        KeyOf keyOf = method.getAnnotation(KeyOf.class);
        if (keyOf != null) {
            IsEntity isEntity2 = keyOf.entity().getAnnotation(IsEntity.class);
            if (isEntity2 == null) {
                log(logger, Type.ERROR, AdapterEntityManager.KEY_OF_NO_ENTITY, method, keyOf, keyOf.entity(),
                        IsEntity.class);
                continue;
            }
            useKeyAsString = isEntity2.useKeyAsString();
        }
        boolean isHidden = isHidden(method, interfaz);
        sourceWriter.println(
                "Property<%s,%s> property = new Property<%s,%s>(\"%s\",%s,%s.class,%s,%s,%s,%s,index,%s){",
                type.getName(), valueType, type.getName(), valueType, name, oldName,
                returnType.getQualifiedSourceName(), typeOfCollectionString,
                kind != null ? "Kind." + kind.name() : "null", useKeyAsString + "", isMemo + "", isHidden + "");
        sourceWriter.indent();
        sourceWriter.println("@Override");
        sourceWriter.println("public %s get(%s instance){", valueType, type.getName());
        sourceWriter.indent();

        sourceWriter.println("return ((%s)instance).%s();", implType.getName(),
                startsWithGet ? "get" + getterSetter : "is" + getterSetter);
        sourceWriter.outdent();
        sourceWriter.println("}");

        sourceWriter.println("@Override");
        sourceWriter.println("public void set(%s instance, %s value){", type.getName(), valueType);
        sourceWriter.indent();

        if (getSetter(implType, getterSetter, returnType) != null)
            sourceWriter.println("((%s)instance).%s(value);", implType.getName(), "set" + getterSetter);
        else {
            logger.log(Type.WARN, " Not found setter for " + getterSetter);
            sourceWriter.println("throw new RuntimeException(\"No such setter " + getterSetter + " \");");
        }

        sourceWriter.outdent();
        sourceWriter.println("}");
        sourceWriter.outdent();
        sourceWriter.println("};");
        sourceWriter.println("PROPERTIES.put(\"%s\",property);", name);
        if (!oldName.equals("null")) {
            sourceWriter.println("PROPERTIES.put(%s,property);", oldName);
        }
        if (isIndexable)
            sourceWriter.println("INDEXES.add(index);");
        sourceWriter.outdent();
        sourceWriter.println("}");

        log(logger, Type.DEBUG, SUCCESSFUL_ADD_PROPERTY, name + ":" + valueType, implType);

    }
    sourceWriter.outdent();
    sourceWriter.println("}");

    sourceWriter.println();
    sourceWriter.println("public %s(){", className);
    sourceWriter.indent();

    /*
     * boolean asyncReady,
       boolean autoGeneratedFlag,
       String keyName,
       boolean useKeyAsString,
       Class<T> type,Class<? extends T> implType,
       Map<String, Property<T,?>> mapAllProperties, Collection<Index> indexes) {
    super(type,implType,mapAllProperties);
     */
    if (isEntity)
        sourceWriter
                .println(String.format("super(\"%s\",%s,%s,\"%s\",%s,%s.class,%s.class,PROPERTIES,INDEXES);",
                        anno.aliasName().isEmpty() ? type.getName() : anno.aliasName(), anno.asyncReady(),
                        anno.autoGeneratedKey(), anno.keyName(), anno.useKeyAsString(), type.getName(),
                        implType.getName()));
    else {
        sourceWriter.println(
                String.format("super(%s.class,%s.class,PROPERTIES);", type.getName(), implType.getName()));

    }
    sourceWriter.outdent();
    sourceWriter.println("}");

    sourceWriter.println();
    sourceWriter.println("@Override");
    sourceWriter.println("public %s newInstance(){", type.getName());
    sourceWriter.indent();
    sourceWriter.println("return new %s();", implType.getName());
    sourceWriter.outdent();
    sourceWriter.println("}");

    sourceWriter.outdent();
    sourceWriter.println("}");
    context.commit(logger, writer);

    return new BeanMetadata(type, className, implementation, isEntity);
}

From source file:com.google.appinventor.rebind.ExtendedServiceProxyGenerator.java

License:Open Source License

/**
 * Generates a wrapper around the proxy generated by
 * {@link ServiceInterfaceProxyGenerator}.
 *
 * @param logger log interface/* ww  w  . j av  a2s.  c o  m*/
 * @param context generator context
 * @param typeName name of the interface that was passed to
 *        {@link com.google.gwt.core.client.GWT#create(Class)}
 * @param proxyTypeName the name of the wrapped proxy class
 * @return the name of the extended proxy class
 */
private String generateExtendedProxy(TreeLogger logger, GeneratorContext context, String typeName,
        String proxyTypeName) {
    JClassType type = context.getTypeOracle().findType(typeName);
    String packageName = type.getPackage().getName();
    String className = type.getSimpleSourceName() + PROXY_SUFFIX;
    String asyncName = typeName + ASYNC_SUFFIX;

    String classNameExtendedServiceProxy = "com.google.appinventor.client.ExtendedServiceProxy";

    // The generator can be invoked for the same class name more than once.
    // In this case the GeneratorContext.tryCreate method will return null to
    // indicate that the file already exists. This is not an error.
    PrintWriter out = context.tryCreate(logger, packageName, className);
    if (out != null) {
        out.println("package " + packageName + ";");
        out.println("class " + className);
        out.println("    extends " + classNameExtendedServiceProxy + "<" + typeName + ">");
        out.println("    implements " + ServiceDefTarget.class.getName() + ", " + asyncName + " {");
        out.println("  private " + proxyTypeName + " proxy = new " + proxyTypeName + "();");
        out.println("  public String getServiceEntryPoint() {");
        out.println("    return proxy.getServiceEntryPoint();");
        out.println("  }");
        out.println("  public void setRpcRequestBuilder(" + RpcRequestBuilder.class.getName() + " builder) {");
        out.println("    proxy.setRpcRequestBuilder(builder);");
        out.println("  }");
        out.println("  public void setServiceEntryPoint(String address) {");
        out.println("    proxy.setServiceEntryPoint(address);");
        out.println("  }");
        out.println("  public String getSerializationPolicyName() {");
        out.println("    return proxy.getSerializationPolicyName();");
        out.println("  }");

        for (JMethod method : type.getMethods()) {
            printMethod(out, method, typeName);
        }

        out.println("}");

        context.commit(logger, out);
    }

    return packageName + "." + className;
}

From source file:com.google.gwt.sample.hellorebinding.rebind.JsniSnippetGenerator.java

License:Apache License

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

    JClassType snippetType = context.getTypeOracle().findType(typeName);

    if (snippetType == null) {
        logger.log(TreeLogger.ERROR, "Rebinding type not found");
        throw new UnableToCompleteException();
    }//from  w  ww .  j av  a  2  s  .c  om

    if (arguments.length < 1) {
        logger.log(TreeLogger.ERROR, "Missing JSNI literal argument");
        throw new UnableToCompleteException();
    }

    JArgument arg0 = arguments[0];

    if (!(arg0 instanceof JStringArgument)) {
        logger.log(TreeLogger.ERROR, "JSNI literal argument must be a String literal");
        throw new UnableToCompleteException();
    }

    String argumentsKey = JArguments.getKey(arguments);

    String packageName = snippetType.getPackage().getName();
    String snippetTypeName = snippetType.getSimpleSourceName() + "_impl_" + argumentsKey;
    String qualifiedSnippetTypeName = packageName + "." + snippetTypeName;

    PrintWriter pw = context.tryCreate(logger, packageName, snippetTypeName);

    if (pw != null) {

        int argCount = argumentsCount(snippetType);

        if (argCount < 0) {
            logger.log(TreeLogger.ERROR, "execute() method not found");
            throw new UnableToCompleteException();
        }

        String jsniTemplate = ((JStringArgument) arg0).getValue();
        String[] parts = jsniTemplate.split("#", -1);

        if (parts.length != (argCount + 1)) {
            logger.log(TreeLogger.ERROR, "wrong number of snippet arguments");
            throw new UnableToCompleteException();
        }

        pw.printf("package %s;\n\n", packageName);
        pw.printf("public class %s implements %s {\n\n", snippetTypeName, snippetType.getSimpleSourceName());
        pw.printf("  public %s(String jsniLiteral) {}\n", snippetTypeName);
        pw.println();

        pw.print("  @Override public native <T> T execute(");

        boolean hasSeparator = false;

        for (int i = 0; i < argCount; i++) {
            if (hasSeparator) {
                pw.print(", ");
            } else {
                hasSeparator = true;
            }
            pw.printf("Object a%d", i);
        }

        pw.println(") /*-{");
        pw.print("    return ");

        if (argCount == 0) {
            pw.print(jsniTemplate);
        } else {
            for (int i = 0; i < argCount; i++) {
                pw.printf("%sa%d", parts[i], i);
            }
            pw.print(parts[argCount]);
        }
        pw.println(";");

        pw.println("  }-*/;");
        pw.println("}");
        context.commit(logger, pw);
    }

    return qualifiedSnippetTypeName;
}