/** * This file is part of ObjectFabric (http://objectfabric.org). * * ObjectFabric is licensed under the Apache License, Version 2.0, the terms * of which may be found at http://www.apache.org/licenses/LICENSE-2.0.html. * * Copyright ObjectFabric Inc. * * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ package org.objectfabric; import java.util.Set; import com.google.gwt.core.ext.LinkerContext; import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.UnableToCompleteException; import com.google.gwt.core.ext.linker.AbstractLinker; import com.google.gwt.core.ext.linker.ArtifactSet; import com.google.gwt.core.ext.linker.CompilationResult; import com.google.gwt.core.ext.linker.LinkerOrder; import com.google.gwt.core.ext.linker.LinkerOrder.Order; import com.google.gwt.dev.util.DefaultTextOutput; @LinkerOrder(Order.POST) public class NodeLinker extends AbstractLinker { @Override public String getDescription() { return "NodeLinker"; } @Override public ArtifactSet link(TreeLogger logger, LinkerContext context, ArtifactSet artifacts) throws UnableToCompleteException { DefaultTextOutput out = new DefaultTextOutput(true); Set<CompilationResult> results = artifacts.find(CompilationResult.class); CompilationResult result = null; if (results.size() > 1) throw new UnableToCompleteException(); if (!results.isEmpty()) { result = results.iterator().next(); String[] js = result.getJavaScript(); if (js.length != 1) throw new UnableToCompleteException(); out.print(js[0]); out.newline(); } out.print("var $stats = function() { };\n"); out.print("var $sessionId = function() { };\n"); out.print("var window = { };\n"); out.print("var navigator = { };\n"); out.print("navigator.userAgent = 'webkit';\n"); out.print("var $doc = { };\n"); out.newline(); out.print("var $wnd = window;\n"); out.print("$wnd.setTimeout = setTimeout;\n"); out.print("$wnd.clearTimeout = clearTimeout;\n"); out.print("$wnd.clearInterval = clearInterval;\n"); out.newline(); out.print("gwtOnLoad(null, '" + context.getModuleName() + "', null);\n"); out.print("var fs = require('fs');\n"); out.print("var WebSocket = require('ws');\n"); out.print("$wnd.org.objectfabric.node = { };\n"); out.print("for(var f in $wnd.org.objectfabric)\n"); out.print(" exports[f] = $wnd.org.objectfabric[f];"); ArtifactSet set = new ArtifactSet(artifacts); set.add(emitString(logger, out.toString(), context.getModuleName() + ".js")); return set; } }