Package collide.demo.parent

Source Code of collide.demo.parent.ParentModule

package collide.demo.parent;

import xapi.log.X_Log;
import xapi.util.api.SuccessHandler;
import collide.client.util.Elements;
import collide.demo.controller.DemoController;
import collide.demo.view.DemoView;
import collide.gwtc.ui.GwtCompilerService;
import collide.gwtc.ui.GwtCompilerShell;
import collide.gwtc.ui.GwtCompilerShell.Resources;

import com.google.collide.client.AppContext;
import com.google.collide.client.CollideBootstrap;
import com.google.collide.client.communication.FrontendApi.ApiCallback;
import com.google.collide.client.plugin.ClientPluginService;
import com.google.collide.client.status.StatusManager;
import com.google.collide.client.status.StatusMessage;
import com.google.collide.client.workspace.WorkspacePlace;
import com.google.collide.clientlibs.model.Workspace;
import com.google.collide.dto.GwtRecompile;
import com.google.collide.dto.GwtSettings;
import com.google.collide.dto.ServerError.FailureReason;
import com.google.collide.plugin.client.terminal.TerminalService;
import com.google.collide.shared.plugin.PublicServices;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.RunAsyncCallback;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;

import elemental.client.Browser;
import elemental.html.ScriptElement;

/**
* This demo class shows how to use gwt reflection to send
* dtos across different compilations of gwt,
* as if the objects were merely loaded by a different classloader.
*
* @author "James X. Nelson (james@wetheinter.net)"
*
*/
public class ParentModule implements EntryPoint{

 
  @Override
  public void onModuleLoad() {
   
    // First, let's setup a callback for child modules to talk to us
    setupNatives();

    // Now, let's bootstrap collide
    startCollide();
  }

  private void startCollide() {
    GWT.runAsync(AppContext.class, new RunAsyncCallback() {
      @Override
      public void onSuccess() {
        CollideBootstrap.start(new SuccessHandler<AppContext>() {
          @Override
          public void onSuccess(AppContext context) {
            DemoView body = new DemoView();
            ClientPluginService plugins = ClientPluginService.initialize
                (context, body, WorkspacePlace.PLACE);
            addGwtCompiler(context, body);
            addEditor(context, body, plugins);
            addTerminal(context, body);
          }

        });
      }
     
      @Override
      public void onFailure(Throwable reason) {
        warn(reason, "Loading Collide's AppContext ");
      }
    });
  }

  private void addTerminal(final AppContext context, DemoView body) {
    GWT.runAsync(TerminalService.class, new RunAsyncCallback() {
      @Override
      public void onSuccess() {
       
      }
     
      @Override
      public void onFailure(Throwable reason) {
        warn(reason, "Loading Collide logger ");
      }
    });
  }

  private void addEditor(final AppContext context, final DemoView body, final ClientPluginService plugins) {
    GWT.runAsync(Workspace.class, new RunAsyncCallback() {
      @Override
      public void onSuccess() {
        new DemoController(context).initialize(body, plugins);
      }
     
      @Override
      public void onFailure(Throwable reason) {
        warn(reason, "Loading Collide workspace ");
      }
    });
  }

  private void addGwtCompiler(final AppContext context, final DemoView body) {
    GWT.runAsync(GwtRecompile.class, new RunAsyncCallback() {
      @Override
      public void onSuccess() {
        // Inject css
        Resources res = GWT.create(Resources.class);
        res.gwtCompilerCss().ensureInjected();
        res.gwtLogCss().ensureInjected();
        res.gwtClasspathCss().ensureInjected();
        res.gwtModuleCss().ensureInjected();
       
        // Prepare view
        GwtCompilerService gwtCompiler = PublicServices.getService(GwtCompilerService.class);
       
        final GwtCompilerShell gwt = gwtCompiler.getShell();
        // Attach compiler
        body.initGwt(gwt);
       
        ResizeHandler handler = new ResizeHandler() {
          @Override
          public void onResize(ResizeEvent event) {
            Elements.getBody().getStyle().setWidth(Browser.getWindow().getInnerWidth()+"px");
            Elements.getBody().getStyle().setHeight(Browser.getWindow().getInnerHeight()+"px");
          }
        };
        Elements.getBody().getStyle().setPosition("absolue");
       
        Window.addResizeHandler(handler);
        handler.onResize(null);
       
        // Request module configs
        context.getFrontendApi().GWT_SETTINGS.request(
          new ApiCallback<GwtSettings>() {
            @Override
            public void onFail(FailureReason reason) {
              warn(context, "Retrieving gwt settings");
            }
            @Override
            public void onMessageReceived(GwtSettings response) {
              new Timer() {
                @Override
                public void run() {}
              }.schedule(1000);
              gwt.showResults(response);
            }
          }
        );
      }
     
      @Override
      public void onFailure(Throwable reason) {
        warn(reason, "Loading GWT compiler ");
      }
    });
  }

  private native void setupNatives()
  /*-{
    $wnd.Callback = function(cls, obj) {
      @collide.demo.parent.ParentModule::receiveForeign(*)(cls, obj);
    };
  }-*/;

  public static void receiveForeign(Object cls, Object obj) {
    X_Log.info("Received foreign object",cls, obj);
  }
 
  private void injectForeignModulue(String src) {
    ScriptElement script = Browser.getDocument().createScriptElement();
    script.setSrc(src);
    Browser.getDocument().getHead().appendChild(script);
  }
  private void warn(Throwable e, String warning) {
    warn((AppContext)null, e+"\n"+warning);
    e.printStackTrace();
  }
  private void warn(AppContext ctx, String warning) {
    StatusManager manager = ctx == null ? new StatusManager() : ctx.getStatusManager();
    new StatusMessage(manager, StatusMessage.MessageType.ERROR,
        warning+" failed in 3 attempts.  Try again later.").fire();
  }
 
}
TOP

Related Classes of collide.demo.parent.ParentModule

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.